विरल झंडा थोड़ा अजीब है। यह समझने के लिए कि इसका उपयोग कब करना है, आपको यह समझना होगा कि "विरल" पहले स्थान पर क्यों मौजूद है।
जब आप एक फ़ील्ड पर एक साधारण अनुक्रमणिका बनाते हैं, तो प्रत्येक दस्तावेज़ के लिए एक प्रविष्टि होती है, यहाँ तक कि ऐसे दस्तावेज़ भी जिनमें वह फ़ील्ड नहीं है।
उदाहरण के लिए, यदि आपके पास {rarely_set_field : 1}
. पर कोई अनुक्रमणिका है , आपके पास एक इंडेक्स होगा जो ज्यादातर null
. से भरा होता है क्योंकि ज्यादातर मामलों में वह क्षेत्र मौजूद नहीं होता है। यह स्थान की बर्बादी है और इसे खोजना अक्षम है।
{sparse:true}
विकल्प null
. से छुटकारा पायेगा मान, इसलिए आपको एक इंडेक्स मिलता है जिसमें केवल प्रविष्टियां होती हैं जब {rarely_set_field}
परिभाषित किया गया है।
अपने मामले पर वापस जाएं।
आप बूलियन + स्पैस का उपयोग करने के बारे में पूछ रहे हैं। लेकिन विरल वास्तव में "बूलियन" को प्रभावित नहीं करता है, विरल प्रभाव "सेट बनाम सेट नहीं है"।
आपके मामले में, आप unfinished
को लाने का प्रयास कर रहे हैं . sparse
का लाभ उठाने के लिए कुंजी बूलियन मान नहीं है, लेकिन तथ्य यह है कि unfinished
प्रविष्टियों में वह कुंजी होती है और "समाप्त" प्रविष्टियों में कोई कुंजी नहीं होती है।
{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished
ऐसा लगता है कि आप किसी कतार का उपयोग कर रहे हैं
विरल सूचकांक को लागू करने के लिए आप निश्चित रूप से ऊपर दी गई जानकारी का लाभ उठा सकते हैं। हालांकि, वास्तव में ऐसा लगता है कि आप एक कतार का उपयोग कर रहे हैं। MongoDB एक कतार के रूप में सेवा योग्य है, यहां दोहैं ए> उदाहरण ।
हालाँकि, यदि आप कतार को देखते हैं, तो वे इसे वैसे नहीं कर रहे हैं जैसा आप कर रहे हैं। मैं व्यक्तिगत रूप से कुछ उत्पादन प्रणालियों के लिए एक कतार के रूप में MongoDB का उपयोग कर रहा हूं और यह बहुत अच्छी तरह से चलता है, लेकिन अपने अपेक्षित भार का परीक्षण करें क्योंकि एक समर्पित कतार बेहतर प्रदर्शन करेगी।