2012-12-17 23 views
50

क्या mongodb 2.2 में समेकन ढांचा प्रस्तुत किया गया है, क्या मानचित्र/कम करने पर कोई विशेष प्रदर्शन सुधार है?मोंगोड एग्रीगेशन फ्रेमवर्क मानचित्र से कम/कम है?

यदि हां, क्यों और कैसे और कितना?

(पहले से ही मैं खुद के लिए एक परीक्षण किया है, और प्रदर्शन लगभग एक ही था)

+1

"लगभग" वही? किस बेंचमार्क के साथ? आपकी टिप्पणी मूल रूप से व्यर्थ है। और आप बिल्ली और गायों की तुलना कर रहे हैं। इसके अलावा आप स्वयं को जानते हैं कि एमआर अभी भी एकल-थ्रेडिंग तक सीमित है .... इसलिए: व्यर्थ प्रश्न और इसलिए -1 –

+0

@ user1833746 यह एक प्रश्न है, मैं अपने मानक को समझाना नहीं चाहता हूं। मैंने इस प्रश्न के नए उत्तरों को जानने के लिए कहा। कृपया दूसरों को जवाब देने की अनुमति देने के लिए वोट-अप करें। –

+0

क्या आपने यह प्रश्न देखा है (और उत्तर)? http://stackoverflow.com/questions/12139149/mapreduce-with-mongodb-really-really-slow-30-hours-vs-20-minutes-in-mysql- –

उत्तर

61

मैं व्यक्तिगत रूप से (अपने स्वयं के डेटा का उपयोग कर सहित) समाप्त हो गया है हर परीक्षण समेकन ढांचे को एक गुणक दिखाता है ई मानचित्र से तेज़ी से कम हो जाता है, और आम तौर पर तीव्रता का क्रम होता है।

बस आपके द्वारा पोस्ट किए गए डेटा का 1/10 वां लेना (लेकिन ओएस कैश को साफ़ करने के बजाए, पहले कैश को गर्म करना - क्योंकि मैं एकत्रीकरण के प्रदर्शन को मापना चाहता हूं, और डेटा में पृष्ठ पर कितना समय लगता है) I

MapReduce: 1,058ms
एकत्रीकरण फ्रेमवर्क: यह मिल गया 133ms

एकत्रीकरण ढांचे और से $ मैच निकाला जा रहा है {क्वेरी:} MapReduce से (क्योंकि दोनों सिर्फ एक सूचकांक का प्रयोग करेंगे और जो वह नहीं है जो हम चाहते मापने के लिए) और key2 द्वारा पूरे डेटासेट को समूहीकृत करना:

MapReduce: 18,803ms
एकत्रीकरण फ्रेमवर्क: 1,535ms

उन मेरे पिछले प्रयोगों के साथ लाइन में बहुत ज्यादा कर रहे हैं।

+0

इस पर अतिरिक्त टिप्पणियों के लिए http://stackoverflow.com/questions/12139149/mapreduce-with-mongodb-really-really-slow-30-hours-vs-20-minutes-in-mysql- –

+0

धन्यवाद का उत्तर देखें प्रश्न के पहले भाग का जवाब देने के लिए! दूसरे भाग के बारे में क्या? क्यों और कैसे? क्या आपके पास इसके लिए कुछ जोड़ने के लिए है? किसी भी योगदान के लिए धन्यवाद। – Jeach

+1

यह दस्तावेज़ों में शामिल है - लेकिन संक्षेप में, सर्वर (सी ++) में समेकन चलाता है, मैपरेडस जेएस कोड चलाने के लिए अलग जावास्क्रिप्ट थ्रेड को स्पैन करता है। –

7

मेरे बेंचमार्क:

== डाटा जनरेशन ==

(उत्पन्न 4million पंक्तियों अजगर के साथ) लगभग 350 बाइट्स के साथ आसान है।

  • कुंजी 1, कुंजी 2 (दो यादृच्छिक कॉलम, अनुक्रमण परीक्षण करने के लिए 2000 के प्रमुखता के साथ, और 20 की प्रमुखता के साथ)
  • longdata: प्रत्येक दस्तावेज़ इन कुंजियों है एक लंबी स्ट्रिंग प्रत्येक का आकार बढ़ाने के लिए दस्तावेज़
  • मूल्य: एक साधारण संख्या (स्थिरांक 10) एकत्रीकरण का परीक्षण करने के

 
db = Connection('127.0.0.1').test # mongo connection 
random.seed(1) 
for _ in range(2): 
    key1s = [hexlify(os.urandom(10)).decode('ascii') for _ in range(10)] 
    key2s = [hexlify(os.urandom(10)).decode('ascii') for _ in range(1000)] 
    baddata = 'some long date ' + '*' * 300 
    for i in range(2000): 
     data_list = [{ 
       'key1': random.choice(key1s), 
       'key2': random.choice(key2s), 
       'baddata': baddata, 
       'value': 10, 
       } for _ in range(1000)] 
     for data in data_list: 
      db.testtable.save(data) 
कुल डेटा आकार मोंगो में 6GB बारे में था। (और postgres में 2GB)

== टेस्ट ==

मैं कुछ परीक्षण किया था, लेकिन एक की तुलना परिणामों के लिए पर्याप्त है:

नोट: सर्वर को पुनः आरंभ है, और ओएस कैश के बाद साफ किया जाता है कैशिंग के प्रभाव को नजरअंदाज करने के लिए प्रत्येक क्वेरी।

: QUERY कुल key1=somevalue (200K के बारे में पंक्तियाँ) के साथ सभी पंक्तियों और प्रत्येक key2

  • नक्शे के लिए value योग/को कम 10.6 सेकंड
  • aggreate 9.7 सेकंड
  • समूह 10.3 सेकंड

प्रश्न:

नक्शा/कम करने:

db.testtable.mapReduce(function(){emit(this.key2, this.value);}, function(key, values){var i =0; values.forEach(function(v){i+=v;}); return i; } , {out:{inline: 1}, query: {key1: '663969462d2ec0a5fc34'} })

कुल:

db.testtable.aggregate({ $match: {key1: '663969462d2ec0a5fc34'}}, {$group: {_id: '$key2', pop: {$sum: '$value'}} })

समूह:

db.testtable.group({key: {key2:1}, cond: {key1: '663969462d2ec0a5fc34'}, reduce: function(obj,prev) { prev.csum += obj.value; }, initial: { csum: 0 } })

+4

समूह के नीचे मेरा बेंचमार्क देखें एकत्रीकरण ढांचा नहीं है, यह मानचित्र/कम का हिस्सा है। यही कारण है कि इसमें एक कम कार्य है। यहां अंतर देखें: http://docs.mongodb.org/manual/reference/command/group/ और http://docs.mongodb.org/manual/reference/aggregation/#_S_group यदि आप एकत्रीकरण ढांचे का उपयोग कर रहे थे तो आप करेंगे कॉल करें db.collection.aggregate ([पाइपलाइन]) –

+0

मेरे पास एक सुझाव है: आप क्वेरी क्यों नहीं लेते हैं और एक ही चीज़ को अपने पूरे संग्रह पर चलाते हैं और देखते हैं कि प्रदर्शन में कोई अंतर है या नहीं। –

+3

आपके बेंचमार्क के साथ एक और समस्या है क्या आपने ओएस कैश को मंजूरी दे दी है? तो आप रैम में डेटा पेज पर ले जाने के लिए ज्यादातर समय माप रहे थे। यह वास्तविक प्रदर्शन संख्याओं को बौना करता है, और यह एक यथार्थवादी परिदृश्य नहीं है। –