2011-03-01 7 views
17

आरडीबीएमएस पृष्ठभूमि से आ रहा है, मैं हमेशा इंप्रेशन के तहत था "जितना कठिन हो उतना प्रयास करें जितना आप एक प्रश्न का उपयोग कर सकते हैं, यह मानते हुए कि यह कुशल है," जिसका अर्थ है कि यह डेटाबेस के हर अनुरोध के लिए महंगा है। जब मोंगोडीबी की बात आती है, ऐसा लगता है कि ऐसा संभव नहीं है क्योंकि आप टेबल में शामिल नहीं हो सकते हैं।क्या अनुरोध के लिए मोंगोडीबी कई बार पूछताछ करना ठीक है?

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

कुछ हैंग अप हैं जिन्हें मैंने सामान्य रूप से मोंगोडीबी या नोएसक्यूएल की दक्षता को समझने की कोशिश की है। अगर मैं कुछ उपयोगकर्ताओं से संबंधित सभी "पोस्ट" प्राप्त करना चाहता था (जैसे कि उन्हें समूहीकृत किया गया था) ... MySQL का उपयोग करके मैं शायद कुछ जोड़ता हूं और इसे प्राप्त करता हूं।

मोंगोडीबी में, मुझे लगता है कि मुझे संग्रह अलग करने की ज़रूरत है, क्या यह एक बड़े $ में उपयोग करने में सक्षम होगा: ['user1', 'user2', 'user3', 'user4', ...]?

क्या यह विधि थोड़ी देर बाद धीमी हो जाती है? अगर मैं 1000 उपयोगकर्ताओं को शामिल करता हूं? और अगर मैं उन पहला, दूसरा, जेड से संबंधित पदों की है कि सूची प्राप्त करने, यह करने के लिए MongoDB का उपयोग कर कुशल और/या तेजी से किया जाएगा की जरूरत:

  • जाओ उन सरणी
  • जाओ पोस्ट उन सरणी में

2 अनुरोध एक अनुरोध के लिए। नोएसक्यूएल में यह बुरा अभ्यास है?

उत्तर

33

क्यू का उत्तर देने के बारे में $ में ....

मैं इस परिदृश्य के साथ कुछ प्रदर्शन परीक्षणों किया:

~ 24 मिलियन एक संग्रह में डॉक्स
लुक उन दस्तावेजों की 1 लाख के आधार पर एक प्रमुख (अनुक्रमित)
नेट

से CSharp ड्राइवर का उपयोग करते हुए परिणाम:
एक समय में पता कर रहा है 1, एकल थ्रेड: 109s 0,123, एक समय में पता कर रहा है 1, बहु लड़ी: 48s
क्वैरी 100K एक समय में में $ का उपयोग कर, एकल पिरोया = 20
क्वैरी 100K एक समय में में $ का उपयोग कर, बहु = 9 नंबर के पत्तों

तो काफ़ी बेहतर पिरोया एक बड़े $ (अधिकतम क्वेरी आकार तक सीमित) का उपयोग कर प्रदर्शन।

अद्यतन:

एक समय में पता कर रहा है 10 (100000 बैचों) = 8.8s
पता कर रहा है 100:
कैसे $ अलग हिस्सा आकारों के साथ प्रदर्शन में (प्रश्नों मल्टी-थ्रेडेड) के बारे में नीचे टिप्पणी से इसे जारी रखते हुए एक समय (10000 बैचों) = 4.32s
एक समय (1000 बैच) 1000 का पता कर रहा पर 4.31s
एक समय में 10000 का पता कर रहा (100 बैचों) = 8.4s
एक समय (10 बैचों) = पर 100000 पता कर रहा है = 9 एस (उपरोक्त मूल परिणाम)

तो क्लॉज बनाम $ $ में बैच करने के लिए कितने मूल्यों के लिए एक मीठा स्थान दिखता है।राउंड ट्रिप्स की संख्या

+1

यहां मुख्य प्रदर्शन अंतर प्रत्येक क्वेरी का ओवरहेड है; $ में अधिक कुशल होगा क्योंकि यह एन + एम के बजाय परिणामों के लिए सर्वर के लिए एक राउंड-ट्रिप करता है। –

+2

@AdaTheDev: यदि आपके लिए यह करना आसान है, तो मुझे लगता है कि यह देखने में काफी दिलचस्प होगा कि "$ 1 का उपयोग करते समय एक्स" के लिए प्रयोग को दोहराने के अर्थ में स्केल में $ कितना दिलचस्प होगा, एकल और बहु ​​थ्रेडेड, जहां एक्स 10 है, फिर 20, फिर 30, ... फिर 100. –

+3

@ लुकास ज़ंबौलिस - ऊपर मेरा अपडेट देखें। मैं ब्लॉग पोस्ट के रूप में इस पर और अधिक कर सकता हूं, अधिक जानकारी के साथ – AdaTheDev

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