टिकाऊपन "एसीआईडी" गुणों (ए - परमाणुता, सी - संगति, आई - अलगाव) में "डी" है, जिसे पारंपरिक रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (आरडीबीएमएस) द्वारा लोकप्रिय बनाया गया है। स्थायित्व गारंटी है कि लिखित डेटा सहेजा गया है और स्थायी रूप से जीवित रहेगा। मोंगोडीबी जैसे नोएसक्यूएल डेटाबेस डेवलपर्स को उनके लेखन कॉल के स्थायित्व पर बढ़िया नियंत्रण प्रदान करते हैं। यह डेवलपर्स को डेटा के विभिन्न वर्गों के लिए अलग-अलग स्थायित्व, सुरक्षा और प्रदर्शन मॉडल चुनने में सक्षम बनाता है। हालाँकि, यह डेवलपर पर विभिन्न लेखन सुरक्षा विकल्पों की बारीकियों को समझने और समझने का बोझ भी डालता है। इस पोस्ट में, हम जावा ड्राइवर में उपलब्ध कराई गई राइट सेफ्टी के लिए विभिन्न विकल्पों को देखेंगे।
MongoDB भाषा में, इसे "चिंता लिखें" कहा जाता है। लिखें चिंताएं "कमजोर" से "मजबूत" तक भिन्न होती हैं। कमजोर लेखन चिंताएं उच्च थ्रूपुट को जन्म दे सकती हैं लेकिन कम डेटा सुरक्षा प्रदान करती हैं और मजबूत लेखन चिंताएं इसके विपरीत हैं।
Java ड्राइवर आपको कई टेलिस्कोपिंग कंस्ट्रक्टरों का उपयोग करके अपने लेखन सुरक्षा विकल्पों को निर्दिष्ट करने की अनुमति देता है। यहाँ सभी विकल्पों के साथ कंस्ट्रक्टर है:
WriteConcern(int w, int wtimeout, boolean fsync, boolean j, boolean continueOnError)
जैसा कि आप देख सकते हैं, इस कंस्ट्रक्टर के पास बहुत सारे विकल्प हैं। डेवलपर्स के लिए इसे आसान बनाने के लिए, सामान्य लेखन चिंता मूल्यों के लिए "टैग" प्रदान किए जाते हैं - अनजान, स्वीकृत, जर्नल, एफसिंक और प्रतिकृति स्वीकृत। प्रत्येक टैग उपरोक्त कंस्ट्रक्टर के एक निश्चित आह्वान के लिए मैप करता है।
अनकॉल्डेड MongoDB मोड
यह "फायर एंड फॉरगेट" मोड है। MongoDB ड्राइवर लेखन कार्यों की प्राप्ति को स्वीकार करने का प्रयास नहीं करता है। उदाहरण के लिए, यदि आपकी MongoDB सेवा बंद है और आप इस मोड का उपयोग कर रहे हैं, तो सभी त्रुटियों को चुपचाप अनदेखा कर दिया जाता है और आपका डेटा खो जाता है। जाहिर है, आपको इस मोड का उपयोग केवल कम-मूल्य वाले डेटा के लिए करना चाहिए, जहां एक निश्चित मात्रा में डेटा के नुकसान की तुलना में थ्रूपुट लिखना अधिक महत्वपूर्ण है। इस मोड को निम्नानुसार निर्दिष्ट किया जा सकता है:
new WriteConcern(0) / WriteConcern.UNACKNOWLEDGED
स्वीकृत MongoDB मोड
यह MongoDB के लिए डिफ़ॉल्ट लेखन मोड है। इस मोड में, MongoDB ड्राइवर सर्वर पर लिखने के संचालन की प्राप्ति को स्वीकार करने का प्रयास करता है, जिससे ड्राइवर को किसी भी नेटवर्क त्रुटियों, डुप्लिकेट कुंजियों की त्रुटियों आदि को पकड़ने की अनुमति मिलती है। हालांकि, यह गारंटी नहीं देता है कि डेटा डिस्क पर सहेजा गया है। यदि MongoDB सर्वर लेखन को स्वीकार करने के बाद क्रैश हो जाता है, लेकिन इसे डिस्क पर करने से पहले, डेटा खो जाता है। इस मोड को निम्नानुसार निर्दिष्ट किया जा सकता है:
new WriteConcern(1) / WriteConcern.ACKNOWLEDGED
जर्नल किया गया MongoDB मोड
इस मोड में, MongoDB सर्वर जर्नल को डेटा देने के बाद ही लिखने को स्वीकार करता है। इस मोड का उपयोग करते समय, भले ही सर्वर पुनरारंभ होने पर सर्वर क्रैश हो जाए, डेटा को जर्नल से पुन:लागू किया जाता है। जाहिर है, इसके लिए काम करने के लिए जर्नलिंग को सक्षम करने की आवश्यकता है। सभी उत्पादन प्रणालियों में जर्नलिंग सक्षम होनी चाहिए, और आप इसके बारे में हमारी पोस्ट में अधिक जान सकते हैं क्या आपको MongoDB जर्नलिंग सक्षम करनी चाहिए?
एक प्रतिकृति सेट परिदृश्य में, जर्नलिंग लेखन चिंताएं केवल प्राथमिक पर लागू होती हैं। डिफ़ॉल्ट रूप से, जर्नल प्रत्येक 100ms पर डिस्क के लिए प्रतिबद्ध है। जब आप जर्नल विकल्प के साथ एक लेखन निर्दिष्ट करते हैं, तो जर्नल 30ms में डिस्क के लिए प्रतिबद्ध होता है। इसलिए, यदि आप प्रत्येक लेखन के लिए j:true निर्दिष्ट करते हैं, तो आपका थ्रूपुट अधिकतम 1000/30 =33.3 राइट/सेकंड होगा। यदि आप बेहतर थ्रूपुट चाहते हैं, तो आपको अपने अपडेट को बैच करना होगा और बैच के अंतिम अपडेट के लिए j:true सेट करना होगा। इस मोड को निम्नानुसार निर्दिष्ट किया जा सकता है:
WriteConcern( 1, 0, false, true ) / WriteConcern.JOURNALLED
Fsynced MongoDB Mode
इस मोड में, MongoDB सर्वर डिस्क पर लिखने के बाद ही लेखन को स्वीकार करता है। इस मोड को निम्नानुसार निर्दिष्ट किया जा सकता है:
new WriteConcern(true) / WriteConcern.FSYNCED
प्रतिकृति स्वीकृत MongoDB मोड
पिछला लेखन सुरक्षा मोड केवल एक सर्वर पर लागू होता है। जब आप प्रतिकृति सेट चलाते हैं, तो आपके पास यह नियंत्रित करने का विकल्प होता है कि आपके लेखन को सफल माने जाने से पहले कितनी प्रतिकृतियां लिखी जानी चाहिए। उदाहरण के लिए, "w:2″" की एक लिखित चिंता के साथ, सफल माने जाने से पहले लेखन को एक प्राथमिक और कम से कम एक माध्यमिक में लिखा जाना चाहिए। यह थ्रूपुट को कम करता है लेकिन आपको बेहतर सुरक्षा देता है। यदि आप पहले से प्रतिकृतियों की संख्या के बारे में नहीं जानते हैं, तो आप यह सुनिश्चित करने के लिए कि अधिकांश प्रतिकृतियों में डेटा सहेजा गया है, आप WriteConcern.MAJORITY टैग का उपयोग कर सकते हैं। यह MongoDB में सबसे सुरक्षित विकल्प है। यदि आप इस विकल्प का उपयोग करने जा रहे हैं, तो यह इंगित करने के लिए "wtimeout" मान सेट करना सुनिश्चित करें कि विफलता लौटने से पहले कमांड को कितनी देर तक प्रतीक्षा करनी चाहिए:
new WriteConcern(2)/ REPLICA_ACKNOWLEDGED new Majority()/ WriteConcern.MAJORITY
निम्न टैग को हटा दिया गया है (या होने की योजना है) - ERRORS_IGNORED, NORMAL, SAFE, FSYNC_SAFE, JOURNAL_SAFE, REPLICAS_SAFE। कृपया इन विकल्पों के बजाय नए विकल्पों का उपयोग करें। हमेशा की तरह, यदि आपके पास कोई टिप्पणी या प्रश्न हैं तो कृपया [email protected] पर हमसे संपर्क करें।