आज सबसे लोकप्रिय रिलेशनल डेटाबेस “ACID का समर्थन करते हैं) गुण - परमाणुता, संगति, अलगाव और स्थायित्व। रिलेशनल डेटाबेस के साथ काम करने वाले डेवलपर्स और डीबीए (डेटाबेस एडमिनिस्ट्रेटर) को एसीआईडी व्यवहार की अच्छी समझ है। हालांकि, जब मोंगोडीबी क्लाउड जैसे नोएसक्यूएल डेटाबेस के साथ काम करते हैं, तो कुछ महत्वपूर्ण अंतर होते हैं जिन्हें समझना आपके लिए महत्वपूर्ण होता है। MongoDB भंडारण, स्कीमा और स्केलिंग में बहुत लचीलापन प्रदान करता है, लेकिन कुछ ACID गुणों को आराम देता है। जब आप अपना डेटा मॉडल करते हैं और MongoDB कमांड निष्पादित करते हैं, तो अंतरों को समझना आवश्यक है।
परमाणुता
विकिपीडिया "परमाणुता" को इस प्रकार परिभाषित करता है - "एक परमाणु लेन-देन में" , डेटाबेस संचालन की एक श्रृंखला या तो सभी होता है, या कुछ नहीं घटित होना। परमाणुता की गारंटी केवल आंशिक रूप से होने वाले डेटाबेस के अपडेट को रोकती है, जो पूरी श्रृंखला को पूरी तरह से खारिज करने के बाद अधिक समस्याएं पैदा कर सकती है। दूसरे शब्दों में, परमाणु का अर्थ है अविभाज्यता और अरेड्यूसिबिलिटी"।
MongoDB लेखन कार्य परमाणु हैं, केवल एक दस्तावेज़ के स्तर पर। यदि आप किसी दस्तावेज़ के अंदर कई उप-दस्तावेज़ों को संशोधित कर रहे हैं, तो ऑपरेशन अभी भी परमाणु है, लेकिन यदि आप कई दस्तावेज़ों को संशोधित कर रहे हैं, तो ऑपरेशन परमाणु नहीं है। तो, आप कई दस्तावेज़ों में परमाणु व्यवहार कैसे प्राप्त करते हैं? वांछित परमाणुता प्राप्त करने के लिए आपको "दो-चरण प्रतिबद्ध" पैटर्न का उपयोग करने की आवश्यकता है। इस पैटर्न को कैसे लागू किया जाए, इस पर MongoDB प्रलेखन का एक बेहतरीन उदाहरण यहां दिया गया है। दो-चरण प्रतिबद्ध पैटर्न लागू करने और सही होने के लिए गैर-तुच्छ है - इसलिए सुनिश्चित करें कि एकाधिक दस्तावेज़ परमाणुता लिखते हैं जिसे आप शूट करना चाहते हैं।
अलगाव
विकिपीडिया "आइसोलेशन" को इस प्रकार परिभाषित करता है - "डेटाबेस सिस्टम में, आइसोलेशन एक संपत्ति है जो परिभाषित करती है कि एक ऑपरेशन द्वारा किए गए परिवर्तन अन्य समवर्ती संचालन के लिए कैसे/कब दिखाई देते हैं"। आपके MongoDB संचालन के साथ अलगाव प्राप्त करने के कई तरीके हैं, उदाहरण के लिए:
-
“findAndModifyOperation ()” कमांड
यह मौजूदा दस्तावेज़ों को क्वेरी करने और संशोधित करने के सबसे सरल तरीकों में से एक है। कमांड या तो दस्तावेजों के पिछले मूल्यों या दस्तावेजों के नए अद्यतन मूल्यों को वापस कर सकता है। आप मेल खाने वाले दस्तावेज़ों को सॉर्ट भी कर सकते हैं, अप्सर्ट कर सकते हैं और चुन सकते हैं कि किन फ़ील्ड्स को वापस करना है:
db.collection.findAndModify( { query: <document>, sort: <document>, remove: <boolean>, update: <document>, new: <boolean>, fields: <document>, upsert: <boolean> } );
-
“अपडेट करें यदि वर्तमान है” पैटर्न
यह पैटर्न MongoDB दस्तावेज़ीकरण में निर्दिष्ट है। इसमें अधिक मैन्युअल कार्य शामिल है लेकिन यह आपको अधिक नियंत्रण प्रदान करता है।
-
$isolation Operator
$isolation ऑपरेटर कई दस्तावेज़ों को लिखने को अलग करने का एक तरीका प्रदान करता है। हालांकि, $isolation ऑपरेटर सभी या कुछ नहीं की गारंटी प्रदान नहीं करता है - आपको इसे प्राप्त करने के लिए पहले खंड में निर्दिष्ट कुछ परमाणु तकनीकों का उपयोग करने की आवश्यकता होगी। साथ ही, $isolation ऑपरेटर शार्क के लिए काम नहीं करता है। इस कमांड को पहले "$atomic" कहा जाता था - अब इसका सही नाम बदलकर "$isolated" कर दिया गया है।
Concurrency
MongoDB एक ही समय में एक ही डेटा को अपडेट करने से कई क्लाइंट को रोकने के लिए लॉक का उपयोग करता है। MongoDB 2.2+ "डेटाबेस" स्तर के ताले का उपयोग करता है। इसलिए, जब एक राइट ऑपरेशन डेटाबेस को लॉक कर देता है, तो उसी डेटाबेस में अन्य सभी राइट ऑपरेशंस (भले ही वे एक अलग संग्रह में हों) लॉक पर प्रतीक्षा में अवरुद्ध हो जाते हैं। MongoDB "लेखक लालची" ताले का उपयोग करता है, जो पढ़ने पर लिखने का पक्ष लेता है। 2.2+ में, कुछ लंबे समय तक चलने वाले ऑपरेशन उनके लॉक उत्पन्न कर सकते हैं।
धागे सुरक्षा
सभी MongoDB क्लाइंट क्लास थ्रेड-सुरक्षित नहीं हैं - कृपया अपने विशिष्ट ड्राइवर के दस्तावेज़ देखें कि आप जिन कक्षाओं का उपयोग कर रहे हैं वे थ्रेड-सुरक्षित हैं या नहीं। उदाहरण के लिए, जावा ड्राइवर में, MongoClient वर्ग थ्रेड-सुरक्षित है। तो, आप अपने सभी धागे में इस वर्ग के एक ही उदाहरण का उपयोग कर सकते हैं। आंतरिक रूप से, MongoClient, MongoDB सर्वर से कनेक्शन प्रबंधित करने के लिए एक कनेक्शन पूल का उपयोग करता है।
हमेशा की तरह, यदि आपके कोई प्रश्न हैं, तो कृपया [email protected] पर हमसे संपर्क करें।