2012-02-16 18 views
8

के साथ मोंगोडीबी प्रदर्शन मान लें कि हम एक नई प्रणाली तैयार कर रहे हैं और मोंगोडीबी को प्राथमिक डेटाबेस के रूप में उपयोग करने का निर्णय लिया है। डेटा स्कीमा [बढ़ती] टिप्पणियों वाले ब्लॉग के समान ही है।बढ़ती डेटा संरचना

"मोंगोडीबी डेवलपर्स" पुस्तक में, टिप # 6: अनबाउंड विकास वाले फ़ील्ड को एम्बेड न करें, यह कहता है कि यह एक सरणी के अंत में डेटा को लगातार जोड़ना अक्षम है (लेकिन यह भी संकेत देता है कि टिप्पणियां एक " wierd एज केस ")।

मान लें कि हमारी नई प्रणाली ब्लॉग में उन "टिप्पणियों" की तरह है - गतिशील रूप से हर समय बढ़ती जा रही है, लेकिन कभी-कभी बदलती या कुछ हटा दी जाती है।

तो, यह मानते हुए कि मोंगोडीबी का उपयोग करके प्रदर्शन समस्या हो सकती है, अन्य वैकल्पिक डेटाबेस (क्षैतिज रूप से स्केलेबल डेटाबेस होना चाहिए) इस उद्देश्य को पूरा कर सकता है? । (हम अपने प्राथमिक डेटाबेस के रूप में MongoDB का उपयोग कर कोई आपत्ति नहीं है, लेकिन अलग एक वैकल्पिक डेटाबेस के लिए "टिप्पणी" विकल्प उपलब्ध क्या हैं

नोट्स:?

अपने डेटा प्रकार के रूप में Hashes होने के Redis सुविधा हमारी "टिप्पणियां" डेटा संरचना का विवरण फिट करें - लगातार बढ़ रहा है लेकिन कभी-कभी संशोधित या हटाया जाता है - लेकिन हमें शुद्ध इन-मेमोरी डेटाबेस की आवश्यकता नहीं है (जब हम डिस्क पर डेटा को जारी रख सकते हैं तो हम इतनी रैम समर्पित नहीं करना चाहते हैं) - अन्यथा यह हमारी समस्या के लिए एक अच्छा फिट होगा

कॉच डीबी का उपयोग करने के बारे में क्या? हम इस उत्पाद के बारे में जांच नहीं कर रहे हैं। यह बढ़ती डेटा संरचना के साथ कैसे कार्य करता है?

उत्तर

5

थिलो ने जो कहा है उसे जोड़ने के लिए, "अनबाउंड विकास वाले फ़ील्ड को एम्बेड न करने" का कारण यह है कि इस प्रकार के दस्तावेज़ आकार विस्तार से मोंगोडीबी को दस्तावेज़ को स्थानांतरित करना पड़ सकता है यदि यह आवंटित वर्तमान स्थान से अधिक हो । आप दस्तावेज के Padding Factor अनुभाग में इसके बारे में अधिक पढ़ सकते हैं।

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

+0

मैं मूल सलाह से थोड़ा उलझन में था, ऐसा लगता है कि आप इसे दस्तावेज़ डीबी में करना चाहते हैं, अन्यथा आप एक टेबल दृष्टिकोण पर वापस आ गए हैं। क्या आपको पता है कि एक सरणी 0 से शुरू होने पर दस्तावेज़ को कितनी बार स्थानांतरित करने की आवश्यकता होगी, और 1000 तक बढ़ जाती है (एक वस्तु उदा। दिन में एक बार जोड़ा जा रहा है)? – UpTheCreek

+0

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

6

आप मोंगोडीबी के साथ रह सकते हैं, लेकिन सभी टिप्पणियों को मुख्य दस्तावेज़ में एम्बेड नहीं करते हैं, लेकिन केवल हालिया (संख्या से सीमित), और बाकी सभी को एक अलग संग्रह में रखें।

0

मोंगो है जैसे कि यह तुम लोगों के लिए ठीक काम करेगा, बस एक अलग संग्रह विज्ञापन किसी अन्य दस्तावेज़ की एक उप तत्व का विरोध करने में "टिप्पणी" रखने के लिए, अर्थात एक पेज (ब्लॉग उदाहरण जारी) लगता है।

मोंगो के प्रदर्शन के लिए, जब तक कि वे इंडेक्स रैम में फिट हो जाएं, आपको ठीक होना चाहिए।

0

आपकी मुख्य समस्या यह है कि आप संभवतः अद्यतन कर रहे हैं और अलग-अलग मेमोरी पृष्ठों में डेटा को हटा देते हैं जिसका अर्थ है कि आप अनुक्रमिक रूप से अपडेट नहीं कर पाएंगे। इस उदाहरण में, कई डेटाबेसों में एक ही समस्या होगी इसलिए मोंगोडीबी से स्विच करने से कुछ भी हल नहीं होगा।

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