2013-07-08 12 views
24

यह एक मूल प्रश्न है, लेकिन बहुत महत्वपूर्ण है, और मुझे वास्तव में बिंदु प्राप्त करने के लिए निश्चित नहीं है।मोंगोडीबी कैश सिस्टम को समझें

आधिकारिक दस्तावेज पर हम पढ़ सकते हैं

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

हिस्सा मैं समझने के लिए यकीन नहीं है

है आप अपने प्रश्नों के लिए अनुक्रमित बनाया है और अपने काम कर डेटा सेट रैम में फिट बैठता है, तो

क्या मतलब है "अनुक्रमणिका" यहाँ है ?

उदाहरण के लिए, यदि मैं एक मॉडल अद्यतन करता हूं, तो मैं इसे पूछता हूं, क्योंकि मैंने इसे अपडेट किया है, क्योंकि अब यह रैम में है, इसलिए यह स्मृति से आएगा, लेकिन यह मेरे दिमाग में बहुत स्पष्ट नहीं है।

हम कैसे सुनिश्चित कर सकते हैं कि हमारे द्वारा पूछे जाने वाले डेटा स्मृति से आएंगे या नहीं? मैं समझता हूं कि मोंगोडीबी इस समय मुक्त स्मृति के बारे में डेटा को कैश करने के लिए मुफ्त मेमोरी का उपयोग करता है, लेकिन क्या कोई वैश्विक व्यवहार को और समझा सकता है?

किस मामले में हमारे नोड सर्वर में एक चर का उपयोग करना बेहतर हो सकता है जो मोंगोडीबी कैश सिस्टम पर विश्वास करने से डेटा स्टोर करता है?

विशाल ट्रैफिक के लिए आप MongoDB का उपयोग करने की वैश्विक सलाह कैसे देते हैं?

उत्तर

21

लिए एक अच्छा स्थान बिल्कुल क्या एक सूचकांक है समझने के लिए शुरू करने के लिए प्रशन।

हम कैसे सुनिश्चित कर सकते हैं कि हमारे द्वारा पूछे जाने वाले डेटा स्मृति से आएंगे या नहीं?

किसी भी प्रश्न explain() पर yields फ़ील्ड को देखने का एक तरीका है।यह आपको बताएगा कि पाठक ने कितनी बार अपना लॉक अर्जित किया क्योंकि डेटा रैम में नहीं था।

mongostat और ऐसे अन्य कार्यक्रमों जैसे कार्यक्रमों को देखने का एक और अधिक तरीका है। ये प्रोग्राम आपको बताएंगे कि कौन से पेज दोष (जब डेटा को डिस्क से रैम में पग किया जाना चाहिए) आपके mongod पर हो रहा है।

मैं समझता हूं कि मोंगोडीबी इस समय मुक्त स्मृति के बारे में डेटा कैश करने के लिए मुफ्त मेमोरी का उपयोग करता है, लेकिन क्या कोई वैश्विक व्यवहार को और समझा सकता है?

यह वास्तव में गलत है। यह कहना आसान है कि मोंगोडीबी ऐसा करता है लेकिन असल में यह नहीं करता है। यह वास्तव में ओएस और इसके स्वयं के पेजिंग एल्गोरिदम है, आमतौर पर LRU, जो यह मोंगोडीबी के लिए करता है। मोंगोडीबी एक निश्चित अवधि के लिए कैश इंडेक्स योजना करता है, हालांकि इसे लगातार इंडेक्स के लिए जांच और परीक्षण करना नहीं पड़ता है।

किस मामले में हमारे नोड सर्वर में एक चर का उपयोग करना बेहतर हो सकता है जो मोंगोडीबी कैश सिस्टम पर विश्वास करने से डेटा स्टोर करता है?

सुनिश्चित नहीं हैं कि आपको लगता है कि काम करने की उम्मीद ... मेरा मतलब है दो बिल्कुल अलग बातें करते हैं और यदि आपको लगता है कि वर में स्टार्टअप पर अपने आवेदन में MongoDB से अपने डेटा को पढ़ने के लिए करना चाहते हैं तो मैं निश्चित रूप से यह सिफारिश नहीं होगा ।

स्मृति प्रबंधन के लिए ओएस एल्गोरिदम के अलावा अत्यधिक परिपक्व और तेज़ हैं, तो यह ठीक है।

विशाल ट्रैफिक के लिए आप MongoDB का उपयोग करने की वैश्विक सलाह कैसे देते हैं?

हम्म, यह इतना बड़ा सवाल है। असल में मैं आपको इस विषय में Google को थोड़ा सा अनुशंसा करता हूं लेकिन दस्तावेज़ीकरण के अनुसार आपको यह सुनिश्चित करने की ज़रूरत है कि आपका कामकाजी सेट एक के लिए रैम में फ़िट हो।

यहाँ एक अच्छा प्रारंभिक बिंदु है: What does it mean to fit "working set" into RAM for MongoDB?

5

MongoDB पूरे संग्रह को स्मृति में रखने का प्रयास करता है: यह स्मृति संग्रह-प्रत्येक संग्रह पृष्ठ को मानचित्र करता है। सब कुछ स्मृति में होने के लिए, डेटा पेज, और उनके संदर्भ वाले सूचकांक, स्मृति में रखा जाना चाहिए।

यदि मोंगोडीबी एक रिकॉर्ड देता है, तो आप आश्वस्त रह सकते हैं कि अब यह स्मृति में है (चाहे आपकी क्वेरी या नहीं)।

मोंगोडीबी रिकॉर्ड के "कैश" को उसी तरह से नहीं रखता है, जैसा कि एक वेब ब्राउज़र करता है। जब आप कोई परिवर्तन करते हैं, तो स्मृति और डिस्क दोनों अपडेट होते हैं।

मोंगो महान उचित उपयोग मामलों से मेल खाने पर है। यह बहुत उच्च प्रदर्शन है यदि आपके पास सबकुछ कैश करने के लिए पर्याप्त सर्वर मेमोरी है, और उस बिंदु से तेज़ी से गिरावट आती है। कई, कई उच्च-मात्रा वाली वेबसाइटें मोंगोडीबी का उपयोग करती हैं: यह अच्छी बात है कि स्मृति अब बहुत सस्ता है। http://docs.mongodb.org/manual/core/indexes/

के बाद आप उस पर धकेल दिया है आप क्यों वे बहुत अच्छे हैं udersand होगा, तथापि, अधिक जटिल के कुछ करने के लिए तत्पर लंघन:

+0

"यह स्मृति-नक्शे प्रत्येक संग्रह पेज" यह नक्शे virutal स्मृति को सामान राम नहीं, वे दो अलग ढंग से चीजों को कर रहे हैं और यह लोगों द्वारा इस तरह के एक आम गलती, MongoDB है इन-मेमोरी डेटाबेस नहीं! – Sammaye

+0

@Sammaye ठीक है, यह स्मृति पते के लिए मानचित्र है, भले ही वे आभासी या भौतिक हैं। जब किसी आउट-ऑफ-कोर पते का संदर्भ दिया जाता है, तो एक पृष्ठ गलती होती है, और वह डिस्क पृष्ठ तब भौतिक स्मृति में स्थानांतरित हो जाता है। मोंगोडीबी आपके सर्वर के पास बहुत सारी भौतिक मेमोरी को चूस लेगा (ओएस के लिए केवल थोड़ी सी और अन्य प्रक्रियाओं को आरक्षित कर रहा है)। MongoDB निष्पादक होने के लिए, उपलब्ध भौतिक स्मृति डेटाबेस आकार से अधिक होनी चाहिए। – Curt

+0

यह स्मृति को चूस लेगा क्योंकि ओएस इसे अनुमति देता है। हालांकि यह केवल कामकाजी सेट को रैम में लोड करेगा, यदि आपका कामकाजी सेट छोटा है तो मोंगोडीबी वास्तविकता में एक छोटी राशि का उपयोग करेगा, जो आपके डेटा आकार – Sammaye

संबंधित मुद्दे