कोई भी निर्दिष्ट नहीं होने पर डिफ़ॉल्ट सॉर्ट क्रम क्या होता है?
डिफ़ॉल्ट आंतरिक क्रम (या प्राकृतिक क्रम) एक अपरिभाषित है कार्यान्वयन विवरण। भंडारण इंजनों के लिए ऑर्डर बनाए रखना अतिरिक्त ओवरहेड है और MongoDB का API स्पष्ट sort()
के बाहर पूर्वानुमेयता को अनिवार्य नहीं करता है। या निश्चित आकार के कैप्ड संग्रहों का विशेष मामला जिसमें संबद्ध उपयोग प्रतिबंध हैं। विशिष्ट वर्कलोड के लिए स्टोरेज इंजन के लिए यह वांछनीय है कि वह उपलब्ध पूर्व-आवंटित स्थान का पुन:उपयोग करने का प्रयास करे और निर्णय करे कि डिस्क और मेमोरी में डेटा को सबसे कुशलता से कैसे संग्रहीत किया जाए।
बिना किसी क्वेरी मानदंड के, परिणाम स्टोरेज इंजन द्वारा प्राकृतिक क्रम में लौटाए जाएंगे (उर्फ वे पाए जाने के क्रम में ) परिणाम क्रम सम्मिलन आदेश के साथ मेल खा सकता है लेकिन इस व्यवहार की गारंटी नहीं है और इस पर भरोसा नहीं किया जा सकता (कैप्ड संग्रह से अलग)।
कुछ उदाहरण जो भंडारण (प्राकृतिक) क्रम को प्रभावित कर सकते हैं:
- WiredTiger इन-मेमोरी कैश बनाम डिस्क पर दस्तावेज़ों के एक अलग प्रतिनिधित्व का उपयोग करता है, इसलिए आंतरिक डेटा संरचनाओं के आधार पर प्राकृतिक क्रम बदल सकता है।
- मूल MMAPv1 स्टोरेज इंजन (MongoDB 4.2 में हटाया गया) पैडिंग नियमों के आधार पर दस्तावेज़ों के लिए रिकॉर्ड स्थान आवंटित करता है। यदि कोई दस्तावेज़ वर्तमान में आवंटित रिकॉर्ड स्थान को बढ़ा देता है, तो दस्तावेज़ स्थान (और प्राकृतिक क्रम) प्रभावित होगा। हटाए गए या स्थानांतरित किए गए दस्तावेज़ों के कारण पुन:उपयोग के लिए उपलब्ध भंडारण में नए दस्तावेज़ भी डाले जा सकते हैं।
- प्रतिकृति सेट सदस्यों में लगातार लिखने के संचालन को लागू करने के लिए प्रतिकृति एक निष्क्रिय ओप्लॉग प्रारूप का उपयोग करती है। प्रत्येक प्रतिकृति सेट सदस्य स्थानीय डेटा फ़ाइलों को बनाए रखता है जो प्राकृतिक क्रम में भिन्न हो सकते हैं, लेकिन जब ओप्लॉग अपडेट लागू होते हैं तो उनका डेटा परिणाम समान होगा।
क्या होगा यदि किसी अनुक्रमणिका का उपयोग किया जाता है?
यदि किसी अनुक्रमणिका का उपयोग किया जाता है, तो दस्तावेज़ों को उसी क्रम में लौटाया जाएगा जिस क्रम में वे पाए जाते हैं (जो आवश्यक रूप से सम्मिलन आदेश या I/O आदेश से मेल खाता है)। यदि एक से अधिक इंडेक्स का उपयोग किया जाता है तो ऑर्डर आंतरिक रूप से इस बात पर निर्भर करता है कि डी-डुप्लीकेशन प्रक्रिया के दौरान किस इंडेक्स ने पहले दस्तावेज़ की पहचान की थी।
यदि आप एक पूर्वानुमेय क्रमित क्रम चाहते हैं तो आपको जरूरी एक स्पष्ट sort()
शामिल करें आपकी क्वेरी के साथ और आपकी सॉर्ट कुंजी के लिए अद्वितीय मान हैं।
कैप्ड संग्रह प्रविष्टि क्रम को कैसे बनाए रखते हैं?
कैप्ड संग्रह में प्राकृतिक क्रम के लिए उल्लिखित कार्यान्वयन अपवाद उनके विशेष उपयोग प्रतिबंधों द्वारा लागू किया गया है:दस्तावेज़ सम्मिलन क्रम में संग्रहीत किए जाते हैं लेकिन मौजूदा दस्तावेज़ आकार को बढ़ाया नहीं जा सकता है और दस्तावेज़ों को स्पष्ट रूप से हटाया नहीं जा सकता है। ऑर्डर करना कैप्ड कलेक्शन डिज़ाइन का हिस्सा है जो सबसे पुराने दस्तावेज़ों को पहले "उम्र से बाहर" सुनिश्चित करता है।