2010-10-11 5 views
11

मेरे पास एक कॉच डीबी (v0.10.0) डेटाबेस है जो आकार में 8.2 जीबी है और 38 9 0000 दस्तावेज हैं।कॉच डीबी व्यू बेहद धीमा है

अब, मैं के रूप में देखें

function(doc) {emit([doc.Status], doc); 

के मानचित्र निम्नलिखित है और यह हमेशा के लिए (4 घंटे और अभी भी कोई परिणाम) लोड करने के लिए ले जाता है।

  1. दृश्य एक अस्थायी दृश्य नहीं है:

    यहाँ कुछ अतिरिक्त जानकारी है कि स्थिति का वर्णन मदद कर सकता है है। देखें 3890000 दस्तावेज़ों को सम्मिलित करने से पहले परिभाषित किया गया है।

  2. सर्वर पर कुछ भी नहीं है। यह और कुछ नहीं बल्कि चूक स्थापित के साथ एक ubuntu बॉक्स है।

  3. मुझे लगता है कि मेरा सीपीयू चल रहा है और कड़ी मेहनत कर रहा है (कभी-कभी 100% तक शूट करता है)। स्मृति के रूप में अच्छी तरह से आगे बढ़ रहा है, लेकिन बढ़ती नहीं।

तो मेरे सवाल है:

  1. क्या वास्तव में पृष्ठभूमि में हो रहा है?
  2. क्या यह एक "एक बार" चीज है जहां मुझे एक बार इंतजार करना है और यह किसी भी तरह बाद में काम करेगा?

बहुत धन्यवाद,

ची

उत्तर

13

दृश्य केवल अगली बार जब वे पढ़ रहे हैं अपडेट किया जाता है। पढ़ने पर, यह सभी दस्तावेजों (बनाया है, अद्यतन, हटाया गया) कि अपडेट किए गए हैं पिछली बार देखने को पढ़ा गया के बाद से संसाधित करता है।

तो यदि आपको 3890000 दस्तावेजों को सम्मिलित करने से पहले परिभाषित किया गया था, तो भी यह देखने के लिए 38 9 0000 दस्तावेज़ों को संसाधित करेगा।

से http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

ध्यान दें कि डिफ़ॉल्ट रूप से विचारों नहीं बनाई गई हैं और अद्यतन जब एक दस्तावेज सहेजा जाता है, बल्कि, जब वे पहुँचा रहे हैं। नतीजतन, पहले पहुँच अपने डेटा के आकार के आधार कुछ समय लग सकता CouchDB दृश्य बनाता है। यदि बेहतर हो तो विचारों को भी अपडेट किया जा सकता है जब कोई दस्तावेज़ बाहरी स्क्रिप्ट का उपयोग करके सहेजा जाता है जो अपडेट किए जाने पर विचारों को कॉल करता है। एक उदाहरण यहां पाया जा सकता है: RegeneratingViewsOnUpdate

इसके अलावा सिर्फ इस टिप है, जो उपयोगी हो सकता है अगर आप Ubuntu पर चला रहे हैं भर में आया था:

http://nosql.mypopescu.com/post/1299848121/couchdb-and-ubuntu-configuration-trick-for

+0

बिल्कुल सही! तो मुझे लगता है कि यह उस समय सूचकांक का निर्माण कर रहा है। और अगर मैं रीबूट करता हूं तो यह नहीं करेगा (क्योंकि अपडेट किया गया है)। धन्यवाद इवान! –

14

पूरे दस्तावेज़ फेंकना मत करो। यह अनावश्यक है। इसके बजाय आप include_docs=true साथ आपकी क्वेरी चला सकते हैं, जो आप प्रत्येक पंक्ति के डॉक विशेषता के माध्यम से दस्तावेज़ तक पहुँच करने देगा।

जब आप पूरे दस्तावेज़ को छोड़ देते हैं तो आप इंडेक्स को अपने पूरे डेटाबेस से बड़े या बड़े बनाते हैं।:)

+0

माइकल सही है, हालांकि मैं एक और धागे में जोड़ूंगा जेसनस्मिथ ने उल्लेख किया है कि यदि आप किसी इंडेक्स में दस्तावेज़ को छोड़ देते हैं, तो सूचकांक बहुत बड़ा होगा लेकिन पुनर्प्राप्ति तेज होगी। लेकिन जैसा कि माइकल ने इंगित किया है, इससे आपके सूचकांक मूल रूप से आपके डेटा सेट की प्रतियां बन जाएंगे, इसलिए यदि आप बड़े डेटा के साथ काम कर रहे हैं, तो इसे छोड़ दें :) –

+0

तो उत्सर्जन कैसा दिखता है? (Doc.id) फेंकना? –