डेटाबेस विभाजन बनाम विभाजन


166

मैं हाल ही में स्केलेबल आर्किटेक्चर के बारे में पढ़ रहा हूं। उस संदर्भ में, दो शब्द जो डेटाबेस के संबंध में दिखाई देते हैं, वे तेज और विभाजन कर रहे हैं । मैंने विवरणों को देखा, लेकिन अभी भी उलझा हुआ है।

क्या स्टैकओवरफ्लो के विशेषज्ञ मुझे मूल बातें सही पाने में मदद कर सकते हैं?

  • शेरिंग और विभाजन के बीच अंतर क्या है ?
  • क्या यह सच है कि 'सभी शार्प किए गए डेटाबेस अनिवार्य रूप से विभाजित किए गए हैं (अलग-अलग नोड्स पर), लेकिन सभी पार्टिशन किए गए डेटाबेस अनिवार्य रूप से शार्प नहीं हैं' ?

digitalocean.com/community/tutorials/… यह मदद कर सकता है।
mchawre

जवाबों:


130

विभाजन तालिका या डेटाबेस में डेटा को विभाजित करने के लिए एक सामान्य शब्द है। शेयरिंग एक विशिष्ट प्रकार का विभाजन है, जिसे क्षैतिज विभाजन कहा जाता है।

यहाँ आप स्कीमा को देखने के लिए किस उदाहरण या सर्वर को जानने के लिए किसी प्रकार के तर्क या पहचानकर्ता का उपयोग करके (आम तौर पर) कई उदाहरणों या सर्वरों को दोहराते हैं। इस तरह के एक पहचानकर्ता को अक्सर "शार्द की" कहा जाता है।

डेटा को विभाजित करने के लिए वर्णमाला का उपयोग करने के लिए एक सामान्य, कुंजी-कम तर्क है। AD उदाहरण 1, उदाहरण उदाहरण 2 आदि है। ग्राहक डेटा इसके लिए अच्छी तरह से अनुकूल है, लेकिन उदाहरणों में आकार में कुछ गलत तरीके से प्रस्तुत किया जाएगा यदि विभाजन को ध्यान में नहीं रखा जाता है कि कुछ अक्षर दूसरों की तुलना में अधिक सामान्य हैं।

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

एक प्रसिद्ध उदाहरण जिसका आप अध्ययन कर सकते हैं कि इंस्टाग्राम ने शुरुआती दिनों में अपने विभाजन को कैसे हल किया (नीचे लिंक देखें)। उन्होंने बहुत कम सर्वरों पर विभाजन शुरू किया, पोस्टग्रेज को डेटा को गेट-गो से विभाजित करने के लिए उपयोग किया। मेरा मानना ​​है कि यह उन कुछ भौतिक शार्क पर कई हजार तार्किक शार्क थी। 2012 से उनके शानदार राइटअप यहां पढ़ें: इंस्टाग्राम इंजीनियरिंग - शेयरिंग और आईडी

यहाँ भी देखें: http://www.quora.com/Whats-the-difference-between-sharding-and-partition


16
शेयरिंग HP का एक प्रकार है । यह एचपी नहीं है।
NoChance 5

1
क्या मैं क्षैतिज विभाजन के बारे में सोचने का अधिकार सिर्फ एक तालिका से बाहर की पंक्तियों को कई उप-तालिकाओं (संभवतः एक ही स्कीम या डेटाबेस उदाहरण के भीतर) में विभाजित करना है। , या अलग मशीनों पर अलग डेटाबेस उदाहरणों में। या नहीं?
जोनाथन हार्टले

48

ऐसा लगता है कि यह आपके दोनों सवालों के जवाब देता है:

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

साझाकरण इस से आगे बढ़ता है: यह समस्याग्रस्त तालिका (ओं) को उसी तरह से विभाजित करता है, लेकिन यह स्कीमा के संभावित कई उदाहरणों में ऐसा करता है। स्पष्ट लाभ यह होगा कि बड़ी विभाजन तालिका के लिए खोज भार को अब एक ही तार्किक सर्वर पर न केवल कई अनुक्रमित, बल्कि कई सर्वर (तार्किक या भौतिक) में विभाजित किया जा सकता है।

स्रोत: विकी-शार्ड

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

स्रोत: MongoDB


41

मैं इसमें भी गोताखोरी कर रहा हूं और हालांकि मैं इस मामले पर अब तक संदर्भ ले रहा हूं, कुछ महत्वपूर्ण तथ्य हैं जो मैंने इकट्ठे किए हैं और उन बिंदुओं को साझा करना चाहते हैं:

एक विभाजन एक तार्किक डेटाबेस या उसके घटक तत्वों का एक विभाजन है जो अलग-अलग स्वतंत्र भागों में होता है। डेटाबेस विभाजन लोड संतुलन के लिए, आमतौर पर प्रबंधन, प्रदर्शन या उपलब्धता कारणों से किया जाता है।

https://en.wikipedia.org/wiki/Partition_(database)

साझाकरण एक प्रकार का विभाजन है, जैसे क्षैतिज विभाजन (HP)

इसमें वर्टिकल पार्टिशनिंग (VP) भी है जिससे आप एक टेबल को छोटे अलग हिस्सों में विभाजित करते हैं। सामान्यीकरण में तालिकाओं में स्तंभों के इस विभाजन को भी शामिल किया जाता है, लेकिन ऊर्ध्वाधर विभाजन उस से परे हो जाता है और पहले से ही सामान्य होने पर भी विभाजन कॉलम।

https://en.wikipedia.org/wiki/Shard_(database_architecture)

मुझे वास्तव में टोनी बेको का जवाब Quora पर पसंद है जहां वह आपको स्कीमा (कॉलम और पंक्तियों के बजाय) के संदर्भ में सोचने के लिए मजबूर करता है। उसने व्यक्त किया की...

" क्षैतिज विभाजन ", या पैनापन, स्कीमा की नकल कर रहा है और फिर एक शार्क कुंजी के आधार पर डेटा को विभाजित कर रहा है।

" ऊर्ध्वाधर विभाजन " में स्कीमा को विभाजित करना शामिल है (और डेटा सवारी के लिए साथ जाता है)।

https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them

Oracle के डेटाबेस विभाजन गाइड में कुछ अच्छे आंकड़े हैं। मैंने लेख के कुछ अंश कॉपी किए हैं।

https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm

जब एक तालिका विभाजन के लिए

तालिका को विभाजित करने के लिए यहां कुछ सुझाव दिए गए हैं:

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

विभाजन की संभावना

विभाजन छँटाई सबसे सरल और विभाजन का उपयोग करके प्रदर्शन में सुधार करने के लिए सबसे पर्याप्त साधन है। विभाजन छंटाई अक्सर परिमाण के कई आदेशों द्वारा क्वेरी के प्रदर्शन में सुधार कर सकती है। उदाहरण के लिए, मान लें कि किसी एप्लिकेशन में ऑर्डर का ऐतिहासिक रिकॉर्ड वाला एक आदेश तालिका है, और यह तालिका सप्ताह द्वारा विभाजित की गई है। एक सप्ताह के लिए आदेशों का अनुरोध करने वाला एक प्रश्न केवल आदेश तालिका के एक ही विभाजन तक पहुंच जाएगा। यदि आदेश तालिका में 2 साल का ऐतिहासिक डेटा था, तो यह क्वेरी 104 विभाजन के बजाय एक विभाजन तक पहुंच जाएगी। यह क्वेरी संभावित रूप से विभाजन के कारण 100 गुना तेजी से निष्पादित हो सकती है।

विभाजन की रणनीतियाँ

  • रेंज
  • हैश
  • सूची

आप उनके पाठ को पढ़ सकते हैं और उनकी छवियों की कल्पना कर सकते हैं जो सब कुछ बहुत अच्छी तरह से समझाते हैं।

और अंत में, यह समझना महत्वपूर्ण है कि डेटाबेस अत्यंत संसाधन गहन हैं:

  • सी पी यू
  • डिस्क
  • आई / ओ
  • स्मृति

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

हालांकि अन्य रणनीतियां "साझा कुछ भी नहीं" आर्किटेक्चर को नियोजित करेंगी जहां शार्प्स अलग और अलग कंप्यूटिंग यूनिट्स (नोड्स) पर निवास करेंगे, जिसमें 100% सीपीयू, डिस्क, आई / ओ और मेमोरी अपने आप में होगी। बशर्ते इसके फायदे और जटिलताएं हों।

https://en.wikipedia.org/wiki/Shared_nothing_architecture


"" क्षैतिज विभाजन ", या पैनापन, स्कीमा की नकल कर रहा है और फिर एक शार्क कुंजी के आधार पर डेटा को विभाजित कर रहा है।" - यह तात्विक है।
8bitjunkie

तो एक दर्पण है, और यह खंडित है, इसलिए व्युत्पत्ति है।
मैकेंज़्म

5

1 मिलियन पंक्तियों और 100 स्तंभों वाले डेटाबेस में एक तालिका पर विचार करें विभाजन में आप तालिका को 2 या अधिक तालिका में विभाजित कर सकते हैं जैसे कि संपत्ति:

  1. 0.4 मिलियन पंक्तियाँ (तालिका 1), 0.6 मिलियन पंक्तियाँ (तालिका 2)

  2. 1 मिलियन पंक्तियाँ और 60 कॉलम (तालिका 1) और 1 मिलियन पंक्तियाँ और 40 कॉलम (तालिका 2)

    इस तरह कई मामले हो सकते हैं

यह सामान्य विभाजन है

लेकिन शेयरिंग केवल 1 मामले को संदर्भित करता है जहां हम पंक्तियों के आधार पर डेटा को विभाजित कर रहे हैं। यदि हम तालिका को कई तालिका में विभाजित कर रहे हैं, तो हमें स्कीमा की कई समान प्रतियों को बनाए रखने की आवश्यकता है क्योंकि अब हमारे पास कई तालिकाएं हैं।


1

Sharding की एक विशेष मामले में क्षैतिज विभाजन , जब कई डेटाबेस उदाहरणों भर में विभाजन फैला। यदि एक डेटाबेस को शार्प किया जाता है, तो इसका मतलब है कि यह परिभाषा द्वारा विभाजित है।


1

विभाजन के बारे में बात करते समय कृपया प्रतिकृति या प्रतिकृति शब्द का उपयोग न करें। प्रतिकृति एक अलग अवधारणा है और इस पृष्ठ के दायरे से बाहर है। जब हम विभाजन के बारे में बात करते हैं तो बेहतर शब्द विभाजित होता है और जब हम बात करते हैं तो बेहतर शब्द वितरित होता है। विभाजन में (आम तौर पर और आम समझ में हमेशा नहीं) बड़े डेटा सेट तालिका की पंक्तियों को दो या अधिक असमान (किसी भी पंक्ति को साझा नहीं) समूहों में विभाजित किया जाता है। आप प्रत्येक समूह को एक विभाजन कह सकते हैं। ये समूह या सभी विभाजन एक बार RDMB उदाहरण के नियंत्रण में रहते हैं और यह सब तार्किक है। प्रत्येक समूह का आधार एक हैश या रेंज या आदि हो सकता है। यदि आपके पास एक तालिका में दस वर्ष का डेटा है तो आप प्रत्येक वर्ष के डेटा को एक अलग विभाजन में संग्रहीत कर सकते हैं और यह एक के आधार पर विभाजन की सीमा निर्धारित करके प्राप्त किया जा सकता है। गैर-शून्य कॉलम CREATE_DATE। एक बार जब आप db क्वेरी कर लेते हैं तो यदि आप 01-01-1999 और 31-12-2000 के बीच एक निर्मित तिथि निर्दिष्ट करते हैं तो केवल दो विभाजन हिट होंगे और यह अनुक्रमिक होगा। मैंने अरबों + रिकॉर्डों के लिए DB पर समान किया और सभी आदि सूचकांकों का उपयोग करके 30 सेकंड से 50 मिली तक sql समय आ गया। साझा करना यह है कि आप प्रत्येक विभाजन को एक अलग नोड / मशीन पर होस्ट करते हैं। अब विभाजन / शार्क के अंदर खोज समानांतर में हो सकती है।


0

क्षैतिज विभाजन जब दूसरे डेटाबेस उदाहरण में चला जाता है * एक डेटाबेस शार्क बन जाता है ।

डेटाबेस का उदाहरण एक ही मशीन या किसी अन्य मशीन पर हो सकता है।

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