बड़ी समय श्रृंखला डेटा को कुशलता से कैसे स्टोर करें?


27

मुझे स्टोर करने और कुछ बहुत बड़ी मात्रा में समय श्रृंखला डेटा को क्वेरी करने में सक्षम होने की आवश्यकता है।

डेटा के गुण इस प्रकार हैं:

  • श्रृंखला की संख्या: लगभग 12.000 (बारह हजार)
  • वैश्विक स्तर पर, 500.000.000 प्रति माह (पांच सौ करोड़)
  • मिश्रित मूल्य प्रकार: अधिकांश डेटा पॉइंट फ्लोटिंग पॉइंट मान हैं, बाकी स्ट्रिंग्स हैं
  • नमूनाकरण अवधि: श्रृंखला के बीच और साथ ही एक श्रृंखला के भीतर चर
  • टाइमस्टैम्प: मिलीसेकंड सटीक
  • डेटा अवधारण अवधि: कई साल, बिना क्षय या अपक्षरण के
  • डेटा अभिलेखागार को वास्तविक समय के निकट बनाने की आवश्यकता है, लेकिन एक उचित देरी (~ 1 घंटा) स्वीकार्य है
  • यदि आवश्यक हो तो पिछले डेटा को फिर से बनाया जा सकता है, लेकिन उच्च लागत पर
  • कभी-कभी, लेकिन काफी कम, कुछ पिछले डेटा को अपडेट करने की आवश्यकता होती है

प्रचलित प्रश्नों के गुण:

  • डेटा के खिलाफ अधिकांश क्वेरी टाइमस्टैम्प-आधारित क्वेरी होगी; एक दिन से लेकर कई महीने / साल तक। 90% + सबसे हाल के डेटा पर प्रश्न होंगे

अन्य आवश्यकताएं:

  • समाधान मुक्त बीयर और अधिमानतः खुलने वाले स्रोत के रूप में मुक्त होना चाहिए

मेरा प्रारंभिक सोचा था कि SQL डेटाबेस के बजाय बैकएंड के भंडारण के रूप में HDF5 फ़ाइलों के साथ PyTables / Pandas का उपयोग करना था ।

प्रशन :

  1. PyTables / पंडों को "सबसे अच्छा" मार्ग मानते हुए, क्या डेटा को कई HDF फ़ाइलों में विभाजित करना बेहतर होगा, हर एक को दिए गए समय की अवधि में, या हर चीज को एक ही फाइल में रखना होगा जो तब बहुत बड़ी हो जाएगी?

  2. क्या मुझे निश्चित या तालिका प्रारूप पर जाना चाहिए? मेरे लिए, निश्चित प्रारूप ठीक लग रहा है यदि मैं प्रति माह एक एचडीएफ फ़ाइल रखता हूं, क्योंकि इस तरह एक पूरी श्रृंखला शायद रैम में फिट होती है और मैं तालिका प्रारूप सूचकांक की आवश्यकता के बिना इन-मेमोरी को स्लाइस कर सकता हूं। क्या मैं सही हूँ ?

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


अन्य दृष्टिकोण जो मैंने माना है:

  • सरणी डेटाबेस: वे निरंतर नमूने की अवधि के साथ समय श्रृंखला के लिए एक शानदार फिट हैं, क्योंकि आपको केवल शुरुआत और समाप्ति समय और सरणी के नमूने की अवधि को संग्रहीत करने की आवश्यकता है, और फिर सरणी में केवल मान और अनुक्रमण आसान है। लेकिन श्रृंखला के भीतर परिवर्तनशील नमूने की अवधि के साथ, मुझे एक करीबी टाइमस्टैम्प-> मूल्य संबंध रखने की जरूरत है, कि मेरे विचार में सरणी DBMS के लिए इतना अच्छा फिट नहीं है।
  • टाइमस्टैम्प, पैरामिड, कॉलम के रूप में मान के साथ मानक SQL डेटाबेस, लेकिन उनकी प्रकृति से वे किसी भी प्रश्न के लिए डिस्क I / O का बहुत अनुरोध करते हैं

आपको सरणी डेटाबेस - en.wikipedia.org/wiki/Array_DBMS#List_of_Array_DBMS पर विचार करना चाहिए । मैं यह नहीं कह रहा हूं कि उनमें से एक सही होगा, या यहां तक ​​कि सबसे अच्छा या यहां तक ​​कि एक अच्छा पर्याप्त, उत्तर, बस यह कि वे आपके विचारों में प्रवेश करें। उस सूची में प्रविष्टियों के अलावा kdb सिस्टम ( kx.com ) है, हालांकि यह मुफ़्त से दूर है।
उच्च प्रदर्शन मार्क

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

संपादन का प्रश्न जो मैंने अभी तक माना है उसे जोड़ने के लिए
फ्लाइंगमिग

प्रश्न: क्या आपको सभी डेटा संग्रहीत करने की आवश्यकता है? क्या समय के साथ डेटा क्षय हो सकता है और / या फ्लोट-आधारित श्रृंखला के लिए सटीक स्तर का कुछ स्वीकार्य स्तर है?
जे ट्राना

1
@ मोइनुद्दीन-क्वाड्री I ने तालिका प्रारूप का उपयोग करके मासिक एचडीएफ 5 फ़ाइलों द्वारा समर्थित पांडा डेटाफ्रेम वस्तुओं का उपयोग करके समाप्त किया। प्रणाली एक वर्ष से अधिक समय से चल रही है और एसएसडी डिस्क का उपयोग नहीं करते हुए भी बहुत स्थिर और तेज दिखाया गया है। मैं उस समय एक उत्तर के रूप में सभी का लिखने का प्रयास करूंगा। मुझे लगता है कि पीएम स्वतंत्र हैं।
फ्लाइंगमिग'

जवाबों:


5

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

आपको यह अंदाजा लगाने के लिए कि यह कितना अच्छा है, जब ग्रेफाइट पहली बार ऑर्बिट्ज में उत्पादन में लाया गया था, तो यह प्रति मिनट 160,000 मीट्रिक को संभाल रहा था ।


सुझाव के लिए धन्यवाद, लेकिन मेरी समझ से कानाफूसी फिट नहीं होती है क्योंकि इसकी परिशुद्धता दूसरी है जब मुझे मिलीसेकंड सटीक की आवश्यकता होती है और जैसा कि आपने सही बताया है, मेरे पास स्ट्रिंग डेटा के साथ-साथ जो संग्रहीत नहीं किए जा सकते हैं।
फ्लाइंगमिग

1
@flyingmig इतनी तेजी से कानाफूसी मत लिखो। इसके टाइमस्टैम्प यूनिक्स-एपोच मूल्य हैं। और प्रश्न में वर्णित "स्ट्रिंग डेटा" आपको एनम की तरह लगता है, और जिन्हें आमतौर पर छोटे पूर्णांक मानों के रूप में संग्रहीत किया जाता है।
रॉस पैटरसन

सियर्स कार्बन / ग्रेफाइट / सेरेस का उपयोग प्रति मिनट 4M + अनूठे डेटापॉइंट्स को स्टोर करने के लिए कर रहा है। यह सही नहीं है, और इसके लिए ग्रेफाइट क्लस्टरिंग और एसएसडी की आवश्यकता होती है, लेकिन यह काम करता है। अन्य सभी समाधान इस स्तर तक स्केलेबल नहीं हैं, कि हमने पाया है, लेकिन अगर आपके पास विचार हैं, तो झिझकने के लिए स्वतंत्र महसूस करें।
केविन जे। चावल

3

InfluxDB Go में लिखा एक ओपन सोर्स डेटाबेस है। यह विशेष रूप से टाइम सीरीज़ डेटा को संभालने के लिए लिखा गया है, और उन्होंने बहुत बेहतर प्रदर्शन बनाम कैसेंड्रा के बेंचमार्क प्रकाशित किए हैं :

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


2

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

मैंने अपना स्वयं का समय श्रृंखला डेटाबेस बनाने के बारे में एक श्रृंखला लिखी है, आप उस पर एक नज़र डालना चाहते हैं:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.