MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Pymongo / MongoDB :créer un index ou garantir un index ?

@andreas-jung a raison dans ce ensure_index() est un wrapper sur create_index() , je pense que la confusion se produit avec la phrase :

Lorsqu'un index est créé (ou assuré) par PyMongo, il est "mémorisé" pendant ttlsecondes.

Ce n'est pas que l'index est temporaire ou "transitoire", ce qui se passe, c'est que pendant le nombre de secondes spécifié, un appel à ensure_index() essayer de recréer le même index ne sera pas n'aura aucun effet et n'aura pas appelez create_index() en dessous, mais après l'expiration de ce "cache", un appel à ensure_index() va appelez à nouveau create_index() dessous.

Je comprends parfaitement votre confusion car, franchement, la documentation de PyMongo n'explique pas très bien comment cela fonctionne, mais si vous vous dirigez vers la documentation Ruby, l'explication est un peu plus claire :

  • (Chaîne)assure_index(spec, opts ={})

Appelle create_index et définit un indicateur pour ne plus recommencer pendant X minutes supplémentaires. Ce temps peut être spécifié comme une option lors de l'initialisation d'un objet Mongo::DB en tant qu'options[:cache_time] changement de sens de l'index)

Les paramètres et les options de cette méthode sont les mêmes que ceux de Collection#create_index.

Exemples :

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

Je ne prétends pas que les pilotes fonctionnent exactement de la même manière, c'est juste qu'à des fins d'illustration, leur explication est un peu meilleure à mon humble avis.