सामान्य तौर पर, इस तरह के संरचित डेटासेट के लिए मुझे संदेह है कि आप एक कस्टम डेटा प्रारूप लिख सकते हैं जो कि अधिकांश दैनिक कार्यों के लिए तेज़ था (यानी छोटे डेटा एक मनमाने समय से खींचता है)। मानक DB टूल में जाने का लाभ कुछ एक्स्ट्रा में होने की संभावना है, उदाहरण के लिए तदर्थ प्रश्न, एकाधिक पहुंच, प्रतिकृति, उपलब्धता आदि। यह मानकों पर आधारित डेटा स्टोर को बनाए रखने के लिए सहायता किराए पर लेना भी आसान है।
अगर मुझे उस डेटा को संग्रहीत करने के लिए एक डेटाबेस स्थापित करने के लिए कहा गया था, तो मैं निम्नलिखित कार्य करूंगा:
प्रस्तावित स्कीमा
(1) कोर डेटा को कई (1000) व्यक्तिगत तालिकाओं में रखा गया है, जिनमें से प्रत्येक में दो कॉलम हैं:
- समय: या तो SQL DATETIME डेटा प्रकार या कुछ युग से एक संख्यात्मक प्रकार (यह प्राथमिक कुंजी है)
- मूल्य: आपके डेटा के लिए उपयुक्त टाइप किया गया। मैं एकल परिशुद्धता फ्लोट के लिए डिफ़ॉल्ट होगा, हालांकि वित्तीय लेनदेन के लिए एक निश्चित-बिंदु डेटा प्रकार अधिक उपयुक्त हो सकता है। यह शायद अनइंडेक्सिड है।
ये तालिकाएँ काफी बड़ी हो जाएंगी, और आप उन्हें वर्ष (उदाहरण के लिए) मैन्युअल रूप से विभाजित करना चाह सकते हैं। लेकिन आपको सिस्टम प्रदर्शन और धुन को उचित रूप से जांचना होगा।
इन तालिकाओं को अद्वितीय नामों की आवश्यकता है, और कुछ विकल्प हैं। वे मानव पठनीय (उदाहरण के लिए nyse_goog_dailyhighs_2010) या (मेरी प्राथमिकता) यादृच्छिक हो सकते हैं। किसी भी तरह मेटाडेटा तालिकाओं के एक सेट की आवश्यकता होती है, और यादृच्छिक तालिका नाम डेवलपर्स को नाम में कुछ भी संदर्भित करने से रोकते हैं जो अनुमान लगाने का मतलब नहीं था।
(2) मेटा डेटा को अलग-अलग तालिकाओं में संग्रहीत किया जाता है, जैसा कि आवेदन द्वारा आवश्यक है :
मेटाडेटा का ट्रैक रखने के लिए एक अतिरिक्त टेबल या सेट की आवश्यकता होती है। इन तालिकाओं में एक्सचेंज, इंस्ट्रूमेंट, वैल्यू, फ़्रीक्वेंसी, डेट रेंज, प्रोविडेंस (डेटा कहां से आया), और आपको जो कुछ भी चाहिए, उसके बारे में डेटा होगा। ये डेटा टेबल के नाम पर मैप किए जाते हैं।
यदि पर्याप्त डेटा है, तो यह लुकअप वास्तव में एक तालिका नाम और डेटाबेस नाम प्रदान कर सकता है, जिससे एक प्रकार का स्व-कार्यान्वित डेटा शार्डिंग (यदि यह शब्द का सही उपयोग है) की अनुमति देता है। लेकिन मैं इसे रिजर्व में रखूंगा।
फिर एप्लिकेशन लेयर में मैं मेटाडेटा तालिकाओं को यह निर्धारित करने के लिए क्वेरी करूँगा कि मेरा डेटा कहाँ स्थित था, और फिर अपने डेटा को प्राप्त करने के लिए बड़े डेटा तालिकाओं पर अपेक्षाकृत सरल प्रश्न करें।
लाभ:
मेरा (अपेक्षाकृत सीमित) अनुभव यह है कि डेटाबेस आमतौर पर बड़ी संख्या में बड़ी तालिकाओं की तुलना में बड़ी संख्या में छोटे तालिकाओं को आसानी से संभाल सकते हैं। यह दृष्टिकोण आसान रखरखाव (जैसे पुराने डेटा को शुद्ध करना, एक भ्रष्ट तालिका का पुनर्निर्माण, बैकअप से पुन: लोड करना, एक नई इकाई जोड़ना) सक्षम करता है। यह पूरी तरह से विभिन्न प्रकार के डेटा को डिकॉउंट करता है, यदि (उदाहरण के लिए) आपके पास विभिन्न दरों पर डेटा है, या विभिन्न डेटा प्रकारों की आवश्यकता है।
इस स्किनी टेबल कॉन्सेप्ट को फास्ट डिस्क एक्सेस की अनुमति भी देनी चाहिए, जिस पर मुझे संदेह है कि यह सबसे सामान्य क्वेरी है, एक एकल इकाई से डेटा की एक आकस्मिक सीमा। अधिकांश डेटा एप्लिकेशन डिस्क I / O सीमित हैं, इसलिए यह विचार करने योग्य है। जैसा कि एक टिप्पणीकार पहले ही निहित कर चुका है, यह मेरा एक कॉलम-ओरिएंटेड डेटाबेस के लिए एक आदर्श एप्लिकेशन है, लेकिन मुझे अभी तक एक कॉलम ओरिएंटेड उत्पाद नहीं मिला है जो मेरे लिए अपने करियर को दांव पर लगाने के लिए पर्याप्त मुख्यधारा हो। यह स्कीमा काफी करीब है।
नुकसान:
आपके डिस्क स्थान का लगभग आधा भाग स्टैम्पिंग के समय के लिए समर्पित है, जब टेबल के कॉलम में बिल्कुल स्पष्ट रूप से 100 या 1000 के तालिकाओं का एक ही डेटा होगा। (वास्तव में यह एक आवश्यकता है अगर आप आसान टेबल जॉइन करना चाहते हैं)।
तालिका नामों को संग्रहीत करने और गतिशील लुकअप करने के लिए बहुत अधिक एप्लिकेशन जटिलता और स्ट्रिंग संचालन की आवश्यकता होती है, जो मुझे क्रैंग बनाता है। लेकिन यह अभी भी विकल्प (नीचे चर्चा की गई) से बेहतर लगता है।
बातें:
अपने समय क्षेत्र में गोलाई से सावधान रहें। आप अपने मूल्यों को जोड़कर (यदि उपयुक्त हो) सक्षम करने के लिए पर्याप्त चाहते हैं, लेकिन सटीक रूप से पर्याप्त होना चाहिए।
समय-क्षेत्र और दिन के उजाले की बचत के समय से सावधान रहें। इनका परीक्षण कठिन है। मैं डेटा स्टोर (जो मुझे अलोकप्रिय बना सकता है) पर एक यूटीसी आवश्यकता लागू करेगा और आवेदन में रूपांतरण संभाल सकता है।
बदलाव:
कुछ भिन्नताएँ जिन पर मैंने विचार किया है वे हैं:
डेटा फोल्डिंग: यदि समय समान रूप से दूरी है, तो एक टाइमस्टैम्प कॉलम और (उदाहरण के लिए) 10 डेटा कॉलम का उपयोग करें। टाइमस्टैम्प अब पहले डेटा कॉलम के समय को संदर्भित करता है, और othe डेटा कॉलम को समान रूप से उस टाइमस्टैम्प और अगले एक के बीच स्थान दिया जाता है। यह महत्वपूर्ण संग्रहण और / या एप्लिकेशन जटिलता की कीमत पर स्टोरस्टैंप को स्टोर करने के लिए उपयोग किए जाने वाले बहुत सारे स्टोरेज को बचाता है। कंटीजेंट रेंज, सिंगल यूनिट क्वेश्चन के लिए अब डिस्क डिस्क की कम आवश्यकता होती है।
मल्टी-प्लेक्सिंग: यदि एक ही समय श्रृंखला का उपयोग करने के लिए कई बार श्रृंखला जानी जाती है, तो ऊपर वर्णित एक टाइमस्टैम्प और (उदाहरण के लिए) 10 डेटा कॉलम का उपयोग करें। लेकिन अब प्रत्येक स्तंभ एक अलग समय श्रृंखला का प्रतिनिधित्व करता है। इसके लिए मेटाडेटा तालिका का अद्यतन आवश्यक है, जो तालिका और स्तंभ नाम में लुकअप नहीं है। भंडारण स्थान कम हो गया है। क्वेरीज़ सरल रहें। हालांकि सन्निहित सीमा, एकल इकाई प्रश्नों को अब अधिक डिस्क एक्सेस की आवश्यकता है।
मेगा-टेबल: "मल्टी-प्लेक्सिंग" कॉन्सेप्ट को चरम पर ले जाएं, और सभी डेटा को एक ही बार, एक बार श्रृंखला प्रति कॉलम में डालें। इसके लिए बड़ी मात्रा में सन्निहित सीमा, एकल इकाई क्वेरी के लिए डिस्क एक्सेस की आवश्यकता होती है, और यह एक बुरा सपना है। उदाहरण के लिए एक नई इकाई को जोड़ने के लिए अब कई टीबी टेबल पर एक मॉडिबल टेबल कमांड की आवश्यकता होती है।
इस प्रारूप पर अतिरिक्त चर्चा के लिए, MySQL में बहुत अधिक कॉलम देखें:
पूरी तरह से सामान्यीकृत तालिका:
कई 2-स्तंभ तालिकाओं का उपयोग करने के बजाय, आप एक, तीन-स्तंभ तालिका का उपयोग कर सकते हैं, जहां कॉलम समय, डेटा और मान हैं। अब आपके मेटाडेटा तालिकाओं को केवल टैब मान या स्तंभ नाम के बजाय आईडी मान देखने की आवश्यकता है, जो एप्लिकेशन परत के बजाय SQL प्रश्नों में अधिक तर्क को धक्का देने में सक्षम बनाता है।
लगभग 2/3 संग्रहण अब सामान्यीकृत कॉलम के साथ खपत किया जाता है, इसलिए यह बहुत सारे डिस्क स्थान का उपयोग करेगा।
आप तेजी से सन्निहित, एकल इकाई प्रश्नों के लिए (डेटािड, टाइमस्टैम्प) के प्राथमिक कुंजी क्रम का उपयोग कर सकते हैं। या, आप तेजी से आवेषण के लिए (टाइमस्टैम्प। डेटािड) के प्राथमिक कुंजी क्रम का उपयोग कर सकते हैं।
हालाँकि, इन विविधताओं पर विचार करने के बाद भी, मेरे अगले विकास के लिए मेरी योजना बहुत सी तालिकाओं, दो-स्तंभों की है। कि, या विधि जल्द ही किसी से भी समझदार द्वारा पोस्ट किया जाना चाहिए :)।