के लिए अनुशंसित दस्तावेज़ संरचना हम वर्तमान में उपयोग निगरानी अनुप्रयोग के लिए पोस्टग्रेस से कोच डीबी में परिवर्तन पर विचार कर रहे हैं। कुछ संख्या:CouchDB
लगभग 2000 कनेक्शन, प्रति दिन लगभग 600,000 नई पंक्तियों के लिए, हर 5 मिनट में मतदान किया जाता है।
t_usage {service_id, टाइमस्टैम्प, data_in, data_out}
t_usage_20100101 t_usage विरासत: Postgres में, हम इस डेटा, दिन-ब-विभाजित की दुकान।
t_usage_20100102 t_usage विरासत में आता है। आदि
हम एक आशावादी संग्रहित प्रो के साथ डेटा लिखते हैं जो विभाजन को मानता है और आवश्यक होने पर इसे बनाता है। हम बहुत जल्दी सम्मिलित कर सकते हैं।
डेटा, हमारे उपयोग के मामलों, महत्व और वर्तमान प्रदर्शन के क्रम में की पढ़ने के लिए कर रहे हैं:
* एकल सेवा, एकल दिवस उपयोग: अच्छा प्रदर्शन
* एकाधिक सेवा, महीना उपयोग: गरीब प्रदर्शन
* सिंगल सेवा, महीना उपयोग: गरीब प्रदर्शन
* कई सेवाओं, एकाधिक महीने: बहुत गरीब प्रदर्शन
* कई सेवाओं, एकल दिन: अच्छा प्रदर्शन
यह समझ में आता है क्योंकि विभाजन जो अब तक है, दिनों के लिए अनुकूलित कर रहे हैं हमारे सबसे अधिक imp ऑर्टेंट उपयोग केस। हालांकि, हम माध्यमिक आवश्यकताओं में सुधार के तरीकों को देख रहे हैं।
हमें अक्सर घंटे के साथ क्वेरी को पैरामीटर करने की आवश्यकता होती है, उदाहरण के लिए, केवल 8am और 6pm के बीच परिणाम देना, इसलिए सारांश तालिका सीमित उपयोग के हैं। (ये पैरामीटर पर्याप्त आवृत्ति के साथ बदलते हैं जो डेटा की कई सारांश सारणी बनाते हैं)।
उस पृष्ठभूमि के साथ, पहला सवाल यह है: क्या इस डेटा के लिए कॉच डीबी उपयुक्त है? यदि ऐसा है, तो उपरोक्त उपयोग के मामलों को देखते हुए, आप कोचडीबी दस्तावेजों में डेटा का सबसे अच्छा मॉडल कैसे मॉडल करेंगे? कुछ विकल्प मैं एक साथ रख दिया अब तक है, जो हम बेंच मार्किंग की प्रक्रिया में हैं (_ id, _rev छोड़कर) कर रहे हैं:
एक प्रति दिन प्रति कनेक्शन
{
service_id:555
day:20100101
usage: {1265248762: {in:584,out:11342}, 1265249062: {in:94,out:1242}}
}
लगभग 60,000 नए दस्तावेज़ों के एक महीने दस्तावेज़। नए दस्तावेज़ों के बजाय, अधिकांश नए डेटा मौजूदा दस्तावेजों के अपडेट होंगे।
(यहां, उपयोग की वस्तुओं को मतदान के टाइमस्टैम्प पर रखा जाता है, और बाइट्स और बाईस के मूल्यों को महत्व दिया जाता है)। प्रति माह प्रति कनेक्शन
{
service_id:555
month:201001
usage: {1265248762: {in:584,out:11342}, 1265249062: {in:94,out:1242}}
}
लगभग 2,000 नए दस्तावेज़ों के एक महीने
एक दस्तावेज़। मौजूदा दस्तावेजों के लिए आवश्यक अद्यतन। प्रति डाटा की पंक्ति
एक दस्तावेज़ एक महीने
{
service_id:555
timestamp:1265248762
in:584
out:11342
}
{
service_id:555
timestamp:1265249062
in:94
out:1242
}
लगभग 15,000,000 नए दस्तावेज़ों एकत्र। सभी डेटा एक नए दस्तावेज़ में एक डालने होगा। तेज़ आवेषण, लेकिन मेरे पास प्रश्न हैं कि यह एक वर्ष या 2 वर्षों के बाद लाखों दस्तावेजों के साथ कितना कुशल होगा। फ़ाइल IO निषिद्ध प्रतीत होता है (हालांकि मैं स्वीकार करने वाला पहला हूं कि मैं इसके मैकेनिक्स को पूरी तरह से समझ नहीं पा रहा हूं)।
मैं इसे दस्तावेज़-उन्मुख तरीके से संपर्क करने की कोशिश कर रहा हूं, हालांकि आरडीएमएस आदत को तोड़ना मुश्किल है :) तथ्य यह है कि आप केवल न्यूनतम रूप से पैरामीटर विचार कर सकते हैं और साथ ही मुझे थोड़ा चिंतित भी है। उस ने कहा, उपरोक्त में से कौन सा सबसे उपयुक्त होगा? क्या ऐसे अन्य प्रारूप हैं जिन्हें मैंने नहीं माना है जो बेहतर प्रदर्शन करेंगे?
अग्रिम धन्यवाद,
जेमी।
कॉच डीबी दृश्य सर्वर को दृश्य को संसाधित करने के लिए कई सिस्टम प्रक्रियाएं लॉन्च करेगा, इसलिए यह कई कोरों में ठीक है। बाकी कॉच डीबी एरलांग में है और कई कोरों का उपयोग करने में भी बढ़िया है। – mikeal
आप सही हैं। मैंने एक परीक्षण चलाया, और मैं इन बड़े दस्तावेजों में से 2000 (20 प्रक्रियाओं को एक साथ 100, एक साथ) एक v0.9 सोफे उदाहरण में डालता हूं। 4 कोर 2.66 जी मैक प्रो पर, इन्हें मूल रूप से 3m30s में डाला गया था। सोफे ने 350% सीपीयू लिया। अंत में डिस्क फ़ाइल ~ 2 जी थी। कॉम्पैक्शन के बाद भी, यह शायद ही कभी बदल गया। इसके विपरीत, 2000 "एकल दिन" दस्तावेजों को डालने में ~ 18s लगे। ज़ाहिर है, बहुत तेज़। 3 एम 30 एस उनके पास 5 मीटर खिड़की के बहुत करीब है। 18 एस बहुत बेहतर है। हालांकि कॉम्पैक्टिंग ने लगभग 3 मीटर लिया। –
इसके लिए बहुत बहुत धन्यवाद, यह शुरू करने के लिए एक शानदार जगह है। हमने कुछ मानक चलाए हैं और आपके जैसा ही पाया है। हमारे पास जो मुख्य मुद्दा होगा, वह डेटा के निरंतर अपडेट है - ऐसा लगता है कि यह "पूरे महीने" दस्तावेज़ों के लिए निषिद्ध रूप से धीमा हो जाएगा। जब तक हम नियमित रूप से कॉम्पैक्ट कर सकते हैं, उम्मीद है कि हम ठीक रहेगा। यह शर्म की बात है कि हम डेटा प्रति डेटा के लिए नहीं जा सकते हैं, लेकिन जैसा कि आपको संदेह है कि फ़ाइल IO निषिद्ध लगता है। दुर्भाग्यवश किसी अन्य प्रकार के दस्तावेज़ को अपडेट करने के लिए, हमें लिखने से पहले पढ़ने की जरूरत है, _rev ... – majelbstoat