sql >> Base de Datos >  >> NoSQL >> MongoDB

Pymongo / MongoDB:¿crear índice o asegurar índice?

@andreas-jung tiene razón en eso ensure_index() es un contenedor sobre create_index() , creo que la confusión surge con la frase:

Cuando PyMongo crea (o garantiza) un índice, se "recuerda" durante ttlsegundos.

No es que el índice sea temporal o "transitorio", lo que sucede es que durante la cantidad de segundos especificada, una llamada a ensure_index() tratar de crear el mismo índice de nuevo no tendrá ningún efecto y no llama a create_index() debajo, pero después de que caduque ese "caché", una llamada a ensure_index() voluntad llama de nuevo a create_index() debajo.

Entiendo perfectamente tu confusión porque, francamente, los documentos de PyMongo no explican muy bien cómo funciona esto, pero si te diriges a los documentos de Ruby, la explicación es un poco más clara:

  • (Cadena) asegurar_index(especificación, opciones ={})

Llama a create_index y establece una marca para que no vuelva a hacerlo durante otros X minutos. Este tiempo se puede especificar como una opción al inicializar un Mongo::DBobject as options[:cache_time] Cualquier cambio en un índice se propagará independientemente del tiempo de caché (por ejemplo, un cambio de dirección del índice)

Los parámetros y opciones de este método son los mismos que los de Collection#create_index.

Ejemplos:

Call sequence:

Time t: @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and sets the 5 minute cache

Time t+2min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- doesn't do anything

Time t+3min : @posts.ensure_index([['something_else', Mongo::ASCENDING]) -- calls create_index and sets 5 minute cache

Time t+10min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and resets the 5 minute counter

No estoy afirmando que los controladores funcionen exactamente igual, es solo que, con fines ilustrativos, su explicación es un poco mejor en mi humilde opinión.