MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

बीएसओएन स्ट्रिंग (सीस्ट्रिंग/एनाम नहीं) के बाद पिछला 0x00 बाइट क्यों?

स्ट्रिंग की लंबाई और नल टर्मिनेटर दोनों के लिए तर्क दो गुना है:मौजूदा सी-स्टाइल स्ट्रिंग्स के साथ संगतता, और प्रदर्शन।

प्रदर्शन के लिए, MongoDB को पूरे BSON के माध्यम से पुनरावृति किए बिना किसी दस्तावेज़ में एक विशिष्ट क्षेत्र में जल्दी से जाने में सक्षम होना चाहिए। यह विशेष रूप से महत्वपूर्ण है यदि आप एक ऐसे क्षेत्र की तलाश कर रहे हैं जो एक बड़े (जैसे 16 एमबी) दस्तावेज़ के अंत के करीब हो। स्ट्रिंग प्रकार पर पहली जानकारी में से एक के रूप में एन्कोड की गई स्ट्रिंग की लंबाई के साथ, यह केवल बाइट्स की संख्या को छोड़ सकता है और अगले फ़ील्ड पर पहुंच सकता है। अन्यथा, इसे तब तक पूरी स्ट्रिंग पर पुनरावृति करने की आवश्यकता होगी जब तक कि इसे स्ट्रिंग का अंत नहीं मिल जाता।

अनुकूलता के लिए, MongoDB को C++ में लिखा गया है, जहां स्ट्रिंग्स नल टर्मिनेटेड हैं। . लंबाई एन्कोड किए जाने के बाद से यह एक बाइट को बचाने के लिए उस नल टर्मिनेटर को काट सकता है, लेकिन उस स्ट्रिंग को बीएसओएन से उस प्रारूप में प्राप्त करना जो सी ++ द्वारा प्रयोग योग्य है, उस शून्य पर फिर से निपटने की आवश्यकता होगी। इसके लिए विशेष स्ट्रिंग हैंडलिंग रूटीन की आवश्यकता होगी जिसका एकमात्र लाभ एक बाइट को सहेजना है।

कुल मिलाकर, यह निर्णय लिया गया कि एक बाइट को "बर्बाद करना" एक स्वीकार्य ट्रेडऑफ़ है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. विफल:संग्रह में संग्रह का कोई इरादा नहीं

  2. MongoDB में पुश ऑपरेशंस

  3. मोंगोरेस्टोर, उल्का उत्पादन सर्वर से स्थानीय . तक

  4. मानगो और जियो डेटा के साथ हमेशा 100 तक सीमित खोजें

  5. मोंगोडीबी $cmp