2012-03-07 11 views
7

मेरे पास एक कॉच डीबी डेटाबेस है (हम कहेंगे कि इसमें प्रोजेक्ट टाइम कार्ड संबंधित डेटा है: प्रोजेक्ट कोड, व्यक्ति, व्यक्ति का जॉब टाइटल, कार्य, तिथि, घंटे काम, उनकी बिल दर इत्यादि)। मैं प्रोजेक्ट के दिन के दिन या व्यक्तिगत रूप से, या कार्य, या शीर्षक से, या किसी एकल विशेषता द्वारा सारांश दृश्य बनाना चाहता हूं।कॉच डीबी में, क्या एक बहु-उत्सर्जित नक्शा फ़ंक्शन एक विज्ञापन प्रकार के प्रश्न को अनुकरण करने के लिए मेरे सोफे आकार को उड़ा देगा?

मुझे चिंता है कि मैं एक अविश्वसनीय पथ का नेतृत्व कर रहा हूं और मेरा डेटाबेस आकार जितना बड़ा हो सकता है उससे कहीं अधिक हो सकता है।

मैंने एक मानचित्र फ़ंक्शन के साथ एक दृश्य बनाया जो प्रत्येक विशेषता के लिए कई बार प्रत्येक दस्तावेज़ को उत्सर्जित करता है। यह काम करता है। लेकिन क्या वह कभी एक अंत बिंदु तक पहुंच जाता है जहां आपको रोकना चाहिए?

emit([doc.project, 'day', doc.day], doc); 
emit([doc.project, 'month', doc.month], doc); 
emit([doc.project, 'person', doc.person], doc); 
emit([doc.project, 'job title', doc.persons-job-title], doc); 
emit([doc.project, 'task', doc.task], doc); 

फिर हमेशा के लिए [परियोजना,] के प्रारंभ/समाप्ति कुंजी के साथ क्वेरी [परियोजना,, {}]

मेरी डेटाबेस अंत में बस मिलेगी इतनी बड़ी:

मैं कई का उत्सर्जन करता है है किसी भी नए डेटा को जोड़ने के लिए इसे प्रतिबंधित रूप से महंगा बनाने के लिए? क्या बहु-उत्सर्जन() जो मैं करने की कोशिश कर रहा हूं, उसके लिए पसंदीदा तरीका है? क्या वहां कोई बेहतर/अलग तरीका है?

दस्तावेज के आधार पर उत्सर्जित गतिशील रूप से निर्माण करना चाहते हैं, बस कुछ विशाल दस्तावेज़ों के माध्यम से आने और बड़ी भंडारण आवश्यकताओं को बनाने के मामले में परेशानी के लिए पूछ रहे हैं?

असल में, क्या कोई ऐसा बिंदु है जहां मुझे पागलपन को रोकना चाहिए?

उत्तर

9

सबसे पहले: एक मूल्य के रूप में दस्तावेज़ को फेंकना मत करो ... आप परिणाम सेट में डेटा की जरूरत है अगर आप, &include_docs=true उपयोग कर सकते हैं।

दूसरा: मानते हुए, कि अपने दस्तावेज़ की एक से अधिक परियोजना रखती है:

यह मतलब है, महीना के बिना एक दिन परियोजनाओं के लिए पूछ रही हो? यदि नहीं, तो आप उपयोग कर सकते emit([doc.project,'monthday',doc.month,doc.day],1) तो आप एक महीने में सभी परियोजनाओं के लिए पूछ सकते हैं:

startkey=["project1","monthday",3]&endkey=["project1","monthday",3,{}] 

एक महीने के दिन:

key=["project1","monthday",3,9] 

आप एक सरल को कम-समारोह उपयोग कर रहे हैं (_sum) आप पूछ, कितने दिन एक परियोजना है (+ एक महीने में) के लाभ के लिए होता है:

startkey=["project1","monthday"]&endkey=["project1","monthday",{}]&group_level=3 

...

"key":["project1","monthday",2],"value:1), // 1 Day in month 2 
"key":["project1","monthday",3],"value:2) // 2 Days in month 3 

group_level का उपयोग कर = 4 (समान = false को कम के रूप में):

"key":["project1","monthday",2,20],"value:1), 
"key":["project1","monthday",2,21],"value:1), 
"key":["project1","monthday",3,1],"value:1), 

निश्चित रूप से आप & include_docs साथ पिछले मामले को जोड़ सकते हैं = डेटा प्राप्त करने के सच

तीसरा:

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

चौथा (दिन/माह, व्यक्ति/jobtitle की तरह?):

यह है नहीं महंगा डेटा .. बस के निर्माण विचारों को जोड़ने; -)