2013-04-16 17 views
5

में डिजाइनिंग टाइम्सरी डेटाबेस मैं दैनिक डेटा की लाखों श्रृंखला संग्रहित करने के लिए एक कैसंद्रा टाइम्सरी डेटाबेस बनाने की सोच रहा हूं जो संभावित रूप से 100 बी डेटा पॉइंट तक हो सकता है।कैसंड्रा

मैं इस लेख को देखा: http://rubyscale.com/blog/2011/03/06/basic-time-series-with-cassandra/

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

दो सवाल मेरे पास है:

  • मैं 20,000 टाइमस्टैंप (दैनिक) कॉलम तक का ही भंडारण पर देख रहा हूँ। उदाहरण के लिए पंक्तियों को छाया करना भी आवश्यक है। इस कॉलम के साथ साल? कॉलम की संख्या को प्रति वर्ष 365 तक कम करने के लिए पंक्तियों को रोकने के लिए कोई लाभ/हानि है।
  • मेरे पास एक और विचार है कि पंक्तियों को कॉल करने के बजाए कॉलम परिवार को हर साल प्रति व्यक्ति बनाना है। इस तरह से कई वर्षों से डेटा तक पहुंचने पर मुझे एक कॉलम परिवार की बजाय एकाधिक कॉलम परिवारों से पूछना होगा और क्लाइंट साइड पर परिणामों में शामिल होना होगा। क्या यह दृष्टिकोण गति को चीजों को ऊपर या धीमा कर देगा?

उत्तर

4

यदि आप कभी भी बड़ी मात्रा में लिखने के लिए जा रहे हैं तो आपके दृष्टिकोण में एक समस्या है।

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

मेरी सलाह एक साथ कई पंक्तियों में बाल्टी करना है जो एक साथ उपयोग की जाती हैं। टाइम बाल्टी खतरनाक हो सकती है क्योंकि एक बाल्टी के दौरान अचानक बढ़ोतरी सब कुछ नीचे ला सकती है।

आप इस तरह अपने बाल्टी (पंक्ति कुंजी) बना सकते हैं:

  • [ROW_BASE_NAME] [DAY] को + someHashFunction (टाइमस्टैम्प)% 10
  • [ROW_BASE_NAME] [DAY] को + random.nextInt (10)
  • [ROW_BASE_NAME] [DAY] को + nextbucket < --- कि आप बाल्टी घुमाने के लिए एक सुरक्षित तरीका है, तो अपने आप को

यह करने के लिए कई तरह से नहीं है है। आप ऐसा करने के लिए सहेजे जा रहे स्तंभ के कुछ तत्व भी उपयोग कर सकते हैं। लेकिन मुझे लगता है कि पूरे कैसंद्रा क्लस्टर को हर समय लाभ उठाने के लिए ऐसा करना महत्वपूर्ण होना चाहिए।

मेरा उत्तर केवल भारी एप्लिकेशन/कार्यक्षमता लिखने के लिए मान्य है क्योंकि आपको सभी डेटा पढ़ने और उस दिन के लिए पूरे समय रेखा का पुनर्गठन करने के लिए एक बहु_get (एकाधिक कुंजी पूरी पंक्ति पढ़ता है) का उपयोग करना होगा।

+0

तो आपको लगता है कि शेडिंग टेबल/कॉलम परिवारों में अलग-अलग कॉलम परिवारों में कोई अंक नहीं है बल्कि इसे पंक्तियों के बजाय करना है? क्या एक कॉलम परिवार में बहुत सारी पंक्तियां होने से कोई नुकसान होता है? – datageek

+2

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

1

आपको यह लेख Advanced Time Series with Cassandra पर भी पढ़ना चाहिए।

+0

मैंने इसे धन्यवाद देखा, वास्तव में मैं उन्नत समय श्रृंखला लेख से उस समाधान को नापसंद करता हूं। अगर मुझे समझ में आया तो इसे डेटा को जेसन के रूप में रखना होगा? – datageek