MongoDB एक ऑन-डिस्क जर्नल का उपयोग लिखने के संचालन की गारंटी देने और क्रैश लचीलापन प्रदान करने के लिए करता है। MongoDB प्रत्येक लेखन के लिए एक जर्नल भी बनाता है जिसमें सटीक डिस्क स्थान और लेखन में परिवर्तित बाइट्स शामिल होते हैं। इस प्रकार, यदि आपका सर्वर क्रैश हो जाता है, तो जर्नल का उपयोग किसी भी लेखन को फिर से चलाने के लिए किया जा सकता है जो अभी तक डेटा फ़ाइलों में नहीं लिखा गया है।
MongoDB आपके डेटा को डिस्क पर लिखने के लिए मेमोरी मैप की गई फ़ाइलों का उपयोग करता है। डिफ़ॉल्ट रूप से, MongoDB डेटा फ़ाइलें हर 60 सेकंड में डिस्क पर फ़्लश की जाती हैं। वे जर्नल के लिए मेमोरी मैप की गई फ़ाइलों का भी उपयोग करते हैं, और डिफ़ॉल्ट रूप से, जर्नल को हर 100ms पर डिस्क पर फ़्लश किया जाता है। चूंकि अंतिम डेटा फ़ाइलों को हर 60 सेकंड में डिस्क पर फ़्लश किया जाता है, इसलिए जर्नल को एक मिनट से अधिक समय तक लिखने को ट्रैक करने की आवश्यकता नहीं होती है। जर्नलिंग के यांत्रिकी के बारे में अधिक जानकारी के लिए, आधिकारिक दस्तावेज़ देखें। यह समझने के लिए कि दृश्य मानचित्रण कैसे अधिक विस्तार से काम करता है, आप क्रिस्टीना का ब्लॉग देख सकते हैं।
जर्नलिंग चिंता लिखें
>db.data.insert({"name":"testentry"}); >db.runCommand({"getLastError":1, "j":true});
जब आप MongoDB जर्नलिंग चालू करते हैं, तो आपके पास अपने MongoDB संचालन के लिए 'जर्नलेड' के MongoDB में एक लेखन चिंता निर्दिष्ट करने की क्षमता भी होती है। इसका तात्पर्य यह है कि मोंगोडीबी जर्नल के लिए प्रतिबद्ध होने के बाद ही लिखने के संचालन की पुष्टि करता है। हालाँकि, इसमें एक खामी है - जब आप "j" निर्दिष्ट करते हैं:getLastError के साथ सच है, तो MongoDB जर्नल डेटा करने से पहले जर्नल के लगभग 1/3 आंतरिक प्रतिबद्ध होने की प्रतीक्षा करेगा। डिफ़ॉल्ट जर्नल प्रतिबद्ध अंतराल 100ms है - इसलिए MongoDB 30ms प्रतीक्षा करेगा और डेटा प्रतिबद्ध करेगा। इसका अनिवार्य रूप से मतलब है कि एक थ्रेड पर, आप केवल 33.3 राइट्स/सेकंड प्राप्त कर सकते हैं, और अनुशंसित सर्वोत्तम अभ्यास आपके राइट्स को बैच करना है। उदाहरण के लिए, यदि आपके पास 50 लेखन हैं, तो "j" का उपयोग करें:केवल अंतिम लेखन पर सही सेटिंग - यह स्वीकार करेगा कि पिछले सभी 50 लेखन किए गए हैं।
सारांश
हर प्रोडक्शन MongoDB इंस्टेंस को जर्नलिंग सक्षम के साथ चलना चाहिए। यदि आपके पास जर्नलिंग सक्षम नहीं है और आपका सर्वर या MongoDB प्रक्रिया क्रैश हो जाती है, तो MongoDB डेटा अखंडता सुनिश्चित करने में सक्षम नहीं होगा। आपको डेटाबेस पर एक "मरम्मत" ऑपरेशन चलाने की आवश्यकता होगी, जो डेटा की मात्रा के आधार पर पूरा होने में कुछ घंटे लग सकता है। इसे केवल तभी बंद करें जब आप वास्तव में जानते हों कि आप क्या कर रहे हैं। स्केलग्रिड पर, हमारे सभी उदाहरण MongoDB सर्वोत्तम अभ्यास कॉन्फ़िगरेशन का पालन करते हैं और डिफ़ॉल्ट रूप से जर्नलिंग चालू होती है।