MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Pymongo / MongoDB:crea l'indice o assicurati l'indice?

@andreas-jung ha ragione in quel ensure_index() è un wrapper su create_index() , penso che la confusione sorga con la frase:

Quando un indice viene creato (o garantito) da PyMongo, viene "ricordato" per ttlsecondi.

Non è che l'indice sia temporaneo o "transitorio", quello che succede è che durante la quantità di secondi specificata, una chiamata a ensure_index() provare a creare di nuovo lo stesso indice non avere alcun effetto e non chiama create_index() sotto, ma dopo la scadenza di quella "cache", una chiamata a ensure_index() farà chiama di nuovo create_index() sotto.

Capisco perfettamente la tua confusione perché francamente i documenti di PyMongo non fanno un ottimo lavoro nello spiegare come funziona, ma se vai ai documenti di Ruby, la spiegazione è un po' più chiara:

  • (Stringa) sure_index(spec, opts ={})

Chiama create_index e imposta un flag per non farlo di nuovo per altri X minuti. Questa volta può essere specificata come opzione durante l'inizializzazione di un Mongo::DBobject come opzioni[:cache_time] Eventuali modifiche a un indice verranno propagate indipendentemente dal tempo della cache (ad es. cambio di direzione dell'indice)

I parametri e le opzioni per questo metodo sono gli stessi di quelli perCollection#create_index.

Esempi:

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

Non sto affermando che i driver funzionino esattamente allo stesso modo, è solo che a scopo illustrativo la loro spiegazione è leggermente migliore IMHO.