@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.