2011-11-02 14 views
6

हम एक माप प्रणाली का निर्माण कर रहे हैं जिसमें अंततः हजारों माप स्टेशन शामिल होंगे। प्रत्येक स्टेशन अपने जीवनकाल में लगभग 30 मिलियन मापों को बचाएगा जिसमें 30 स्केलर मूल्य होंगे। ये फ्लोट वैल्यू होंगे। अब हम प्रत्येक स्टेशन पर इस डेटा को बचाने के लिए सोच रहे हैं, हम प्रत्येक स्टेशन ऐसी है किभौतिक माप के लिए अच्छा (noSQL?) डेटाबेस

  • हम एक सप्ताह के कई timescales पर डेटा (जैसे माप कल्पना करने के लिए चाहते हैं पर एक वेब एप्लिकेशन बनाने पर विचार किया जाएगा, माह, वर्ष)
  • हम
  • हम केवल कर रहे हैं (एक महीने से अधिक डेटा पर औसत चलती जैसे औसत एक साल ग्राफ में दिखाने के लिए)
  • डेटाबेस दुर्घटना प्रतिरोधी (बिजली की कटौती होने के लिए) की जरूरत का निर्माण करने की जरूरत है लिखता है और पढ़ता है, डेटा
पर कोई अपडेट या हटा नहीं जाता है

इसके अतिरिक्त हम एक और सर्वर चाहते हैं जो 1000 माप स्टेशनों का डेटा दिखा सकता है। यह 500 बिलियन माप में डेटा का ~ 50 टीबी होगा। माप स्टेशन से सर्वर तक डेटा संचारित करने के लिए, मैंने सोचा कि कुछ प्रकार का डेटाबेस-स्तरीय प्रतिकृति एक स्वच्छ और कुशल तरीका होगा।

अब मैं सोच रहा हूं कि इन उद्देश्यों के लिए कोई एसएसक्यूएल समाधान mySQL से बेहतर हो सकता है या नहीं। विशेष रूप से couchDB, कैसंड्रा और शायद जैसे प्रमुख मूल्य वाले स्टोर Redis मुझे आकर्षक लग रहा है। उनमें से कौन सा "माप समय श्रृंखला" डेटा मॉडल आपकी राय में सबसे अच्छा होगा? माप केंद्र से मुख्य सर्वर तक दुर्घटना सुरक्षा और प्रतिकृति जैसे अन्य फायदों के बारे में क्या?

+0

मुझे नेटसीडीएफ भी मिला है - किसी को भी इसका अनुभव मिला है? यह समय श्रृंखला के लिए बनाया गया है, लेकिन मुझे कई सर्वरों का उपयोग करके क्रैश प्रतिरोध और स्केलिंग के बारे में निश्चित नहीं है ... – Chris

उत्तर

2

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

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

आपने कैसंद्रा का भी उल्लेख किया, जो मुझे लगता है कि आपके उपयोग के मामले के लिए लक्ष्य पर अधिक है। कैसंद्रा उन डेटाबेसों के लिए उपयुक्त है जो अनिश्चित काल तक बढ़ते हैं, अनिवार्य रूप से यह मूल उपयोग केस है। विभाजन और उपलब्धता बेक्ड है इसलिए आपको इसके बारे में चिंता करने की ज़रूरत नहीं होगी। डेटा मॉडल औसत कुंजी/मूल्य स्टोर की तुलना में थोड़ा अधिक लचीला है, कॉलम का दूसरा आयाम जोड़ता है, और प्रति पंक्ति लाखों कॉलम व्यावहारिक रूप से समायोजित कर सकता है। यह टाइम-सीरीज़ डेटा को पंक्तियों में "बाल्टी" होने की अनुमति देता है जो उदाहरण के लिए समय सीमाओं को कवर करता है। क्लस्टर (विभाजन) में डेटा का वितरण पंक्ति स्तर पर किया जाता है, इसलिए पंक्ति में संचालन करने के लिए केवल एक नोड आवश्यक है।

हैडोप मैपरेडस, पिग और हाइव के लिए "मूल ड्राइवर" के साथ कैसंड्रा में सही प्लग करता है, इसलिए इसे संभावित रूप से एकत्रित डेटा एकत्र करने और चलने वाले औसत को पूरा करने के लिए उपयोग किया जा सकता है। सबसे अच्छा अभ्यास प्रश्नों के चारों ओर डेटा को आकार देना है, इसलिए शायद प्रत्येक प्रकार की क्वेरी के लिए "denormalized" फ़ॉर्म में डेटा की कई प्रतियां स्टोर करना चाहते हैं।

कैसेंड्रा में समय श्रृंखला कर रही पर इस पोस्ट की जाँच करें:

http://rubyscale.com/2011/basic-time-series-with-cassandra/

+0

धन्यवाद, मैं कैसंद्रा पर थोड़ा और अधिक देखूंगा और शायद सोफेडबी विचार छोड़ सकता हूं ... – Chris

2

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

इसके लिए एक तार्किक प्रारूप सादा पुराना सीएसवी है। प्रत्येक माप के बाद, अंतर्निहित file पर flush() पर कॉल करें। केंद्रीय सर्वर पर दोहराए गए डेटा को प्राप्त करना rsync(1) द्वारा कुशलतापूर्वक हल किया गया है। फिर आप अपनी पसंद के विश्लेषण उपकरण में डेटा आयात कर सकते हैं।

0

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

जब आप डेटा के "50Tb" के बारे में बात कर रहे हैं, तो यह काफी है। यदि एक साधारण चाल दो के कारक से कम कर देगी, तो वह खुद को स्टोरेज लागत और बैंडविड्थ शुल्कों में वापस देगी।

यदि माप नियमित आधार पर लिया जाता है तो इसका मतलब यह होगा कि प्रत्येक माप के साथ टाइमस्टैम्प को सहेजने के बजाय, आप प्रारंभ समय और अंतराल को स्टोर करते हैं और केवल माप को स्टोर करते हैं।

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

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