मुझे स्टोर करने और कुछ बहुत बड़ी मात्रा में समय श्रृंखला डेटा को क्वेरी करने में सक्षम होने की आवश्यकता है।
डेटा के गुण इस प्रकार हैं:
- श्रृंखला की संख्या: लगभग 12.000 (बारह हजार)
- वैश्विक स्तर पर, 500.000.000 प्रति माह (पांच सौ करोड़)
- मिश्रित मूल्य प्रकार: अधिकांश डेटा पॉइंट फ्लोटिंग पॉइंट मान हैं, बाकी स्ट्रिंग्स हैं
- नमूनाकरण अवधि: श्रृंखला के बीच और साथ ही एक श्रृंखला के भीतर चर
- टाइमस्टैम्प: मिलीसेकंड सटीक
- डेटा अवधारण अवधि: कई साल, बिना क्षय या अपक्षरण के
- डेटा अभिलेखागार को वास्तविक समय के निकट बनाने की आवश्यकता है, लेकिन एक उचित देरी (~ 1 घंटा) स्वीकार्य है
- यदि आवश्यक हो तो पिछले डेटा को फिर से बनाया जा सकता है, लेकिन उच्च लागत पर
- कभी-कभी, लेकिन काफी कम, कुछ पिछले डेटा को अपडेट करने की आवश्यकता होती है
प्रचलित प्रश्नों के गुण:
- डेटा के खिलाफ अधिकांश क्वेरी टाइमस्टैम्प-आधारित क्वेरी होगी; एक दिन से लेकर कई महीने / साल तक। 90% + सबसे हाल के डेटा पर प्रश्न होंगे
अन्य आवश्यकताएं:
- समाधान मुक्त बीयर और अधिमानतः खुलने वाले स्रोत के रूप में मुक्त होना चाहिए
मेरा प्रारंभिक सोचा था कि SQL डेटाबेस के बजाय बैकएंड के भंडारण के रूप में HDF5 फ़ाइलों के साथ PyTables / Pandas का उपयोग करना था ।
प्रशन :
PyTables / पंडों को "सबसे अच्छा" मार्ग मानते हुए, क्या डेटा को कई HDF फ़ाइलों में विभाजित करना बेहतर होगा, हर एक को दिए गए समय की अवधि में, या हर चीज को एक ही फाइल में रखना होगा जो तब बहुत बड़ी हो जाएगी?
क्या मुझे निश्चित या तालिका प्रारूप पर जाना चाहिए? मेरे लिए, निश्चित प्रारूप ठीक लग रहा है यदि मैं प्रति माह एक एचडीएफ फ़ाइल रखता हूं, क्योंकि इस तरह एक पूरी श्रृंखला शायद रैम में फिट होती है और मैं तालिका प्रारूप सूचकांक की आवश्यकता के बिना इन-मेमोरी को स्लाइस कर सकता हूं। क्या मैं सही हूँ ?
और अगर है कि नहीं सबसे अच्छा तरीका है, कैसे मैं इस डेटा की दुकान की संरचना करना चाहिए या क्या प्रौद्योगिकियों मैं पर विचार किया जाना चाहिए? मैं समय श्रृंखला डेटा के बड़े सेटों को संग्रहीत करने वाला पहला व्यक्ति नहीं हूं, इस चुनौती को हल करने के लिए सामान्य दृष्टिकोण क्या है?
अन्य दृष्टिकोण जो मैंने माना है:
- सरणी डेटाबेस: वे निरंतर नमूने की अवधि के साथ समय श्रृंखला के लिए एक शानदार फिट हैं, क्योंकि आपको केवल शुरुआत और समाप्ति समय और सरणी के नमूने की अवधि को संग्रहीत करने की आवश्यकता है, और फिर सरणी में केवल मान और अनुक्रमण आसान है। लेकिन श्रृंखला के भीतर परिवर्तनशील नमूने की अवधि के साथ, मुझे एक करीबी टाइमस्टैम्प-> मूल्य संबंध रखने की जरूरत है, कि मेरे विचार में सरणी DBMS के लिए इतना अच्छा फिट नहीं है।
- टाइमस्टैम्प, पैरामिड, कॉलम के रूप में मान के साथ मानक SQL डेटाबेस, लेकिन उनकी प्रकृति से वे किसी भी प्रश्न के लिए डिस्क I / O का बहुत अनुरोध करते हैं