बड़ी संख्या में कॉलम स्टोर करने का एक अच्छा तरीका क्या है?


18

मुझे अपने डेटाबेस में इस डेटा को संग्रहीत करने का निर्णय लेने में समस्या है। सबसे अच्छा तरीका यह करने के लिए कोई सुझाव? मुझे डेटाबेस के बारे में बहुत कुछ पता नहीं है, मैं जोड़ सकता हूं।

मेरे पास फ़ॉर्मेट किए गए डेटा हैं जैसे कि, लेकिन 4 के बजाय, कॉलम की संख्या लगभग 240 है, इसलिए प्रत्येक तिथि में 240 अद्वितीय मान जुड़े हुए हैं:

Date/Time 200,00 202,50 205,00  
2010.11.12  13:34:00  45,8214 43,8512  41,5369   
2010.11.12  13:35:00  461,9364  454,2612  435,5222 

इसके अलावा, पंक्तियाँ DataSites से जुड़ी हैं।

मेरा पहला विचार एक तालिका जैसा होना था: DataID (pk), DataSiteID, ParameterID, Date, Value, DataSite, Parameter और Date पर एक इंडेक्स के साथ। ParameterID एक अन्य तालिका को संदर्भित करता है जो इनपुट कॉलम हेडर (200,00 202,50 205,00 ...) को संग्रहीत करता है।

मेरा दूसरा विचार बस एक तालिका था जिसमें सभी 240-विषम कॉलम थे। मैं कुछ अन्य तरीकों के साथ आया हूं, लेकिन वे बहुत असंतोषजनक भी हैं।

मेरे पहले समाधान में जो समस्या है (इतनी बड़ी समस्या नहीं है, लेकिन मुझे यह पसंद नहीं है), यह है कि दिनांक और डेटासाइट उस इनपुट पंक्ति में सभी 240 मानों के लिए दोहराया जा रहा है, इसलिए यह काफी थोड़ा उपयोग करता है अतिरिक्त स्थान की।

(उपर्युक्त पाठ प्रारूप में) आने वाले वर्ष में लगभग 40 जीबी डेटा होगा, और डेटा डेटासाइट, पैरामीटर और दिनांक द्वारा खोजा जाएगा। आने वाले डेटा की मात्रा एक या एक वर्ष में सबसे अधिक चौगुनी होगी।

कोई अच्छा विचार? धन्यवाद, जेम्स

संपादित करें: यह समय श्रृंखला डेटा है, जिसमें कॉलम अलग-अलग तरंग दैर्ध्य पर मापे जाते हैं। डेटा का विश्लेषण तरंगदैर्घ्य की अपेक्षाकृत संकीर्ण सीमा के भीतर किया जाना चाहिए। भविष्य में किसी बिंदु पर अतिरिक्त तरंग दैर्ध्य भी जोड़ा जा सकता है।

संपादित करें: उत्तर के लिए धन्यवाद दोस्तों, मैं वास्तव में इसकी सराहना करता हूं :) मुझे लगता है कि मुझे 500 जीबी या परीक्षण डेटा के साथ कुछ प्रयोग चलाने का समय मिल सकता है। मैं किसी भी निष्कर्ष के साथ वापस पोस्ट करूँगा;)


2
Im स्तंभों के नामकरण से अनुमान लगा रहा है कि यह किसी प्रकार का अवलोकन समय श्रृंखला डेटा है। यदि यह विज्ञान डेटा है, तो मैं यह देखना चाहूंगा कि क्या विज्ञान अनुशासन में उनके डेटा को व्यवस्थित करने के विशिष्ट तरीके हैं, या बहुत कम से कम, विज्ञान के उपयोग के मामले क्या हैं जो डेटा का उपयोग करते हैं।
जो

यह वास्तव में समय श्रृंखला डेटा है :) मूल पोस्ट को थोड़ी अधिक जानकारी के साथ संपादित किया गया है।
जेम्स

जवाबों:


10

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

यदि यह डेटा विश्लेषण के लिए कम हो रहा है, तो आप इसे अपने प्रश्न में बताए अनुसार सामान्य करना चाह सकते हैं।


6

मेरे पास आपके लिए एक समान स्थिति थी, 30-50gb के साथ 257 क्षेत्र एक वर्ष में आ रहे थे। मैंने इसे SQL सर्वर में एक सरल, एक लंबे बड़े लड़के की मेज पर रखते हुए समाप्त कर दिया। मेरा डेटा काफी हद तक सही था लेकिन मुख्यतः तारीख पर और इसने अच्छा काम किया।

मैं तार्किक छोटे चक (50 या तो के समूहों) में डेटा को तोड़ सकता था, लेकिन इस मामले में वास्तव में इसका बहुत फायदा नहीं था इसलिए मैंने खुद को परेशान होने से बचा लिया।

अगर मैं कल्पना कर रहा था तो मैं एक NoSQL विकल्प पर विचार कर सकता हूं जो कि सिद्धांत में बेहतर है, लेकिन मिशन महत्वपूर्ण डेटा के साथ नई चीजों की कोशिश करना हमेशा नसों के लिए महान नहीं होता है।


6

इसलिए, अपने स्वयं के प्रश्न का जवाब देने के लिए (परियोजना अंत में कभी आगे नहीं बढ़ी), जब मैंने कुछ खाली समय प्राप्त करने में कामयाबी हासिल की, तो मैंने एक परीक्षण तालिका 500GB डेटा के साथ भरी तालिका के साथ व्यवस्था की:

मेरा पहला विचार एक तालिका जैसा होना था: DataID (pk), DataSiteID, ParameterID, Date, Value, DataSite, Parameter और Date पर एक इंडेक्स के साथ। ParameterID एक अन्य तालिका को संदर्भित करता है जो इनपुट कॉलम हेडर (200,00 202,50 205,00 ...) को संग्रहीत करता है।

डेटाबेस सेटअप मानक PostgreSQL था जो एक पुरानी दोहरी कोर मशीन पर 3 जी रैम के साथ स्थापित किया गया था। मैंने लगभग एक दर्जन अलग-अलग प्रश्नों को डेटासाइट तिथि और पैरामीटर के डेटा का चयन करते हुए चलाया, औसत डेटा 1 घंटे की समयावधि, 1 दिन की समय अवधि और डेटा के नए विखंडन को सम्मिलित किया। स्मृति से, सभी प्रश्नों को निष्पादित करने में एक सेकंड से भी कम समय लगा। यह निश्चित रूप से मुझे उम्मीद से काफी तेज था और काफी उपयोगी था। एक चीज जिसके बारे में मैंने नहीं सोचा था, वह यह था कि तालिका को इस तरह अनुक्रमित करने के साथ-साथ सूचकांक फ़ाइल भी लगभग 500gb थी, इसलिए इसके बजाय 240 स्तंभ चौड़ी तालिका होने से निश्चित रूप से बहुत सारे डिस्क स्थान बच जाएंगे।


लेकिन अंतरिक्ष को बचाने के दौरान, यह सबसे अधिक सुरक्षित रूप से अनुक्रमण की गति को प्रभावित करेगा। यदि आपको मौका मिले तो आप फिर से कोशिश कर सकते हैं और इसे आगे बढ़ा सकते हैं।
jcolebrand

3

Postgres में मैं इसे एक सरणी प्रकार या Oracle में एक संस्करण के साथ शान्तिपूर्वक हल करूंगा ।


यह काम करेगा, एकमात्र पकड़ यह है कि मुझे उस डेटासाइट के लिए कॉलम हेडर को कहीं स्टोर करने की आवश्यकता होगी, क्योंकि इसके बिना डेटा का कोई मतलब नहीं है, और वे भिन्न हो सकते हैं / बदल सकते हैं (वे करने वाले नहीं हैं, लेकिन मैं ' देखा सूअरों से पहले उड़ रहे हैं ...)
जेम्स

मेरी मुख्य डेटा तालिका में उस स्थिति में मेरे पास "संस्करण" नामक एक और कॉलम होगा, और कॉलम हेडिंग की एक सरणी के लिए एक और टेबल मैपिंग संस्करण (इसलिए सरणी अनुक्रमित डेटा सरणी से मेल खाता है)।
गयुस

3

मुझे नहीं पता कि यह आपकी समस्या के लिए उपयोगी है, लेकिन स्तंभों के लिए मुझे उन अनुरोधों पर प्रत्यक्ष अनुरोध करने की आवश्यकता नहीं है (जो मैं अपनी WHERE की स्थिति में कभी नहीं डालता), और जो केवल जानकारीपूर्ण हैं जब मैं कुछ के बारे में सभी जानकारी चाहता हूं विशिष्ट पंक्तियों, मैं उन्हें एक ब्लॉग क्षेत्र JSON स्वरूपित में संयोजित करता हूं।


इसके अलावा, उस बूँद को संपीड़ित करें। क्लाइंट में संपीड़न करें, ताकि आप नेटवर्क और सर्वर पर बोझ न जोड़ रहे हों।
रिक जेम्स

2

मैं संभवत: क्वेरिड पैरामीटर_ड्स के वितरण पर निर्भर डिजाइन का अंतिम निर्णय करूंगा। यही है, अगर कुछ पैरामीटर_एड्स हैं जो लगभग अनन्य रूप से क्वियर हैं, तो मैं उनके मूल्यों को एक हॉट टेबल और शेष मूल्यों को एक और ठंडे टेबल में डाल दूंगा

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

खैर, इसे पढ़ने के बाद, मैं शायद समानांतर में एक निराशा के लिए दोनों दृष्टिकोण करूंगा।


2

मैं प्रश्न को फिर से पढ़ रहा था - अगर मेरे पास यह सही है, तो प्रत्येक रिकॉर्ड में आपको इनपुट के रूप में मिलता है, अलग-अलग मानों को ट्रैक किया जा रहा है (पैरामीटर के आधार पर):

ParameterID एक अन्य तालिका को संदर्भित करता है जो इनपुट कॉलम हेडर (200,00 202,50 205,00 ...) को संग्रहीत करता है।

... मुझे इस बारे में पर्याप्त जानकारी नहीं है कि आप डेटा के साथ कैसे बातचीत कर रहे हैं, लेकिन मैं एक और विकल्प के साथ जाना चाहूंगा - प्रत्येक पैरामीटर आईडी के लिए एक अलग तालिका हो, और फिर यदि आवश्यक हो तो एक दृश्य देखें दिनांक और स्थान के अनुसार विभिन्न विभिन्न मापदंडों को व्यापक (240 स्तंभ) तालिका में शामिल करें; यदि यह DataID को दृश्य में सुलभ रखने के लिए महत्वपूर्ण था, तो आप एक के UNIONबजाय एक का उपयोग कर सकते हैं JOIN, लेकिन स्तंभों को आबादी वाले स्थान पर रखा जाएगा।


पैरामीटर से मेरा मतलब है कि कॉलम हेडर, या वेवलेंथ। मैंने इसे इस तरह से करने के बारे में सोचा था, लेकिन 240 टेबल होने पर यह थोड़ा क्लिंक लगता है :)
जेम्स

@ जेम्स ... यह 240 टेबल नहीं होना चाहिए ... केवल यूनीक ParameterIDएस के रूप में कई । यह दृश्य तब व्यापक होगा, जब आपके पास मापक तरंगदैर्घ्य की संख्या होगी (साथ ही स्वतंत्र चर)। ... आप यह देखना चाहते होंगे कि OPeNDAP समुदाय चीजों को कैसे संभालता है, क्योंकि वे समय श्रृंखला डेटा के लिए तैयार हैं। मैं जिन डेटा से निपटता हूं, उनमें से अधिकांश चित्र (टेलीस्कोप, कोरोनोग्राफ, मैग्नेटोग्राफ) हैं, इसलिए उनका सामान मेरे काम में नहीं आता है, इसलिए मुझे नहीं पता कि वे भंडारण कैसे संभालते हैं। (यह सिर्फ HDF / CDF / NetCDF / ASCII टेबल हो सकता है)।
जो

दुर्भाग्य से वहाँ 240-ish अद्वितीय पैरामीटर हैं :( लिंक के लिए धन्यवाद :)
जेम्स

@ नाम: यह भी, क्या यह विकिरण डेटा है? यदि हां, तो आप LISIRD में लोगों से पूछना चाहते हैं ... मुझे लगता है कि वे इसे प्रयोग द्वारा डेटा के अलग-अलग सेटों में अलग करते हैं, और मुझे नहीं पता कि वे इसे डेटाबेस या सिर्फ फ्लैट फ़ाइलों में रखते हैं।
जो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.