2009-09-25 13 views
18

में include_docs = true की तुलना में उत्सर्जन में दस्तावेज़ों सहित, मैंने कहीं उल्लेख किया है कि emit(key, doc) एक इंडेक्स बनाने के लिए कितना समय लेता है (या उस प्रभाव के लिए कुछ) बढ़ाएगा।कॉच डीबी

क्या इसमें कोई योग्यता है, और क्या कोई कारण है कि हमेशा emit(key, null) और फिर include_docs = true न करें?

उत्तर

23

हां, यह आपके सूचकांक का आकार बढ़ाएगा, क्योंकि कॉच डीबी प्रभावी रूप से उन मामलों में पूरे दस्तावेज़ की प्रतिलिपि बनाता है। जिन मामलों में आप कर सकते हैं, include_docs=true का उपयोग करें।

हालांकि, विकी में वर्णित इस का उपयोग करते समय जागरूक होने की दौड़ की स्थिति है। यह संभव है, दृश्य डेटा पढ़ने और दस्तावेज़ लाने के दौरान, उस दस्तावेज़ ने बदल दिया है (या हटा दिया गया है, जिस स्थिति में _deletedtrue होगा)। इसे "क्वेरी विकल्प" के तहत here दस्तावेज किया गया है।

+0

सही, धन्यवाद। मुझे दौड़ की स्थिति के बारे में पढ़ना याद है, लेकिन उत्सव में डॉक्टर को शामिल करने का साइड इफेक्ट तब तक मेरे साथ नहीं हुआ था। – kolosy

2

यह एक क्लासिक समय/अंतरिक्ष व्यापार है।

आपके इंडेक्स में दस्तावेज़ डेटा उत्सर्जित करने से डिस्क पर इंडेक्स फ़ाइल का आकार बढ़ जाएगा क्योंकि CouchDB में उत्सर्जित डेटा सीधे इंडेक्स फ़ाइल में शामिल होता है। हालांकि, इसका मतलब यह है कि, जब आपके डेटा से पूछताछ की जाती है, तो कॉच डीबी डिस्क पर इंडेक्स फ़ाइल से सामग्री को सीधे स्ट्रीम कर सकती है। यह स्पष्ट रूप से काफी तेज़ है।

include_docs=true पर निर्भर करते हुए आपकी ऑन-डिस्क इंडेक्स के आकार में कमी आएगी, यह सच है। हालांकि, पूछताछ पर, कोचडीबी को प्रत्येक लौटाई गई पंक्ति के लिए एक दस्तावेज़ पढ़ना होगा। इसमें मुख्य डेटा फ़ाइल से अनिवार्य रूप से यादृच्छिक दस्तावेज़ लुकअप शामिल हैं, जिसका अर्थ है कि डेटा लौटने की लागत और समय महत्वपूर्ण रूप से बढ़ता है।

जबकि दस्तावेज़ों की छोटी संख्या के लिए क्वेरी समय अंतर धीमा है, यह एप्लिकेशन द्वारा किए गए हर कॉल पर जोड़ देगा। मेरे लिए, इसलिए, किसी दस्तावेज़ से आवश्यक फ़ील्ड को इंडेक्स में उत्सर्जित करना आमतौर पर सही कॉल होता है - डिस्क सस्ता है, उपयोगकर्ता का ध्यान कम हो जाता है। यह व्यापक रूप से एक संबंधपरक डेटाबेस में कवर इंडेक्स का उपयोग करने के समान है, सलाह का एक और व्यापक रूप से प्रतिबिंबित टुकड़ा।

मैंने अंतर के बारे में महसूस करने के लिए पूरी तरह से अवैज्ञानिक test on this किया था। मुझे प्रतिक्रिया समय में 8x की वृद्धि हुई और include_docs=true का उपयोग करते समय सीपीयू में 50% की वृद्धि हुई, जब एक दृश्य की तुलना में 100,000 दस्तावेज़ों को पढ़ने के लिए जहां दस्तावेजों को सीधे इंडेक्स में ही उत्सर्जित किया गया था।

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