आप जो बात कर रहे हैं उसे अक्सर "कुंजी संपीड़न"* कहा जाता है। इसे लागू न करने के कई कारण हैं:
- यदि आप इसे करना चाहते हैं, तो आप इसे वर्तमान में एप्लिकेशन/ओआरएम/ओडीएम स्तर पर काफी आसानी से कर सकते हैं।
- जरूरी नहीं कि यह सभी मामलों में एक प्रदर्शन** लाभ हो - बहुत सारे प्रमुख नामों के साथ संग्रह सोचें, और/या कुंजी नाम जो दस्तावेज़ों के बीच बेतहाशा भिन्न हों।
- जब तक आपके पास लाखों दस्तावेज़ न हों, तब तक यह मापन योग्य प्रदर्शन** लाभ बिल्कुल भी प्रदान नहीं कर सकता है।
- यदि सर्वर ऐसा करता है, तो पूरे कुंजी नामों को अभी भी नेटवर्क पर प्रसारित करना होगा।
- यदि संपीडित कुंजी नाम नेटवर्क पर प्रसारित होते हैं, तो पठनीयता वास्तव में जावास्क्रिप्ट कंसोल का उपयोग कर पीड़ित है।
- संपूर्ण JSON दस्तावेज़ को संपीड़ित करना
प्रस्तावित हो सकता हैऔर भी बेहतर प्रदर्शन लाभ प्रदान करता है।
सभी सुविधाओं की तरह, इसे लागू करने के लिए एक लागत लाभ विश्लेषण है, और (कम से कम अब तक) अन्य सुविधाओं ने अधिक "बेकार के लिए धमाके" की पेशकश की है।
भविष्य के MongoDB संस्करण के लिए पूर्ण दस्तावेज़ संपीड़न [विचार किया जा रहा है][1] है। संस्करण 3.0 के रूप में उपलब्ध है (नीचे देखें)
* कुंजी नामों के लिए एक इन-मेमोरी लुकअप टेबल मूल रूप से LZW स्टाइल कम्प्रेशन का एक विशेष मामला है - कमोबेश यही अधिकांश कम्प्रेशन एल्गोरिदम करते हैं।
** संपीड़न एक स्थान लाभ और एक प्रदर्शन लाभ दोनों प्रदान करता है। छोटे दस्तावेज़ों का अर्थ है कि प्रति IO अधिक दस्तावेज़ पढ़े जा सकते हैं, जिसका अर्थ है कि निश्चित IO वाले सिस्टम में प्रति सेकंड अधिक दस्तावेज़ पढ़े जा सकते हैं।
अपडेट करें
MongoDB संस्करण 3.0 और बाद में अब WiredTiger के साथ पूर्ण दस्तावेज़ संपीड़न क्षमता है भंडारण इंजन।
दो संपीड़न एल्गोरिदम उपलब्ध हैं:snappy , और zlib . इसका उद्देश्य स्नैपी को संपूर्ण प्रदर्शन के लिए सबसे अच्छा विकल्प बनाना है, और zlib के लिए अधिकतम भंडारण क्षमता के लिए सबसे अच्छा विकल्प होना है।
मेरे व्यक्तिगत (गैर-वैज्ञानिक, लेकिन एक वाणिज्यिक परियोजना से संबंधित) प्रयोग में, तेज़ संपीड़न (हमने zlib का मूल्यांकन नहीं किया) ने ध्यान देने योग्य शुद्ध प्रदर्शन लागत पर उल्लेखनीय रूप से बेहतर भंडारण घनत्व की पेशकश की। वास्तव में, कुछ मामलों में थोड़ा बेहतर प्रदर्शन था, मोटे तौर पर मेरी पिछली टिप्पणियों/भविष्यवाणियों के अनुरूप।