2011-02-10 15 views
32

क्या यह संभावनाओं की एक बड़ी श्रृंखला के साथ मोंगो डीबी में ऑपरेटर में $ $ का उपयोग करने के लिए धीमा/खराब रूप है?

posts.find({ 
    author : { 
     $in : ['friend1','friend2','friend3'....'friend40'] 
    } 
}) 

App इंजन, उदाहरण के लिए, यदि आप 30 से अधिक उपयोग करते हैं क्योंकि वे में सरणी में प्रति आइटम सीधे एक क्वेरी का अनुवाद है, और इसलिए बजाय आप fan out से निपटने के लिए उनकी विधि का उपयोग कर में मजबूर नहीं दूँगा। हालांकि यह शायद मोंगो में सबसे कुशल विधि है, इसके लिए कोड काफी जटिल है इसलिए मैं इस सामान्य विधि का उपयोग करना पसंद करूंगा।

क्या मोंगो इन आकारों को उचित आकार के डेटासेट के लिए कुशलतापूर्वक प्रश्नों में निष्पादित करेगा?

+0

क्या आपके पास अपने लेखक फ़ील्ड पर कुछ इंडेक्स है? – shingara

+0

हैलो @ डेरेक डामर, क्या आप इस मुद्दे से उबर सकते हैं? मैं इस मुद्दे से निपट रहा हूं। इस वास्तुकार ने आज मोंगोबीबी द्वारा एज संग्रह नाम दिया :) मैं भी विशाल सरणी के साथ पैरामीटर में $ का उपयोग करना चाहता हूं। लेकिन मुझे प्रदर्शन प्रभाव से सावधान रहना! http://image.slidesharecdn.com/socialitept2-140724104718-phpapp01/95/socialite-the-open-source-status-feed-part-2-managing-the-social-graph-18-638.jpg?cb= 1406222239 – efkan

उत्तर

18

यह छोटी सूचियों के साथ काफी कुशल हो सकता है (कहने में मुश्किल है कि कम से कम, लेकिन कम से कम दसियों/सैकड़ों में) $ के लिए। यह ऐप-इंजन की तरह काम नहीं करता है क्योंकि मोंगोडब में वास्तविक बीटी इंडेक्स हैं और यह बड़ी संख्या में कॉलम स्टोर नहीं है।

इसमें $ के साथ मिलान करने वाले दस्तावेज़ों को ढूंढने के लिए इंडेक्स में चारों ओर छोड़ दिया जाएगा, या यदि उपयोग करने के लिए कोई अनुक्रमणिका नहीं है तो पूरे संग्रह के माध्यम से चलना होगा।

+0

जिज्ञासा से, बी-पेड़ और कॉलम स्टोर्स के बीच क्या अंतर है जो GAE को प्रत्येक को एक अलग क्वेरी होने की आवश्यकता है? जीएई भी इंडेक्स के आसपास बस नहीं जा सका? –

+2

ठीक है, एपएएनके इंडेक्स में कॉलम स्टोर के शीर्ष पर लागू किया गया है। इसका मतलब है कि आप सीमा प्रश्नों तक ही सीमित हैं और जितनी आसानी से आप एक बिट्री संरचना के साथ स्मृति में चारों ओर छोड़ सकते हैं। कैसंड्रा इंडेक्स डेटा को बनाए रखने के लिए कॉलम स्टोर का उपयोग कर जीएई के समान काम करता है। –

9

यदि आप सूची तत्व पर एक अनुक्रमणिका (sureIndex) बनाते हैं, तो यह बहुत तेज़ होना चाहिए।

क्या आपने व्याख्या() का उपयोग करने का प्रयास किया है? यह आपके प्रश्नों को प्रोफाइल करने का एक अच्छा, अंतर्निहित तरीका है: http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Use%7B%7Bexplain%7D%7D

3

मान लिया जाये कि आप author मैदान पर सूचकांक बनाया है देखने के एल्गोरिथम बिंदु से,, $in आपरेशन के समय जटिलता है: $(N*log(M)), जहां N इनपुट सरणी की लंबाई है और M संग्रह का आकार है।

$in आपरेशन के समय जटिलता परिवर्तन नहीं होगा जब तक आप एक डेटाबेस को बदलने (हालांकि मुझे नहीं लगता कि किसी भी db O(N*log(M)) तोड़ सकते हैं)।

हालांकि, इंजीनियरिंग बिंदु से, N बड़ी संख्या में जाता है, तो बेहतर है कि आपके व्यवसाय तर्क सर्वर को $in ऑपरेशन को अनुकरण करने के लिए बेहतर है, या तो बैच या एक-एक करके।

यह केवल इसलिए है क्योंकि: डेटाबेस सर्वर में स्मृति व्यापार तर्क सर्वर में स्मृति से अधिक मूल्यवान है।

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