@andreas-jung е прав в този ensure_index()
е обвивка върху create_index()
, мисля, че объркването възниква с фразата:
Когато индекс е създаден (или осигурен) от PyMongo, той се „запомня“ за ttlsecond.
Не че индексът е временен или "преходен", това, което се случва е, че по време на посочения период от секунди, извикване на ensure_index()
опит за създаване на същия индекс отново не имат някакъв ефект и няма даси извикайте create_index()
отдолу, но след като този "кеш" изтече, извикване на ensure_index()
ще отново извикайте create_index()
отдолу.
Разбирам напълно объркването ви, защото, честно казано, документите на PyMongo не се справят много добре с обяснението как работи това, но ако отидете на документите на Ruby, обяснението е малко по-ясно:
- (String) provide_index(spec, opts ={})
Извиква create_index и задава флаг, за да не го прави отново за още X минути. Това време може да бъде посочено като опция при инициализиране на Mongo::DBobject като опции[:cache_time] Всякакви промени в индекса ще бъдат разпространени през независимо от времето на кеша (напр. промяна на посоката на индекса)
Параметрите и опциите за тези методи са същите като тези заCollection#create_index.
Примери:
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
Не твърдя, че драйверите работят точно по същия начин, просто за илюстрация обяснението им е малко по-добро IMHO.