@andreas-jung उस ensure_index()
. में सही है create_index()
. पर एक आवरण है , मुझे लगता है कि वाक्यांश के साथ भ्रम पैदा होता है:
जब PyMongo द्वारा एक इंडेक्स बनाया जाता है (या सुनिश्चित किया जाता है) तो इसे ttlseconds के लिए "याद" किया जाता है।
ऐसा नहीं है कि सूचकांक अस्थायी या "क्षणिक" है, क्या होता है कि निर्दिष्ट सेकंड के दौरान, ensure_index()
पर कॉल किया जाता है। फिर से वही अनुक्रमणिका बनाने का प्रयास नहीं कोई प्रभाव पड़ेगा और नहीं कॉल करें create_index()
नीचे, लेकिन उसके बाद "कैश" समाप्त हो जाता है, ensure_index()
. पर एक कॉल होगा फिर से कॉल करें create_index()
नीचे।
मैं आपके भ्रम को पूरी तरह से समझता हूं क्योंकि काफी स्पष्ट रूप से पायमोंगो के दस्तावेज़ यह समझाने में बहुत अच्छा काम नहीं करते हैं कि यह कैसे काम करता है, लेकिन यदि आप रूबी दस्तावेज़ों पर जाते हैं, तो स्पष्टीकरण थोड़ा स्पष्ट है:
- (स्ट्रिंग) सुनिश्चित_इंडेक्स (कल्पना, ऑप्ट्स ={})
create_index को कॉल करता है और एक और X मिनट के लिए फिर से ऐसा न करने के लिए एक ध्वज सेट करता है। इस समय को एक विकल्प के रूप में निर्दिष्ट किया जा सकता है जब एक Mongo::DBobject को विकल्प के रूप में प्रारंभ किया जाता है [:cache_time] कैश समय की परवाह किए बिना किसी इंडेक्स में कोई भी परिवर्तन प्रचारित किया जाएगा (उदाहरण के लिए, a सूचकांक दिशा में परिवर्तन)
इस तरीके के लिए पैरामीटर और विकल्प वही हैं जो 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 है।