2012-04-16 6 views
6

करता है यहाँ मेरे विचार है, और मुझे यकीन है कि अगर यह सही है या गलत है नहीं कर रहा हूँ:कैसे MongoDB जर्नलिंग काम

जर्नलिंग लॉग "फिर से करें" लॉग ऑन है। यह डेटा फ़ाइलों के संशोधन को रिकॉर्ड करता है।

उदाहरण के लिए, मैं 'ए' से 'बी' तक एक रिकॉर्ड के फील्ड वैल्यू को बदलना चाहता हूं, तो mongodb dbfile को संशोधित करने के लिए कैसे मिलेगा (सभी नेमस्पेस, डेटा, इंडेक्स और अन्य को शामिल करें) तो mongodb पत्रिका में संशोधन लिखो।

उसके बाद, mongodb dbfile में सभी वास्तविक संशोधन करता है। अगर यहां कुछ गलत हो जाता है, जब mongoDB पुनरारंभ होता है तो यह जर्नल (यदि यह मौजूद है) पढ़ेगा। इसके बाद डेटा सेट को सुसंगत बनाने के लिए डीबीफ़ाइल को बदल दिया जाएगा।

तो, पत्रिका में, डेटा बदलने के लिए रिकॉर्ड नहीं किया गया है, बल्कि इसके बजाय dbfile को कैसे बदला जाए।

क्या मैं सही हूँ? जर्नल के प्रारूप के बारे में मुझे और जानकारी कहां मिल सकती है?

+0

आप स्रोत कोड पढ़ सकते हैं। यह सबसे विश्वसनीय सूचना स्रोत है। आपके सुझाव के लिए –

+0

thx, वास्तव में मैं अब पढ़ रहा हूं। लेकिन यह बहुत ही समय लगेगा, मुझे अभी जवाब चाहिए। – iammutex

+0

यह क्यों महत्वपूर्ण है? –

उत्तर

6

संपादित करें: ड्वाइट द्वारा मोंगोएसएफ में 2011 की प्रस्तुति के लिए मेरा मूल लिंक अब मर चुका है, लेकिन इसी तरह की सामग्री के साथ बेन बेकर द्वारा 2012 presentation है।

बस अगर किसी बिंदु पर काम करना बंद कर देता है, तो मैं एक त्वरित सारांश दूंगा कि मूल एमएमएपी स्टोरेज इंजन में जर्नल कैसे काम करता है, लेकिन यह ध्यान दिया जाना चाहिए कि pluggable storage engine मॉडल (मोंगोडीबी 3.0 और बाद में), यह अब पूरी तरह से स्टोरेज इंजन (और संभावित रूप से विकल्प) पर निर्भर करता है जिसका उपयोग आप कर रहे हैं - तो कृपया जांचें।

मूल (एमएमएपी) स्टोरेज इंजन जर्नल पर वापस जाएं। एक बहुत ही प्राथमिक स्तर पर, जर्नल में कतारबद्ध परिचालनों की एक श्रृंखला होती है और सभी परिचालनों में लिखा जाता है जैसे वे होते हैं - मूल रूप से डिस्क पर केवल अनुक्रमिक लेखन संलग्न करते हैं।

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

आंतरिक रूप से, पत्रिका में संचालन "प्रतिबद्ध समूह" में संग्रहित होते हैं - लेखन कार्यों का एक तार्किक समूह। एक बार ऑपरेशन पूर्ण प्रतिबद्ध समूह में होता है, इसे जर्नल के हिस्से के रूप में डिस्क में सिंक किया जा सकता है (और j:true उदाहरण के लिए चिंता लिखना होगा)। एक अशुद्ध शटडाउन के बाद, mongod उन सभी पूर्ण प्रतिबद्ध समूहों को लागू करने का प्रयास करेगा जिन्हें पहले डिस्क पर फ़्लश नहीं किया गया था, अपूर्ण प्रतिबद्ध समूहों को त्याग दिया जाएगा।

जर्नल में ऑपरेशंस oplog में आप जो नहीं देख पाएंगे, बल्कि वे फ़ाइलों का एक आसान सेट, ऑफसेट (डिस्क स्थान अनिवार्य रूप से), और स्थान पर डेटा लिखा जाना चाहिए। यह डेटा के कुशल रीप्ले और जर्नल के लिए एक कॉम्पैक्ट प्रारूप के लिए अनुमति देता है, लेकिन सामग्री को सबसे अधिक गड़बड़ की तरह दिखता है (उपर्युक्त ओप्लोग के विपरीत जो जेएसओएन दस्तावेजों के रूप में मूल रूप से पठनीय है)। यह मूल रूप से प्रश्नों में से एक का जवाब देता है - इसमें डेटाबेस फ़ाइल की सामग्री और इसके लिए किए जाने वाले परिवर्तनों के बारे में कोई जागरूकता नहीं है, यह और भी सरल है - यह मूल रूप से केवल डिस्क स्थान एक्स पर जाना जानता है और डेटा वाई लिखता है, बस।

पत्रिका की लिखने वाली, अनुक्रमिक प्रकृति का अर्थ है कि यह कताई डिस्क पर अच्छी तरह से फिट बैठता है और अनुक्रमिक पहुंच पैटर्न आम तौर पर एमएमएपी डेटा एक्सेस पैटर्न (हालांकि अन्य इंजनों के एक्सेस पैटर्न के साथ बाधाओं में नहीं होगा) । इसलिए आईओ विवाद को कम करने के लिए जर्नल को अपनी डिस्क या विभाजन पर रखना कभी-कभी अच्छा विचार होता है।

+0

टूटी हुई लिंक। कृपया – blueskin

+1

@blueskin को ठीक करें - पूछें और आपको प्राप्त होगा –