2011-03-15 15 views
11

मैं किसी दस्तावेज़ में ऑब्जेक्ट आईडी की एक सूची को सरणी फ़ील्ड के रूप में संग्रहीत करने का प्रयास कर रहा हूं।मोंगो डीबी एक बड़े सरणी क्षेत्र को कैसे संभालता है?

मुझे लगता है कि मोंगो डीबी के पास एकल दस्तावेज़ों के लिए 4 एमबी आकार सीमा है। तो ऑब्जेक्टआईडी की लंबाई 12 बाइट्स पर विचार करने पर, एक दस्तावेज़ एक सरणी क्षेत्र में 300,000 से अधिक प्रविष्टियों को संभालने में सक्षम होना चाहिए। (अगर गणना बंद है तो मुझे बताएं)।

यदि सरणी में प्रविष्टियों की संख्या उस सीमा के करीब हो जाती है, तो मैं किस प्रकार का प्रदर्शन की उम्मीद कर सकता हूं? विशेष रूप से जब फ़ील्ड अनुक्रमित किया जाता है? कोई स्मृति समस्याएं?


विशिष्ट प्रश्नों नीचे दिखाई देगा: एकाधिक मानों के आधार

db.myCollection.find(
    { 
    myObjectIds: ObjectId('47cc67093475061e3d95369d') 
    } 
); 

क्वेरी एक एकल मान के अनुसार

क्वेरी

db.myCollection.find(
    { 
    myObjectIds: {$in: [ObjectId('47cc67093475061e3d95369d'), ...]} 
    } 
); 

से अधिक दस्तावेज़

db.myCollection.update(
    { 
    _id: {$in: [ObjectId('56cc67093475061e3d95369d'), ...]} 
    }, 
    { 
    $addToSet: {myObjectIds: ObjectId('69cc67093475061e3d95369d')} 
    } 
); 


+0

एफवाईआई: 1.8 में, अधिकतम दस्तावेज़ आकार 16 एमबी तक बढ़ा दिया गया है, और यह सीमा 10gen द्वारा लगाई गई नरम सीमा है। एसओ पर किसी ने इसे सर्वश्रेष्ठ रखा: (पैराफ्रेशिंग) सीमा को हमारे स्कीमा डिज़ाइन के बारे में थोड़ा कठिन सोचने के लिए मजबूर करने के लिए रखा गया था। –

+0

@ ब्रायन मिग्लोरिसी धन्यवाद, मैं उस पोस्ट में आया हूं और स्कीमा डिज़ाइन के बारे में समझदार होने के साथ सहमत हूं। – Jaepil

उत्तर

4

TBH करने के लिए एक नया मान जोड़ें, मुझे लगता है कि सबसे अच्छी बात आप कर सकते हैं यह बेंचमार्क है। कुछ डमी डेटा बनाएं, और प्रदर्शन की जांच करें क्योंकि आप सरणी में आइटम्स की संख्या बढ़ाते हैं। आपके पर्यावरण में एक परीक्षण को खटखटाया जा सकता है - यहां उत्तर देने के लिए

यह मेरी TODO सूची पर जांच और ब्लॉग करने के लिए एक बात है, लेकिन मुझे अभी तक यह नहीं मिला है। यदि आप करते हैं, तो मुझे निश्चित रूप से देखना होगा कि आपके निष्कर्ष क्या हैं! इसी तरह, अगर मैं जल्द ही इसके करीब आ जाता हूं तो मैं यहां भी परिणाम पोस्ट करूंगा।

+0

बेंचमार्क करने की योजना नहीं बना रहा था। लेकिन अगर मैं ऐसा करता हूं, तो मैं यहां अपनी खोज साझा करूंगा। धन्यवाद। – Jaepil

2

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

मुझे इसके बारे में डिजाइन करने के अलावा, इसे टालने का कोई आसान तरीका नहीं है। जहां तक ​​मुझे पता है कि सूची में सशर्त रूप से धक्का देने का कोई तरीका नहीं है। मैंने एसओ पर अन्य प्रश्न यहां देखे हैं जहां लोग निश्चित आकार सूची बनाने और इस तरह के निर्माण करने की कोशिश कर रहे हैं, लेकिन कोई अच्छा समाधान नहीं मिला है।

+0

धन्यवाद, मैंने वास्तव में यह नहीं सोचा था कि सीमा कब पहुंचने पर क्या होगा। स्पष्ट रूप से मुझे इसके लिए अधिक ध्यान देना होगा। – Jaepil

4

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

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