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

क्या MongoDB $set केवल फ़ील्ड या संपूर्ण दस्तावेज़ लिखता है?

TL; DR:$inc इन-प्लेस अपडेट की गारंटी देता है, $set नहीं, लेकिन बहुत विशिष्ट परिस्थितियों में इसे अपने स्थान पर भी किया जा सकता है।

विवरण

इसके दो पहलू हैं:

  1. यह तार के ऊपर कैसे जाता है?

    जानकारी एक ऑपरेशन के रूप में भेजी जाती है, एक $set एक $set रहता है तो यह एक डेल्टा है। प्रतिकृति के लिए उपयोग किए जाने वाले ओप्लॉग के लिए भी यही सच है। इस तरह, $set . का उपयोग करके बैंडविड्थ के संबंध में अधिक कुशल है।

  2. इसे डिस्क पर कैसे अपडेट किया जाता है?

    MongoDB एक इन-प्लेस अपडेट करता है अगर और केवल अगर कुंजी (फ़ील्ड) पहले से मौजूद है , इसलिए जब आप किसी दस्तावेज़ में एक नया फ़ील्ड जोड़ते हैं, तो यह किसी मौजूदा फ़ील्ड को केवल एक भिन्न मान निर्दिष्ट करने की तुलना में एक बड़ा ऑपरेशन होता है।

    फिर भी, हालांकि, मानों का समान आकार . होना चाहिए और प्रकार नहीं बदलना चाहिए और वे प्रकार के होने चाहिए double, long, int or bool , अन्यथा यह नहीं है वर्तमान में एक इन-प्लेस अपडेट।

मुझे यकीन नहीं है कि बाद वाला वास्तव में कैसे महत्वपूर्ण है व्यवहार में , लेकिन सर्वर निश्चित रूप से दोनों के लिए पूरी तरह से अलग कोड पथ का उपयोग करता है, इसलिए यह उदाहरण के लिए फ़ील्ड री-ऑर्डरिंग का कारण बन सकता है। बहुत बड़े दस्तावेज़ों के लिए, जिसके परिणामस्वरूप संभवतः प्रदर्शन में औसत दर्जे का अंतर आएगा।

इससे पता चलता है कि $inc इस मायने में बहुत अलग है कि यह केवल संचालन की अनुमति देता है जो निश्चित रूप से जगह में हैं, क्योंकि $inc केवल संख्यात्मक प्रकारों पर काम करता है और स्वाभाविक रूप से आकार या प्रकार को नहीं बदल सकता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. NodeJS + Mongo:यदि मौजूद नहीं है तो डालें, अन्यथा - अपडेट करें

  2. दो ऑब्जेक्ट सरणियों की तुलना करना और जांचना कि क्या उनके पास सामान्य तत्व हैं

  3. .NET में आंशिक अद्यतन MongoDB के लिए REST API को पैच करें

  4. Django+MongoDB बनाम Node.js+MongoDB

  5. MongoError को कैसे हल करें:CosmosDB से कनेक्ट करते समय पूल नष्ट हो गया