अरबों पंक्तियों के लिए सर्वश्रेष्ठ डेटा स्टोर


86

मुझे अरबों रिकॉर्ड (एक वर्ष के लिए ~ 3 बिलियन / महीना) के लिए डेटा के छोटे बिट्स (लगभग 50-75 बाइट्स) को स्टोर करने में सक्षम होने की आवश्यकता है।

एकमात्र आवश्यकता एक ही GUID के साथ सभी रिकॉर्ड के लिए फास्ट आवेषण और तेजी से लुकअप है। नेट से डेटा स्टोर तक पहुंचने की क्षमता।

मैं एक SQL सर्वर आदमी हूं और मुझे लगता है कि SQL सर्वर ऐसा कर सकता है, लेकिन BigTable, CouchDB, और अन्य nosql समाधानों के बारे में सभी चर्चाओं के साथ, यह एक पारंपरिक RDBS के विकल्प की तरह अधिक से अधिक लग रहा है अनुकूलन के कारण सबसे अच्छा हो सकता है वितरित प्रश्न और स्केलिंग। मैंने कैसेंड्रा की कोशिश की और .नेट लाइब्रेरी वर्तमान में संकलन नहीं करते हैं या सभी परिवर्तन के अधीन हैं (कैसेंड्रा के साथ ही)।

मैंने कई nosql डेटा स्टोर में उपलब्ध देखा है, लेकिन एक मजबूत उत्पादन के लिए तैयार प्लेटफॉर्म के रूप में मेरी जरूरतों को पूरा करने वाला नहीं मिल रहा है।

यदि आपको 36 बिलियन छोटे, फ्लैट रिकॉर्ड स्टोर करने थे, ताकि वे .net से सुलभ हों, तो क्या और क्यों चुनना होगा?


हाँ, मेरे नंबर सही हैं। वर्तमान में हमारे पास सिस्टम में आने वाला यह बहुत अधिक डेटा है, लेकिन हम इसे एकत्रित करते हैं और केवल कुल गणनाओं को संग्रहीत करते हैं, इसलिए हम प्रति-रिकॉर्ड डेटा खो देते हैं और केवल प्रति घंटा डेटा बनाए रखते हैं। व्यावसायिक आवश्यकताओं के कारण, हम प्रत्येक रिकॉर्ड को बनाए रखना चाहते हैं क्योंकि यह मूल रूप से हुआ है और यह 3Bil पंक्तियां / माह है।
जोडी पॉवेल

आपने कुछ अच्छे प्रश्न उठाए हैं। जवाब हैं: 95% अप टाइम पर्याप्त है - डेटा पहले से ही एक चर राशि में देरी कर रहा है, इसलिए मुझे इस तथ्य के बाद इसे सिंक करने की आवश्यकता होगी, वैसे भी थोड़े समय के लिए नीचे होना एक सौदा ब्रेकर नहीं है। आवेषण खोने या यहां तक ​​कि हजारों आवेषण दुनिया का अंत नहीं हैं। हालांकि एक दिन का डेटा खोना बहुत बुरा होगा। संगति या तो महत्वपूर्ण नहीं है। मूल रूप से एक दिन में 30Mil पंक्तियाँ डालने के बाद, मुझे एक ही GUID (शायद 20 पंक्तियों) के साथ सभी पंक्तियों को लाने की आवश्यकता है और निश्चित रूप से सुनिश्चित करें कि मैं उन सभी को वापस पा लूंगा।
जॉडी पॉवेल

क्या आप दैनिक / प्रति घंटा अनुसूचित बैच की नौकरियों में एक दिन में 30M पंक्तियों को डंप करते हैं, या वे एक समय में एक निरंतर प्रवाह में आते हैं?
रेमस रूसु

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

यह SSIS और SQL सर्वर के लिए ETL जॉब जैसा लगता है। वे ETL के लिए 2TB / घंटे की अपलोड गति से अधिक का विश्व रिकॉर्ड रखते हैं: blogs.msdn.com/sqlperf/archive/2008/02/27/etl-world-record.aspx
रेमस

जवाबों:


102

डेटा का ~ 3.5TB भंडारण और 1K / sec 24x7 के बारे में सम्मिलित करना, और यह भी निर्दिष्ट दर पर क्वेरी करना, यह SQL सर्वर के साथ संभव है, लेकिन अधिक प्रश्न हैं:

  • इसके लिए आपके पास क्या उपलब्धता की आवश्यकता है? 99.999% अपटाइम, या 95% पर्याप्त है?
  • आपके पास क्या विश्वसनीयता की आवश्यकता है? क्या आपको $ 1M की लागत डालने की आवश्यकता नहीं है?
  • आपके पास क्या पुनर्प्राप्ति की आवश्यकता है? यदि आप डेटा का एक दिन ढीला करते हैं, तो क्या इससे कोई फर्क पड़ता है?
  • आपको क्या आवश्यकता है? क्या अगली रीड पर दृश्यमान होने की गारंटी देने की आवश्यकता है?

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

तो जाहिर है कि आपने इनमें से कुछ आवश्यकताओं को पहले ही पूरा कर लिया है। वहाँ एक अच्छा दृश्य गाइड है जो नॉस्केल सिस्टम के विज़ुअल गाइड में 'पिक 2 ऑफ़ 3' प्रतिमान पर आधारित नोसक्ल प्रसाद की तुलना करता है :

nosql तुलना

ओपी टिप्पणी के बाद अद्यतन करें

SQL सर्वर के साथ यह सीधे आगे कार्यान्वयन होगा:

  • एक एकल तालिका क्लस्टर (GUID, समय) कुंजी। हां, खंडित होने जा रहा है , लेकिन विखंडन रीड-आहेड्स को प्रभावित करता है और केवल महत्वपूर्ण रेंज स्कैन के लिए रीड-आहेड की आवश्यकता होती है। चूंकि आप केवल विशिष्ट GUID और दिनांक सीमा के लिए क्वेरी करते हैं, इसलिए विखंडन अधिक मायने नहीं रखेगा। हां, एक विस्तृत कुंजी है, इसलिए गैर-पत्ती पृष्ठों में खराब कुंजी घनत्व होगा। हां, यह खराब भरण कारक को जन्म देगा। और हाँ, पेज विभाजन हो सकते हैं। इन समस्याओं के बावजूद, आवश्यकताओं को देखते हुए, अभी भी सबसे बेहतर संकुलन विकल्प है।
  • समय के अनुसार तालिका को विभाजित करें ताकि आप स्वचालित स्लाइडिंग विंडो के माध्यम से, समाप्त रिकॉर्ड के कुशल विलोपन को लागू कर सकें । GUID क्लस्टरिंग द्वारा शुरू किए गए खराब भरण कारक और विखंडन को समाप्त करने के लिए पिछले महीने के एक ऑनलाइन इंडेक्स विभाजन के पुनर्निर्माण के साथ इसे संवर्धित करें।
  • पृष्ठ संपीड़न सक्षम करें। चूंकि पहले GUID द्वारा क्लस्टर किए गए प्रमुख समूह, GUID के सभी रिकॉर्ड एक-दूसरे के बगल में होंगे, जिससे पृष्ठ संपीड़न को शब्दकोश संपीड़न को तैनात करने का एक अच्छा मौका मिलेगा।
  • आपको लॉग फ़ाइल के लिए एक तेज़ IO पथ की आवश्यकता होगी। आप उच्च थ्रूपुट में रुचि रखते हैं, 1K आवेषण / सेकंड के साथ रखने के लिए लॉग के लिए कम विलंबता पर नहीं, इसलिए स्ट्रिपिंग एक जरूरी है।

विभाजन और पृष्ठ संपीड़न प्रत्येक में एंटरप्राइज़ संस्करण SQL सर्वर की आवश्यकता होती है, वे मानक संस्करण पर काम नहीं करेंगे और आवश्यकताओं को पूरा करने के लिए दोनों काफी महत्वपूर्ण हैं।

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

तो यह है कि मैं इसे SQL सर्वर में कैसे करूंगा। अच्छी खबर यह है कि जिन समस्याओं का आप सामना करेंगे, वे अच्छी तरह से समझी गई हैं और समाधान ज्ञात हैं। जरूरी नहीं कि इसका मतलब यह है कि कैसंड्रा, बिगटेबल या डायनमो के साथ आप क्या हासिल कर सकते हैं। मैं किसी को अपने मामले में बहस करने के लिए no-sql-ish चीजों में अधिक जानकार होने दूँगा।

ध्यान दें कि मैंने कभी भी प्रोग्रामिंग मॉडल, .net सपोर्ट और ऐसा उल्लेख नहीं किया है। मुझे ईमानदारी से लगता है कि वे बड़ी तैनाती में अप्रासंगिक हैं। वे विकास की प्रक्रिया में बहुत अंतर करते हैं, लेकिन एक बार तैनात होने से कोई फर्क नहीं पड़ता कि विकास कितना तेज था, अगर ओआरएम ओवरहेड मारता है :)


मैंने नाथन की साइट को हॉट लिंक कर दिया है, लेकिन यह स्लैशडॉट फ्रंट पेज नहीं है;)
रेमस रुसानु

@RemusRusanu: dba.se माइग्रेशन को देखते हुए। बस आपको तैयार करने के लिए :-) और +1
gbn

Microsoft SQL Server 2016 के रूप में, एंटरप्राइज़ संस्करण को अब तालिका विभाजन के लिए आवश्यक नहीं है क्योंकि तालिका विभाजन अब SQL Server 2016 के लगभग सभी संस्करणों में उपलब्ध है।
TChadwick

17

आम धारणा के विपरीत, NoSQL प्रदर्शन, या यहां तक ​​कि स्केलेबिलिटी के बारे में नहीं है। यह मुख्य रूप से तथाकथित ऑब्जेक्ट-रिलेशनल प्रतिबाधा बेमेल को कम करने के बारे में है, लेकिन क्षैतिज स्केलेबिलिटी बनाम आरडीबीएमएस के अधिक विशिष्ट ऊर्ध्वाधर स्केलेबिलिटी के बारे में भी है ।

फास्ट आवेषण और फास्ट लुकअप की सरल आवश्यकता के लिए, लगभग कोई भी डेटाबेस उत्पाद करेगा। यदि आप संबंधपरक डेटा जोड़ना चाहते हैं, या जुड़ना चाहते हैं, या आपके पास कोई जटिल लेनदेन संबंधी तर्क या बाधा है, जिसे आपको लागू करने की आवश्यकता है, तो आप एक रिलेशनल डेटाबेस चाहते हैं। कोई NoSQL उत्पाद की तुलना नहीं कर सकता है।

यदि आपको योजनाबद्ध डेटा की आवश्यकता है, तो आप दस्तावेज़-उन्मुख डेटाबेस जैसे MongoDB या CouchDB के साथ जाना चाहते हैं। ढीला स्कीमा इनमें से मुख्य ड्रा है; मैं व्यक्तिगत रूप से MongoDB पसंद करता हूं और कुछ कस्टम रिपोर्टिंग सिस्टम में इसका उपयोग करता हूं। मुझे यह बहुत उपयोगी लगता है जब डेटा आवश्यकताओं में लगातार बदलाव हो रहा है।

अन्य मुख्य NoSQL विकल्प को BigTable या Cassandra जैसे की-वैल्यू स्टोर वितरित किए जाते हैं। ये विशेष रूप से उपयोगी हैं यदि आप कमोडिटी हार्डवेयर चलाने वाली कई मशीनों में अपने डेटाबेस को स्केल करना चाहते हैं। वे सर्वरों पर भी ठीक-ठाक काम करते हैं, जाहिर है, लेकिन हाई-एंड हार्डवेयर के साथ-साथ SQL सर्वर या Oracle या वर्टिकल स्केलिंग के लिए डिज़ाइन किए गए अन्य डेटाबेस का लाभ नहीं उठाते हैं , और जाहिर है, वे संबंधपरक नहीं होते हैं और सामान्यीकरण लागू करने के लिए अच्छे नहीं होते हैं। या अड़चन है। इसके अलावा, जैसा कि आपने देखा है, .NET समर्थन सबसे अच्छे स्थान पर है।

सभी संबंधपरक डेटाबेस उत्पाद एक सीमित प्रकार के विभाजन का समर्थन करते हैं। वे BigTable या अन्य DKVS सिस्टम की तरह लचीले नहीं हैं, वे सैकड़ों सर्वरों में आसानी से विभाजन नहीं करते हैं, लेकिन यह वास्तव में ऐसा नहीं लगता है जैसा आप देख रहे हैं। वे अरबों में रिकॉर्ड की गिनती को संभालने में काफी अच्छे हैं, जब तक आप डेटा को ठीक से इंडेक्स और सामान्य करते हैं, डेटाबेस को शक्तिशाली हार्डवेयर (विशेष रूप से एसएसडी यदि आप उन्हें बर्दाश्त कर सकते हैं) पर चला सकते हैं, और 2 या 3 या 5 के बीच विभाजन कर सकते हैं शारीरिक डिस्क यदि ज़रूरी।

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


11

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

36 बिलियन, 3 बिलियन प्रति माह, यानी लगभग 100 मिलियन प्रति दिन, 4.16 मिलियन प्रति घंटे, ~ 70k पंक्तियों प्रति मिनट, 1.1k पंक्तियाँ 12 महीने के लिए एक निरंतर तरीके से सिस्टम में आ रही हैं, कोई डाउन टाइम नहीं मानते हुए।

उन आंकड़ों को एक लंबे मार्जिन से असंभव नहीं है, मैंने बड़े सिस्टम किए हैं, लेकिन आप दोहरी जांच करना चाहते हैं कि वास्तव में आपके लिए कितनी मात्रा है - बहुत कम ऐप्स में वास्तव में यह मात्रा है।

स्टोर करने / प्राप्त करने और काफी महत्वपूर्ण पहलू के बारे में आपने जो उल्लेख नहीं किया है, वह पुराने डेटा का बूढ़ा होना है - हटाना मुफ्त नहीं है।

सामान्य तकनीक देख रही है कि विभाजन हो रहा है, हालांकि, GUID आधारित लुक / रिट्रीवल एक खराब प्रदर्शन का परिणाम होगा, यह मानते हुए कि आपको पूरे 12 महीने की अवधि में हर मिलान मूल्य प्राप्त करना होगा। आप GUID कॉलम पर एक क्लस्टर किए गए अनुक्रमणिका को रख सकते हैं, आपको पढ़ने / लिखने के लिए आपका संबद्ध डेटा क्लस्टर मिलेगा, लेकिन उन मात्राओं और सम्मिलन की गति पर, विखंडन समर्थन करने के लिए बहुत अधिक होगा, और यह फर्श पर गिर जाएगा।

मैं यह भी सुझाव दूंगा कि आपको बहुत ही सभ्य हार्डवेयर बजट की आवश्यकता है यदि यह ओएलटीपी प्रकार की प्रतिक्रिया की गति के साथ एक गंभीर अनुप्रयोग है, जो कि कुछ अनुमानित अनुमानों द्वारा है, 2.7TB डेटा के बारे में बहुत कम ओवरहेड अनुक्रमण बुद्धिमान मानते हैं।

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


3
जैव सूचना विज्ञान में अरब-पंक्ति डेटासेट असामान्य नहीं हैं। लेकिन वे अक्सर फ्लैट फ़ाइलों से एक विशुद्ध रूप से स्ट्रीमिंग फैशन में निपटा रहे हैं।
एरिक गैरीसन

3
@ एरिक: स्ट्रीम प्रोसेसिंग के लिए (यानी, बस कुछ शर्तों का पता लगाने की जरूरत है, लेकिन बाद की क्वेरी के लिए डेटा को स्टोर करने की आवश्यकता नहीं है) स्ट्रीमआईनाइट जैसा कुछ किसी भी डेटाबेस से बेहतर है microsoft.com/sqlserver/2008/en/us/r2 -complex-event.aspx
रेमस

2

"मुझे अरबों रिकॉर्ड (एक वर्ष के लिए ~ 3 बिलियन / महीना) के लिए डेटा के छोटे बिट्स (लगभग 50-75 बाइट्स) को स्टोर करने में सक्षम होने की आवश्यकता है।

एकमात्र आवश्यकता एक ही GUID के साथ सभी रिकॉर्ड के लिए तेज आवेषण और तेज लुकअप है और .net से डेटा स्टोर तक पहुंचने की क्षमता है। "

मैं आपको अनुभव से बता सकता हूं कि यह एसक्यूएल सर्वर में संभव है, क्योंकि मैंने इसे 2009 की शुरुआत में किया है ... और यह अभी भी इस दिन के लिए काम कर रहा है और काफी तेज है।

तालिका को 256 विभाजनों में विभाजित किया गया था, ध्यान रखें कि यह 2005 SQL संस्करण था ... और हमने वास्तव में वही किया है जो आप कह रहे हैं, और यह है कि GUID द्वारा जानकारी के बिट्स को संग्रहीत करना और GUID द्वारा पुनः प्राप्त करना।

जब मैंने छोड़ा था तो हमारे पास लगभग 2-3 बिलियन रिकॉर्ड थे, और डेटा पुनर्प्राप्ति अभी भी काफी अच्छा था (यूआई के माध्यम से प्राप्त होने पर 1-2 सेकंड, या आरडीबीएमएस पर कम) भले ही डेटा अवधारण नीति बस के बारे में थी।

तो, लंबी कहानी संक्षेप में, मैंने GUID स्ट्रिंग से SHAT1 और 8A चार्ट (यानी कहीं-कहीं मध्य में) लिया और इसे छोटे int (0-255) के रूप में रखा और उपयुक्त विभाजन में संग्रहीत किया और प्राप्त होने पर उसी फ़ंक्शन कॉल का उपयोग किया डेटा वापस।

यदि आपको अधिक जानकारी की आवश्यकता हो तो मुझे पिंग करें ...


2

निम्न आलेख Microsoft SQL में 16 बिलियन पंक्ति तालिका के आयात और उपयोग पर चर्चा करता है । http://sqlmag.com/t-sql/adventures-big-data-how-import-16-billion-rows-single-table

लेख से:

यहाँ मेरे अनुभव से कुछ आसुत सुझाव दिए गए हैं:

  • एक परिभाषित क्लस्टर इंडेक्स वाली तालिका में आपके पास जितना अधिक डेटा है, उतना ही धीमा यह रिकॉर्ड किए गए रिकॉर्ड को आयात करने के लिए हो जाता है। कुछ बिंदु पर, यह व्यावहारिक होना बहुत धीमा हो जाता है।
  • यदि आप अपनी तालिका को सबसे छोटी संभव फ़ाइल में निर्यात करना चाहते हैं, तो इसे मूल प्रारूप बनाएं। यह ज्यादातर संख्यात्मक कॉलम वाली तालिकाओं के साथ सबसे अच्छा काम करता है क्योंकि वे चरित्र डेटा की तुलना में द्विआधारी क्षेत्रों में अधिक कॉम्पैक्ट रूप से प्रतिनिधित्व करते हैं। यदि आपका सारा डेटा अल्फ़ान्यूमेरिक है, तो आप इसे मूल प्रारूप में निर्यात करके अधिक हासिल नहीं करेंगे। अंकीय क्षेत्रों में नल की अनुमति न देना डेटा को और संकुचित कर सकता है। यदि आप किसी फ़ील्ड को अशक्त होने देते हैं, तो फ़ील्ड के बाइनरी प्रतिनिधित्व में 1-बाइट उपसर्ग होगा जिसमें यह इंगित किया जाएगा कि कितने बाइट्स डेटा का पालन करेंगे।
  • आप BCP को 2,147,483,647 से अधिक रिकॉर्ड के लिए उपयोग नहीं कर सकते क्योंकि BCP काउंटर चर 4-बाइट पूर्णांक है। मैं एमएसडीएन या इंटरनेट पर इसका कोई संदर्भ नहीं पा रहा था। यदि आपकी तालिका में
    2,147,483,647 से अधिक रिकॉर्ड हैं, तो आपको इसे चंक्स में निर्यात करना होगा
    या अपनी स्वयं की निर्यात दिनचर्या लिखनी होगी।
  • एक पूर्वनिर्मित टेबल पर एक गुच्छेदार सूचकांक को परिभाषित करने से डिस्क स्थान बहुत अधिक हो जाता है। मेरे परीक्षण में, मेरा लॉग
    पूरा होने से पहले मूल तालिका आकार से 10 गुना तक फट गया ।
  • BULK INSERT स्टेटमेंट का उपयोग करके बड़ी संख्या में रिकॉर्ड आयात करते समय, BATCHSIZE पैरामीटर को शामिल करें और निर्दिष्ट करें कि
    एक समय में कितने रिकॉर्ड करने हैं। यदि आप इस पैरामीटर को शामिल नहीं करते हैं, तो
    आपकी संपूर्ण फ़ाइल को एकल लेनदेन के रूप में आयात किया जाता है, जिसके
    लिए बहुत सारे लॉग स्पेस की आवश्यकता होती है।
  • एक क्लस्टर इंडेक्स के साथ तालिका में डेटा प्राप्त करने का सबसे तेज़ तरीका पहले डेटा को निर्धारित करना है। फिर आप
    ORDER पैरामीटर के साथ BULK INSERT स्टेटमेंट का उपयोग कर इसे आयात कर सकते हैं ।

1

एक असामान्य तथ्य है जिसकी अनदेखी की गई है।

" मूल रूप से एक दिन में 30Mil पंक्तियाँ डालने के बाद, मुझे एक ही GUID (शायद 20 पंक्तियों) के साथ सभी पंक्तियों को लाने की आवश्यकता है और निश्चित रूप से सुनिश्चित करें कि मैं उन सभी को वापस पा लूंगा "

केवल 20 कॉलम की आवश्यकता है, GUID पर एक गैर-संकुल सूचकांक केवल ठीक काम करेगा। आप विभाजन में डेटा फैलाव के लिए किसी अन्य स्तंभ पर क्लस्टर कर सकते हैं।

मेरे पास डेटा प्रविष्टि के बारे में एक प्रश्न है: यह कैसे डाला जा रहा है?

  • क्या यह एक निश्चित समय (प्रति मिनट, प्रति घंटे, आदि) पर एक थोक प्रविष्टि है?
  • यह डेटा किस स्रोत से खींचा जा रहा है (फ्लैट फाइलें, ओएलटीपी, आदि)?

मुझे लगता है कि समीकरण के एक पक्ष को समझने में मदद के लिए इनका उत्तर देने की आवश्यकता है।


1

अमेज़न रेडशिफ्ट एक बेहतरीन सेवा है। जब यह प्रश्न मूल रूप से 2010 में पोस्ट किया गया था, तो यह उपलब्ध नहीं था, लेकिन अब यह 2017 में एक प्रमुख खिलाड़ी है। यह स्तंभ आधारित डेटाबेस है, पोस्टग्रेज से फोर्क किया गया है, इसलिए मानक एसक्यूएल और पोस्टग्रेज कनेक्टर लाइब्रेरी इसके साथ काम करेंगे।

इसका उपयोग रिपोर्टिंग उद्देश्यों, विशेष रूप से एकत्रीकरण के लिए किया जाता है। एक ही तालिका से डेटा को अमेज़ॅन के क्लाउड में विभिन्न सर्वरों पर संग्रहीत किया गया है, परिभाषित टेबल डिस्टेक द्वारा वितरित किया जाता है, इसलिए आप सीपीयू की शक्ति पर भरोसा करते हैं।

इसलिए SELECT और विशेष रूप से एकत्रित चयन तेजी से बिजली कर रहे हैं। लोड हो रहा है बड़ा डेटा अधिमानतः Amazon S3 csv फ़ाइलों से COPY कमांड के साथ किया जाना चाहिए। कमियां यह हैं कि DELETE और UPDATEs सामान्य से अधिक धीमे हैं, लेकिन यही कारण है कि Redshift मुख्य रूप से एक ट्रांसनेशनल डेटाबेस नहीं, बल्कि एक डेटा वेयरहाउस प्लेटफ़ॉर्म का अधिक है।


0

आप कैसंड्रा या HBase का उपयोग करने की कोशिश कर सकते हैं, हालांकि आपको अपने उपयोग के मामले के अनुसार कॉलम परिवारों को कैसे डिज़ाइन करना है, इस पर पढ़ना होगा। कैसेंड्रा अपनी खुद की क्वेरी भाषा प्रदान करता है लेकिन आपको सीधे डेटा तक पहुंचने के लिए HBase के जावा एपीआई का उपयोग करना होगा। यदि आपको Hbase का उपयोग करने की आवश्यकता है तो मैं मैप-आर से Apache ड्रिल के साथ डेटा को क्वेरी करने की सलाह देता हूं जो एक ओपन सोर्स प्रोजेक्ट है। ड्रिल की क्वेरी भाषा SQL-Compliant (ड्रिल में कीवर्ड का वही अर्थ है जो वे SQL में होगा)।


0

प्रति वर्ष कई रिकॉर्ड के साथ आप अंततः अंतरिक्ष से बाहर जाने वाले हैं। क्यों नहीं xfs जैसे फाइल सिस्टम स्टोरेज जो 2 ^ 64 फाइल को सपोर्ट करता है और छोटे बॉक्स का उपयोग करता है। भले ही फैंसी लोग कैसे प्राप्त करना चाहते हैं या धन की राशि खत्म हो जाएगी, जो कि किसी भी डेटाबेस SQL ​​NoSQL के साथ एक प्रणाली प्राप्त करने में खर्च करेगा .. जो भी हो, ये कई रिकॉर्ड आमतौर पर इलेक्ट्रिक कंपनियों और पर्यावरण के मंत्रालय जैसे मौसम केंद्रों / प्रदाताओं द्वारा बनाए जाते हैं जो छोटे नियंत्रण रखते हैं पूरे देश में स्टेशन। यदि आप दबाव को जमा कर रहे हैं .. तापमान..गति तेज .. आर्द्रता आदि ... और गाइड स्थान है..आप अभी भी वर्ष / माह / दिन / घंटे के हिसाब से डेटा को विभाजित कर सकते हैं। मान लें कि आप हार्ड-ड्राइव के अनुसार 4 साल का डेटा स्टोर करते हैं। फिर आप इसे दर्पण के साथ एक छोटे एनएएस पर चला सकते हैं जहां यह बेहतर रीड गति प्रदान करेगा और कई आरोह बिंदु होंगे। उस वर्ष के आधार पर जब इसे बनाया गया था। आप खोज के लिए एक वेब-इंटरफ़ेस बना सकते हैं इसलिए डंपिंग लोकेशन 1/2001/06/01 // तापमान और स्थान 1/2002/06/01 // तापमान केवल 2 साल (24h * 2) 48 छोटे फाइलों बनाम गर्मी के 1 दिन के लिए प्रति घंटा तापमान की सामग्री को डंप करेगा बनाम अरबों रिकॉर्ड के साथ एक डेटाबेस खोज और संभवतः लाखों खर्च किए गए। चीजों को देखने का सरल तरीका .. दुनिया में भगवान के साथ 1.5 बिलियन वेबसाइटें जानती हैं कि प्रत्येक पेज अगर Google जैसी कंपनी को सुपर कंप्यूटरों के लिए भुगतान करने के लिए प्रति 3 मिलियन खोजों में लाखों खर्च करने पड़ते हैं तो उन्हें तोड़ दिया जाएगा। इसके बजाय उनके पास पावर-बिल है ... युगल मिलियन बकवास कंप्यूटर। और कैफीन अनुक्रमण ... भविष्य-प्रूफ .. अधिक जोड़ने। और हाँ जहाँ एसक्यूएल को चलाने से इंडेक्सिंग को समझ में आता है, तो मौसम जैसे निश्चित चीजों के साथ गंदे कामों के लिए महान बिल्डिंग सुपर-कंप्यूटर ... आँकड़े और इतने टेक पर अपने सिस्टम को x सेकंड में xtb क्रंच कर सकते हैं ... पैसे की बर्बादी जो हो सकती है कहीं और बिताया ..


-2

सादे बाइनरी फ़ाइलों में स्टोर रिकॉर्ड, GUID प्रति एक फ़ाइल, इससे अधिक तेज़ी से नहीं मिलेगी।


5
क्या आप वास्तव में इस प्रदर्शन की उम्मीद करते हैं?
चोसपंडियन

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

यह अनुमान लगाना कठिन है कि यह कैसे पता चलेगा कि कितने विशिष्ट GUID की अपेक्षा की जाती है :) लेकिन यह सादे फ़ाइलों को लिखने की तुलना में कोई सरल नहीं है। और GUID द्वारा खोज के साथ-साथ तेजी से आवेषण केवल आवश्यकता थी।
थॉमस काजोरेंस

यह काम कर सकता है लेकिन आपको प्रति फ़ोल्डर फ़ाइलों की संख्या को सीमित करना होगा। आपको प्रति फ़ाइल एक नया फ़ोल्डर उत्पन्न करना होगा। आप फ़ोल्डर के नाम के रूप में गाइड के एक विकल्प का उपयोग कर सकते हैं।
TTT

1
हां, बहुत सारे फाइल सिस्टम के लिए इनोड की संख्या पर एक सीमा है और मुझे याद है कि रेडहैट डिफ़ॉल्ट फाइल सिस्टम पर खुद को सीमित करना .... सीमा लगभग 1,000,000 फाइलें या तो थी।
डीन हिलर

-3

आप MongoDB का उपयोग कर सकते हैं और गाइडिंग को शार्पिंग कुंजी के रूप में उपयोग कर सकते हैं, इसका मतलब है कि आप अपने डेटा को कई मशीनों पर वितरित कर सकते हैं लेकिन जिस डेटा का आप चयन करना चाहते हैं वह केवल एक मशीन पर है क्योंकि आप शार्किंग कुंजी का चयन करते हैं।

MongoDb में शेयरिंग अभी तक तैयार नहीं है।

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