2012-03-25 42 views
31

क्या कोई कह सकता है कि मोंगोडब में संग्रह की संख्या के लिए कोई व्यावहारिक सीमा है? वे यहाँ http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections लिखें:डेटाबेस में संग्रहों की संख्या की सीमा

आम तौर पर, संग्रह की एक बड़ी संख्या होने के कोई महत्वपूर्ण प्रदर्शन दंड है, और बहुत अच्छा प्रदर्शन में परिणाम है।

लेकिन डेटाबेस में नामस्थान की संख्या के लिए किसी कारण MongoDB निर्धारित सीमा 24000 के लिए, ऐसा लगता है कि यह वृद्धि हो सकता है, लेकिन मुझे आश्चर्य है कि क्यों यह अगर डेटाबेस नहीं करता है में कई संग्रह होने डिफ़ॉल्ट कॉन्फ़िगरेशन में कुछ सीमा होती है कोई प्रदर्शन जुर्माना नहीं है?

क्या इसका मतलब यह है कि यह एक डेटाबेस में व्यावहारिक रूप से असीमित संख्या में संग्रह करने का एक व्यवहार्य समाधान है, उदाहरण के लिए, बहुआयामी अनुप्रयोग के लिए डेटाबेस में एक खाते का डेटा एकत्र करने के लिए, उदाहरण के लिए, सैकड़ों हजार संग्रह डेटाबेस में? यदि यह ईवे किरायेदार के लिए डेटाबेस के लिए बहुत बड़ी संख्या में संग्रह करने का व्यवहार्य समाधान है, तो इसके लिए क्या लाभ है उदाहरण के लिए प्रत्येक किरायेदार के एक संग्रह में दस्तावेज बनाते हैं? आपके उत्तर के लिए बहुत बहुत धन्यवाद।

+0

जवाब जानकारीपूर्ण हैं, लेकिन क्योंकि यह भविष्य है मुझे लगता है कि [प्रलेखन] जोड़ देंगे (https://docs.mongodb.com/manual/reference/limits/#namespaces) अब का कहना है कि वायर्ड टाइगर - जो 3.2 के रूप में डिफ़ॉल्ट है - इस सीमा के अधीन नहीं है। – WAF

उत्तर

28

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

लेकिन डेटाबेस में नामस्थान की संख्या के लिए किसी कारण MongoDB निर्धारित सीमा 24000 के लिए,

केवल डिफ़ॉल्ट सेटिंग है कि। हां, एक डिफ़ॉल्ट सेटिंग है।

यह सीमा पृष्ठ पर कहता है कि 24000 सीमा (http://docs.mongodb.org/manual/reference/limits/#Number%20of%20Namespaces) है, हालांकि इसका विस्तार करने का कोई तरीका नहीं है।

हालांकि नामस्थान फ़ाइल कितनी बड़ी हो सकती है (http://docs.mongodb.org/manual/reference/limits/#Size%20of%20Namespace%20File) जो अधिकतम 2 जीबी है, इसकी अधिकतम सीमा है। इससे आपको ज्यादातर मामलों में खेलने के लिए लगभग 3 मिलियन नामस्थान मिलते हैं जो काफी प्रभावशाली है और मुझे यकीन नहीं है कि बहुत से लोग उस सीमा को जल्दी से मार देंगे।

आप nssize पैरामीटर का उपयोग कर या तो विन्यास (http://docs.mongodb.org/manual/reference/configuration-options/#nssize) के भीतर या MongoDB (http://docs.mongodb.org/manual/reference/mongod/#cmdoption-mongod--nssize) को चलाने के लिए प्रयोग किया जाता है आदेश में चालाकी करके कार्यावधि में से 16MB की तुलना में अधिक जाना डिफ़ॉल्ट मान संशोधित कर सकते हैं।

मोंगोडीबी अपने एनएसएसआईज़ के लिए डिफ़ॉल्ट रूप से 16 एमबी लागू करता है, इसके बारे में कोई वास्तविक कारण नहीं है, मैंने कभी भी "हर विवरण के साथ उपयोगकर्ता को परेशान नहीं करने" के आदर्श वाक्य के बारे में कभी नहीं सुना है, इसलिए मैं इसे नहीं खरीदता एक।

मैं मेरी राय में लगता है,, मुख्य कारण MongoDB इस छुपाता है, क्योंकि भले ही है प्रलेखन राज्यों के रूप में:

अलग संग्रह उच्च throughput बैच प्रोसेसिंग के लिए बहुत महत्वपूर्ण हैं।

, एक क्लस्टर के माध्यम से खड़ी बजाय क्षैतिज से पैमाने पर करने के रूप में MongoDB के लिए, माना जाता है डिज़ाइन किया गया है (अक्सर) बड़े पैमाने पर वेबसाइटों के लिए खराब व्यवहार का एक साधन के रूप एकाधिक संग्रहों का उपयोग करना; क्योंकि इस तरह के 12 के संग्रह सामान्य रूप से कुछ ऐसा माना जाता है जो लोग कभी नहीं करेंगे, और कभी नहीं पता होना चाहिए।

+0

चालू हो सकता है शायद कोई भी बता सकता है कि वे क्यों नीचे गए यह जवाब? – Sammaye

+0

क्या प्रत्येक संग्रह से रिकॉर्ड्स प्राप्त करना संभव है जैसे कि मेरे पास user.primary और user.secondary है जो संग्रह में मैं उपयोगकर्ता को एक ही समय में दोनों संग्रहों से नाम से चुन सकता हूं? – jackyesind

+0

@jackyesind No, MongoDB आदेश केवल एकवचन संग्रह हैं, यहां तक ​​कि सर्वर-साइड जॉइन नहीं हैं – Sammaye

3

व्यावहारिक रूप से, मैंने कभी अधिकतम नहीं चलाया है। लेकिन मैं निश्चित रूप से 24,000 संग्रह सीमा से परे कभी नहीं चला गया है। मुझे यकीन है कि मैंने 200 से अधिक बार कभी नहीं मारा है, जब मैं इस बात का परीक्षण कर रहा था। मुझे स्वीकार करना है, मुझे लगता है कि यह अपने स्वयं के संग्रह में डेटा की तरह समूह करने के बजाय, एक डेटाबेस में कई संग्रहों के लिए अराजकता की तरह लगता है।

अपने डेटा और व्यवसाय नियमों के आकार पर विचार करें। यदि आपके डेटा को निर्धारित करने की आवश्यकता है कि आपके पास बहु-किरायेदार ऐप के लिए अलग-अलग लॉजिकल ग्रुपिंग में डेटा अलग होना चाहिए, तो आपको शायद अन्य डेटा स्टोर पर विचार करना चाहिए। चूंकि मोंगो महान है, तथ्य यह है कि उन्होंने संग्रह की मात्रा पर एक सीमा डाली है, मुझे बताता है कि उन्हें पता है कि कुछ सैद्धांतिक सीमा है जहां प्रदर्शन प्रभावित होता है।

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

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

+0

प्रत्येक किरायेदार में ऐसी संस्थाएं होनी चाहिए जिनमें सभी किरायेदारों के लिए दोनों सामान्य क्षेत्र हों और प्रत्येक किरायेदार के लिए अनुकूलित फ़ील्ड हो सकें। – Oleg

+0

क्या आप यहां बता सकते हैं कि आप यहां क्या मतलब रखते हैं: "मुझे यह मानना ​​है कि मुझे लगता है कि यह एक बहुत ही अराजकता की तरह लगता है कि एक ही डेटाबेस में कई संग्रह हैं, बल्कि डेटा को अपने संग्रह में समूहित करने के बजाय।" आपका क्या मतलब है "अपने स्वयं के संग्रह में डेटा की तरह समूह करना"? क्या आपको लगता है कि प्रत्येक किरायेदार के लिए एक संग्रह होने से कुछ समय से प्रदर्शन समस्याएं हो सकती हैं? यदि प्रत्येक डेटा में स्टोर करना है तो एन संग्रह और अन्य डेटाबेस में अन्य किरायेदारों को संग्रहित करना क्या होगा? – Oleg

+0

रीक बाल्टी के साथ की समस्याओं में से एक यह है कि इसमें 64 एम की तरह कुछ सीमित है जो rdbms में टेबल और मोंगोडब में संग्रह की तरह नहीं है जो किसी भी डेटा को स्टोर कर सकता है। – Oleg

13

एक छोटी सी पृष्ठभूमि:

हर बार मोंगो एक डेटाबेस बनाता है, यह एक नाम स्थान (db.ns) इसके लिए फ़ाइल बनाता है। नेमस्पेस (या संग्रह जिन्हें आप इसे कॉल करना चाहते हैं) फ़ाइल संग्रह के बारे में मेटाडेटा रखती है। डिफ़ॉल्ट रूप से नामस्थान फ़ाइल आकार में 16 एमबी है, हालांकि आप आकार को मैन्युअल रूप से बढ़ा सकते हैं। प्रत्येक संग्रह के लिए मेटाडेटा 648 बाइट्स + कुछ ओवरहेड बाइट्स है। इसे 16 एमबी तक विभाजित करें और आपको प्रति डेटाबेस लगभग 24000 नामस्थान मिलते हैं। आप एक बड़ी नेमस्पेस फ़ाइल निर्दिष्ट करके मोंगो शुरू कर सकते हैं और इससे आपको प्रति डेटाबेस अधिक संग्रह बनाने की सुविधा मिल जाएगी।

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

+2

सवाल यह है कि उनके पास यह सीमा क्यों है। क्या वे मानते हैं कि कुछ नामस्थानों से हमें प्रदर्शन समस्याएं हो सकती हैं? – Oleg

+0

मुझे यकीन नहीं है कि आप इसे एक सीमा के रूप में क्यों ले रहे हैं। यह विचार के साथ सिर्फ एक डिफ़ॉल्ट मूल्य है कि यह ज्यादातर लोगों के लिए उपयोग के मामले में फिट होगा। यदि आपके उपयोग के मामले में बड़ी संख्या में संग्रह की आवश्यकता है तो बड़ी नामस्थान फ़ाइल बनाने से आपको कुछ भी रोक नहीं रहा है। – Sid

+2

ऐसा लगता है कि यदि नामस्थानों की संख्या असीमित हो सकती है, तो इसके लिए कोई भी पैराम नहीं होगा, जिसमें असीमित संख्या में नाम की अनुमति हो। यहां तक ​​कि अगर मैं सीमा बढ़ाता हूं तो सीमा तक पहुंचने की समस्या अभी भी किसी बिंदु पर मौजूद होगी, है ना? – Oleg

1

संग्रह बनाए रखने के लिए एक बड़े पैमाने पर ओवरहेड लगता है। मैंने अभी तक एक डेटाबेस को कम कर दिया है जिसमें 11000 संग्रहों में लगभग 1.5 एमओ दस्तावेज थे, जिसमें लगभग 300 संग्रहों में दस्तावेज़ों की संख्या समान थी; इसने डेटाबेस के आकार को 8 जीबी से 1 जीबी तक घटा दिया है। मैं मोंगोडीबी के आंतरिक कार्यों से परिचित नहीं हूं इसलिए यह स्पष्ट हो सकता है लेकिन मैंने सोचा कि इस संदर्भ में ध्यान देने योग्य हो सकता है।

4

जैसा कि अन्य लोग उल्लेख करते हैं, डिफ़ॉल्ट नामस्थान आकार 16 एमबी है और आप लगभग 24000 नेमस्पेस प्रविष्टियां प्राप्त कर सकते हैं। वास्तव में उबंटू में मेरा 64 बिट उदाहरण डिफ़ॉल्ट 16 एमबी नेमस्पेस फ़ाइल का उपयोग कर 23684 पर शीर्ष पर था।

एफएक्यू में उल्लिखित एक महत्वपूर्ण बात यह है कि इंडेक्स नामस्थान स्लॉट का भी उपयोग करते हैं।

आप के साथ नाम स्थान प्रविष्टियों भरोसा कर सकते हैं:

db.system.namespaces.count() 

और यह भी वास्तव में क्या में है पर एक नज़र लेने के लिए दिलचस्प है:

db.system.namespaces.find() 

आप क्या सोचते हैं आप की जरूरत की तुलना में अपनी सीमा अधिक सेट क्योंकि डेटाबेस बनने के बाद, नामस्थान फ़ाइल को विस्तारित नहीं किया जा सकता है (जहां तक ​​मैं समझता हूं - यदि कोई रास्ता है, तो कृपया मुझे बताएं !!!)।

+0

http://docs.mongodb.org/manual/reference/limits/#Number%20of%20 नामस्थान डिफ़ॉल्ट नामस्थान फ़ाइलों द्वारा 16 मेगाबाइट्स हैं। आप nssize विकल्प का उपयोग कर आकार को कॉन्फ़िगर कर सकते हैं। –

+2

आप अपना डेटाबेस बनाने से पहले नामस्थान * के आकार को केवल कॉन्फ़िगर कर सकते हैं। इसे बदलने के लिए, आपको मोंगोडम्प करने, डेटाबेस को नष्ट करने, मोंगोड को पुन: कॉन्फ़िगर करने, पुनरारंभ करने और मोंगोलोड करने की आवश्यकता है। वैकल्पिक रूप से अतिरिक्त प्रतिकृतियों को एक बड़े nssize विकल्प के साथ जोड़ा जा सकता है, और फिर आप पुराने nssize के साथ पुराने को बाहर कर सकते हैं। –

10

कोई और सीमा नहीं!

जैसा कि अन्य उत्तरों ने कहा है - यह नामस्थान फ़ाइल के आकार द्वारा निर्धारित किया जाता है। यह पहले एक मुद्दा था, क्योंकि इसकी 16 एमबी की डिफ़ॉल्ट सीमा थी और अधिकतम 2 जीबी थी। हालांकि मोंगोडीबी 3.0 और वायर्ड टाइगर स्टोरेज इंजन की रिहाई के साथ, ऐसा लगता है कि यह सीमा हटा दी गई है। वायर्ड टाइगर लगभग हर तरह से बेहतर प्रतीत होता है, इसलिए मुझे विरासत समर्थन कारणों को छोड़कर, पुराने इंजन का उपयोग करने के लिए किसी को भी कम कारण नहीं दिखता है। साइट से:

MMAPv1 भंडारण इंजन के लिए, नाम स्थान फ़ाइलें नहीं 2047 मेगाबाइट से भी बड़ा हो सकता है।

डिफ़ॉल्ट नामस्थान फ़ाइलों द्वारा 16 मेगाबाइट्स हैं। आप nsSize विकल्प का उपयोग कर आकार को कॉन्फ़िगर कर सकते हैं।

वायर्ड टाइगर स्टोरेज इंजन इस सीमा के अधीन नहीं है।

http://docs.mongodb.org/manual/reference/limits/

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