2011-06-23 7 views
54

मोंगोडीबी तेज़ है, लेकिन केवल तभी जब आपका कामकाजी सेट या इंडेक्स रैम में फिट हो सकता है। तो अगर मेरे सर्वर में 16 जी रैम है, तो क्या इसका मतलब है कि मेरे सभी संग्रहों के आकार 16 जी से कम या बराबर होने की आवश्यकता है? कोई कैसे कहता है "ठीक है यह मेरा कामकाजी सेट है, बाकी को संग्रहीत किया जा सकता है?"MongoDB के लिए रैम में "काम करने वाला सेट" फिट करने का क्या अर्थ है?

+2

एफवाईआई, कार्य सेट के वर्तमान आकार का अनुमान लगाने के लिए, "db.runCommand ({serverStatus: 1, workingSet: 1})"। प्रति दस्तावेज़, "एक मोंगोडीबी डेटाबेस के लिए कामकाजी सेट आपके डेटा का वह हिस्सा है जो क्लाइंट अक्सर अधिकतर एक्सेस करता है" http://docs.mongodb.org/manual/faq/diagnostics/ – AnneTheAgile

उत्तर

62

"वर्किंग सेट" मूल रूप से डेटा और इंडेक्स की मात्रा है जो आपके सिस्टम द्वारा सक्रिय/उपयोग में होगा।

तो उदाहरण के लिए, मान लें कि आपके पास 1 वर्ष का डेटा है। सादगी के लिए, प्रत्येक महीने कुल 12 जीबी देने वाले 1 जीबी डेटा से संबंधित है, और प्रत्येक माह के लायक डेटा को कवर करने के लिए आपके पास सालाना 12 जीबी कुल 1 जीबी मूल्य सूचकांक है।

यदि आप हमेशा पिछले 12 महीने के डेटा तक पहुंच रहे हैं, तो आपका कामकाजी सेट है: 12 जीबी (डेटा) + 12 जीबी (इंडेक्स) = 24 जीबी।

हालांकि, यदि आप वास्तव में केवल पिछले 3 महीने के डेटा के डेटा तक पहुंचते हैं, तो आपका कामकाजी सेट है: 3 जीबी (डेटा) + 3 जीबी (इंडेक्स) = 6 जीबी। इस परिदृश्य में, यदि आपके पास 8 जीबी रैम था और फिर आपने पिछले 6 महीने के डेटा के नियमित रूप से उपयोग करना शुरू किया, तो आपका कामकाजी सेट आपके उपलब्ध रैम से अधिक हो जाएगा और इसका प्रदर्शन प्रभाव होगा।

लेकिन आम तौर पर, यदि आपके पास डेटा/इंडेक्स की मात्रा को कवर करने के लिए पर्याप्त रैम है जिसे आप अक्सर एक्सेस करने की उम्मीद करते हैं तो आप ठीक होंगे।

संपादित करें: रिस्पांस टिप्पणी
में सवाल करने के लिए मुझे यकीन है कि मैं काफी का पालन नहीं हूँ, लेकिन मैं जवाब देने पर एक जाना होगा। सबसे पहले, काम करने के सेट की गणना एक "बॉल पार्क आकृति" है। दूसरा, यदि आपके पास user_id पर एक (उदाहरण) 1 जीबी इंडेक्स है, तो उस इंडेक्स का केवल उस हिस्से का हिस्सा जिसे आम तौर पर एक्सेस किया जाता है, रैम में होना चाहिए (उदाहरण के लिए मान लें कि 50% उपयोगकर्ता निष्क्रिय हैं, फिर सूचकांक का 0.5 जीबी अधिक बार होगा राम में आवश्यक/आवश्यक)। आम तौर पर, आपके पास जितनी अधिक रैम होती है, विशेष रूप से बढ़ते उपयोग के कारण समय के साथ काम करने की संभावना बढ़ने की संभावना है। यह वह जगह है जहां शेडिंग आती है - डेटा को कई नोड्स पर विभाजित करें और आप प्रभावी ढंग से स्केल कर सकते हैं। आपके कामकाजी सेट को कई मशीनों पर विभाजित किया जाता है, जिसका अर्थ है कि राम में अधिक रखा जा सकता है। अधिक रैम की आवश्यकता है? चालू करने के लिए एक और मशीन जोड़ें।

+0

उदाहरणों का उपयोग करने के लिए धन्यवाद ;-) ... क्या होगा यदि साइट सोशल नेटवर्किंग साइट कहने के लिए कुछ है। (आइए इस बारे में बहस न करें कि नौकरी के लिए नोएसक्यूएल सही उपकरण है या नहीं ...)। आपके पास लाखों उपयोगकर्ता हैं, मुझे लगता है कि यह एक बड़ी मेज होगी। आप कार्य सेट को कैसे परिभाषित करेंगे? मुझे लगता है कि मेरा सवाल है, आप एक कामकाजी सेट को कैसे परिभाषित करते हैं?अगर मैं "user_id" को अनुक्रमित करता हूं, तो जाहिर है कि मेरे सभी उपयोगकर्ताओं के लिए उपयोगकर्ता संग्रह शामिल है। मैं निर्दिष्ट नहीं कर सकता, केवल उपयोगकर्ताओं को 3 महीने पहले खींच सकता हूं, क्या मैं कर सकता हूं? – luckytaxi

+0

@luckytaxi - मैंने (उम्मीद है) ऊपर दिए गए मेरे अपडेट में थोड़ा और जवाब दिया है! – AdaTheDev

+0

दोह, शेरिंग के बारे में भूल गया। मुझे लगता है कि मेरा प्रश्न और अधिक था "आप निम्नलिखित डेटा को अपने 'कामकाजी सेट के रूप में रखने के लिए मोंगो को कैसे बताते हैं?'" यदि 50% उपयोगकर्ता निष्क्रिय हैं, तो आप इसे रैम में कैसे लोड नहीं करते? – luckytaxi

5

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

हां, आपके पास बहुत सारे डेटा हो सकते हैं, जहां इनमें से अधिकांश "संग्रहीत" है और शायद ही कभी हमारे आवेदन के प्रदर्शन को प्रभावित किए बिना उपयोग किया जाता है या अपने कामकाजी सेट को प्रभावित करना (जिसमें संग्रहीत डेटा शामिल नहीं है)।

0

मुझे समझ में आया कि सूचकांक बी-ट्री है। यदि डेटा आकार से बाहर जा रहा है जो राम में फिट हो सकता है, तो यह इतना क्यों मायने रखता है? बी-ट्री काफी तेज़ है और डिस्क को बहुत बड़ी सीमा तक कम कर देता है। चिंता क्यों?

+0

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

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