@andreas-jung má pravdu v tom ensure_index()
je obal nad create_index()
, Myslím, že zmatek vzniká u fráze:
Když PyMongo vytvoří (nebo zajistí) index, je „zapamatován“ po dobu ttlsekund.
Nejde o to, že by index byl dočasný nebo „přechodný“, stane se to, že během zadaného počtu sekund dojde k volání funkce ensure_index()
pokus o vytvoření stejného indexu znovu nebude mít žádný účinek a nebude zavolejte create_index()
pod, ale poté, co tato "mezipaměť" vyprší, volání funkce ensure_index()
bude znovu zavolejte create_index()
pod.
Dokonale rozumím vašemu zmatku, protože upřímně řečeno, dokumenty PyMongo neodvádějí příliš dobrou práci ve vysvětlování toho, jak to funguje, ale pokud zamíříte do dokumentů Ruby, vysvětlení je trochu jasnější:
- (String) secure_index(spec, opts ={})
Zavolá create_index a nastaví příznak, aby se tak nestalo znovu po dobu dalších X minut. tento čas lze zadat jako volbu při inicializaci Mongo::DBobject jako options[:cache_time] Jakékoli změny indexu budou přeneseny bez ohledu na čas mezipaměti (např. změna směru indexu)
Parametry a možnosti pro tyto metody jsou stejné jako u Collection#create_index.
Příklady:
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
Netvrdím, že ovladače fungují úplně stejně, jen pro ilustrační účely je jejich vysvětlení IMHO o něco lepší.