वितरित डेटाबेस सिस्टम 101
या, वितरित डेटाबेस - FK वास्तव में ' वेब स्केल ' का क्या अर्थ है?
वितरित डेटाबेस सिस्टम जटिल critters हैं और विभिन्न स्वादों की संख्या में आते हैं। अगर मैं विश्वविद्यालय में इस पर याद किए गए अध्ययनों के बारे में गहराई से याद किए गए अध्ययनों की गहराई में खुदाई करता हूं, तो मैं वितरित डेटाबेस प्रणाली के निर्माण के लिए कुछ महत्वपूर्ण इंजीनियरिंग समस्याओं की व्याख्या करने का प्रयास करूंगा।
पहला, कुछ शब्दावली
ACID (एटोमिसिटी, कंसिस्टेंसी, आइसोलेशन और ड्यूरेबिलिटी) गुण: ये प्रमुख आक्रमणकारी हैं जिन्हें अवांछनीय दुष्प्रभावों के कारण बिना किसी लेन-देन के मज़बूती से लागू करने के लिए लागू किया जाना है।
एटोमेसी के लिए जरूरी है कि ट्रांजेक्शन पूरी तरह से या रोलबैक हो। आंशिक रूप से समाप्त लेनदेन कभी भी दिखाई नहीं देना चाहिए, और सिस्टम को इस तरह से बनाया जाना चाहिए जो इसे होने से रोकता है।
संगति के लिए आवश्यक है कि लेन-देन कभी भी किसी ऐसे आक्रमणकारी (जैसे कि घोषणात्मक संदर्भ अखंडता) का उल्लंघन नहीं करना चाहिए जो डेटाबेस स्कीमा द्वारा गारंटीकृत हैं। उदाहरण के लिए, यदि कोई विदेशी कुंजी मौजूद है, तो गैर-मौजूद माता-पिता के प्रति श्रद्धा के साथ बच्चे का रिकॉर्ड डालना असंभव होना चाहिए।
अलगाव की आवश्यकता है कि लेनदेन को एक-दूसरे के साथ हस्तक्षेप नहीं करना चाहिए। यदि लेनदेन समानांतर या क्रमिक रूप से निष्पादित किया जाता है, तो सिस्टम को उन्हीं परिणामों की गारंटी देनी चाहिए। व्यवहार में अधिकांश आरडीबीएमएस उत्पाद उन तरीकों की अनुमति देते हैं जो प्रदर्शन के खिलाफ अलगाव को बंद करते हैं।
स्थायित्व के लिए आवश्यक है कि एक बार प्रतिबद्ध होने के बाद, लेन-देन लगातार भंडारण में बना रहे जो हार्डवेयर या सॉफ्टवेयर विफलता के लिए मजबूत हो।
मैं नीचे वितरित सिस्टम पर मौजूद इन आवश्यकताओं में से कुछ तकनीकी बाधाओं की व्याख्या करूँगा।
शेयर्ड डिस्क आर्किटेक्चर: एक आर्किटेक्चर जिसमें क्लस्टर में सभी प्रोसेसिंग नोड्स में सभी स्टोरेज तक पहुंच होती है। यह डेटा एक्सेस के लिए एक केंद्रीय अड़चन पेश कर सकता है। साझा-डिस्क सिस्टम का एक उदाहरण ओरेकल आरएसी या एक्सडाटा है ।
साझा कुछ भी नहीं आर्किटेक्चर: एक आर्किटेक्चर जिसमें क्लस्टर में प्रोसेसिंग नोड्स में स्थानीय भंडारण होता है जो अन्य क्लस्टर नोड्स को दिखाई नहीं देता है। शेयर्ड-नथिंग सिस्टम के उदाहरण हैं टेराडाटा और नेट्ज़्ज़ा ।
साझा मेमोरी आर्किटेक्चर: एक आर्किटेक्चर जिसमें कई सीपीयू (या नोड्स) मेमोरी के साझा पूल तक पहुंच सकते हैं। अधिकांश आधुनिक सर्वर एक साझा मेमोरी प्रकार के होते हैं। साझा की गई मेमोरी कुछ निश्चित ऑपरेशन जैसे कि कैश या एटॉमिक सिंक्रोनाइजेशन प्राइमेटिविटी की सुविधा देती है जो वितरित सिस्टम पर करना बहुत कठिन है।
सिंक्रनाइज़ेशन: कई प्रक्रियाओं या थ्रेड्स द्वारा किसी साझा संसाधन तक लगातार पहुंच सुनिश्चित करने के लिए विभिन्न तरीकों का वर्णन करने वाला एक सामान्य शब्द। यह साझा मेमोरी सिस्टम की तुलना में वितरित सिस्टम पर करना बहुत कठिन है, हालांकि कुछ नेटवर्क आर्किटेक्चर (जैसे Teradata के BYNET) में नेटवर्क प्रोटोकॉल में सिंक्रोनाइज़ेशन प्राइमिटिव थे। सिंक्रनाइज़ेशन ओवरहेड की एक महत्वपूर्ण मात्रा के साथ भी आ सकता है।
अर्ध-जुड़ें: वितरित प्रणाली के दो अलग-अलग नोड्स में रखे गए डेटा को मिलाने में प्रयुक्त एक आदिम। अनिवार्य रूप से इसमें शामिल होने के लिए पंक्तियों के बारे में पर्याप्त जानकारी होती है, ताकि जोड़ को हल करने के लिए एक नोड से दूसरे में बंडल किया जा सके। एक बड़ी क्वेरी पर यह महत्वपूर्ण नेटवर्क ट्रैफ़िक को शामिल कर सकता है।
अंतिम संगति: एक शब्द लेनदेन शब्दार्थ का वर्णन करता है जो प्रदर्शन के लिए एक वितरित प्रणाली (और इसलिए उच्च लेनदेन थ्रूपुट) के सभी नोड्स पर तत्काल अद्यतन (रीड ऑन पर संगति) को व्यापार करता है। अंतिम संगति,वितरण डेटाबेस को वितरित करने के लिए प्रदर्शन अनुकूलन के रूप में कोरम प्रतिकृति का उपयोग करने का एक पक्ष प्रभावहै जो वितरित डेटाबेस में होता है जहां डेटा की कई प्रतियां अलग-अलग नोड्स पर होती हैं।
लामपोर्ट का एल्गोरिदम: साझा किए गए मेमोरी के साथ सिस्टमों में पारस्परिक बहिष्करण (सिंक्रनाइज़ेशन) को लागू करने के लिए एक एल्गोरिथ्म। आम तौर पर एक सिस्टम के भीतर आपसी बहिष्कार के लिए एक परमाणु रीड-तुलना-लेखन या एक प्रकार का समान निर्देश आमतौर पर केवल एक साझा मेमोरी सिस्टम पर व्यावहारिक होना आवश्यक है। अन्य वितरित सिंक्रनाइज़ेशन एल्गोरिदम मौजूद हैं, लेकिन लामपोर्ट पहले में से एक था और सबसे अच्छा ज्ञात है। अधिकांश वितरित सिंक्रोनाइज़ेशन तंत्रों की तरह, लैम्पपोर्ट का एल्गोरिथ्म सटीक समय और घड़ी सिंक्रोनाइज़ेशन बेटीन क्लस्टर नोड्स पर बहुत अधिक निर्भर है।
टू फेज़ कमिट (2PC): प्रोटोकॉल का एक परिवार जो यह सुनिश्चित करता है कि कई भौतिक प्रणालियों को शामिल करने वाला डेटाबेस अपडेट लगातार कमिट करता है या वापस रोल करता है। चाहे 2PC का उपयोग किसी सिस्टम के भीतर या किसी ट्रांजेक्शन मैनेजर के माध्यम से कई प्रणालियों में किया जाता है, यह एक महत्वपूर्ण ओवरहेड वहन करता है।
दो-चरण प्रतिबद्ध प्रोटोकॉल में लेनदेन प्रबंधक भाग लेने वाले नोड्स को इस तरह से लेनदेन को जारी रखने के लिए कहता है, ताकि वे गारंटी दे सकें कि यह प्रतिबद्ध होगा, फिर इस स्थिति का संकेत दें। जब सभी नोड्स ने 'खुश' स्थिति लौटा दी है तो यह नोड्स को प्रतिबद्ध होने का संकेत देता है। लेनदेन तब भी खुला माना जाता है जब तक कि सभी नोड्स एक उत्तर नहीं भेजते हैं जो यह संकेत देता है कि कमिट पूरा हो गया है। यदि कोई सिग्नल कमिट करने से पहले एक नोड नीचे जाता है, तो ट्रांजेक्शन मैनेजर नोड को फिर से क्वेरी करेगा, जब तक कि यह वापस नहीं आता है जब तक कि यह एक सकारात्मक जवाब नहीं मिलता है जब तक कि लेनदेन प्रतिबद्ध नहीं है।
मल्टी-वर्जन कंसीलर कंट्रोल (MVCC): किसी नए स्थान पर डेटा के नए संस्करणों को लिखकर और अन्य लेनदेन को डेटा के पुराने संस्करण को देखने के लिए नए संस्करण के प्रतिबद्ध होने तक देखने की अनुमति देता है। यह नए संस्करण को लिखने के लिए कुछ अतिरिक्त लेखन ट्रैफ़िक की कीमत पर डेटाबेस विवाद को कम करता है और फिर पुराने संस्करण को अप्रचलित के रूप में चिह्नित करता है।
चुनाव एल्गोरिथ्म: कई नोड्स वाले डिस्ट्रीब्यूटेड सिस्टम एकल सिस्टम की तुलना में स्वाभाविक रूप से कम विश्वसनीय होते हैं क्योंकि अधिक विफलता मोड होते हैं। कई मामलों में नोड की विफलता से निपटने के लिए संकुल प्रणाली के लिए कुछ तंत्र की आवश्यकता होती है। चुनाव एल्गोरिदम एल्गोरिदम का एक वर्ग है जिसका उपयोग किसी नेता को उन स्थितियों में वितरित गणना को समन्वित करने के लिए किया जाता है जहां 'नेता' नोड 100% निर्धारित या विश्वसनीय नहीं है।
क्षैतिज विभाजन: एक मेज को उसकी कुंजी द्वारा कई नोड्स या स्टोरेज वॉल्यूम में विभाजित किया जा सकता है। यह एक बड़े डेटा वॉल्यूम को छोटे चंक्स में विभाजित करने और स्टोरेज नोड्स में वितरित करने की अनुमति देता है।
साझाकरण: एक डेटा सेट एक साझा-कुछ आर्किटेक्चर में कई भौतिक नोड्स में क्षैतिज रूप से विभाजित किया जा सकता है। जहाँ यह विभाजन पारदर्शी नहीं है (अर्थात ग्राहक को विभाजन योजना के बारे में पता होना चाहिए और यह स्पष्ट करना चाहिए कि किस नोड को क्वेरी करना है) इसे शार्डिंग के रूप में जाना जाता है। कुछ सिस्टम (जैसे टेराडाटा) नोड्स में डेटा को विभाजित करते हैं, लेकिन ग्राहक के लिए स्थान पारदर्शी है; इस प्रकार की प्रणाली के साथ संयोजन में शब्द का सामान्य रूप से उपयोग नहीं किया जाता है।
निरंतर हाशिंग: एक एल्गोरिथ्म कुंजी के आधार पर विभाजन के लिए डेटा आवंटित करने के लिए उपयोग किया जाता है। यह हैश चाबियों के वितरण और कुशलता से बाल्टी की संख्या का विस्तार या कम करने की क्षमता द्वारा भी विशेषता है। ये विशेषताएँ इसे डेटा के विभाजन के लिए उपयोगी बनाती हैं या नोड्स के एक समूह में लोड करती हैं, जहाँ आकार को नोड्स के साथ जोड़ा जा सकता है या क्लस्टर से बंद किया जा सकता है (शायद विफलता के कारण)।
मल्टी-मास्टर प्रतिकृति: एक तकनीक जो एक क्लस्टर में कई नोड्स को दूसरे नोड्स को दोहराने की अनुमति देती है। यह तकनीक कुछ तालिकाओं को विभाजन और सर्वर पर शार्प करने की अनुमति देकर और अन्य को क्लस्टर में सिंक्रोनाइज़ करके स्केलिंग की सुविधा प्रदान करती है। कोरम के विपरीत सभी नोड्स के लिए राइट्स को दोहराया जाना चाहिए, इसलिए कोरम प्रतिकृति प्रणाली की तुलना में मल्टी-मास्टर प्रतिकृति आर्किटेक्चर पर लेनदेन कमिट करना अधिक महंगा है।
नॉन-ब्लॉकिंग स्विच: एक नेटवर्क स्विच जो आंतरिक हार्डवेयर समानता का उपयोग करता है ताकि थ्रूपुट को प्राप्त किया जा सके, जो बिना आंतरिक अड़चनों के साथ बंदरगाहों की संख्या के लिए आनुपातिक है। एक भोली कार्यान्वयन एक क्रॉसबार तंत्र का उपयोग कर सकता है, लेकिन इसमें N (N ^ 2) की जटिलता एन पोर्ट के लिए है, जो इसे छोटे स्विच तक सीमित करता है। बड़े स्विच अधिक जटिल आंतरिक टोपोलॉजी का उपयोग कर सकते हैं, जिसे ओ (एन ^ 2) हार्डवेयर की आवश्यकता के बिना रैखिक थ्रूपुट स्केलिंग प्राप्त करने के लिए एक गैर-अवरुद्ध न्यूनतम फैले स्विच कहा जाता है।
वितरित DBMS बनाना - कितना कठिन हो सकता है?
कई तकनीकी चुनौतियां व्यवहार में ऐसा करना काफी कठिन बनाती हैं। एक वितरित प्रणाली के निर्माण की अतिरिक्त जटिलता के अलावा, एक वितरित DBMS के वास्तुकार को कुछ मुश्किल इंजीनियरिंग समस्याओं को दूर करना होगा।
वितरित सिस्टम पर एटमॉसिटी: यदि लेनदेन द्वारा अपडेट किया गया डेटा कई नोड्स में फैला हुआ है, तो नोड्स के कमिट / रोलबैक को समन्वित किया जाना चाहिए। यह साझा-कुछ नहीं सिस्टम पर एक महत्वपूर्ण ओवरहेड जोड़ता है। साझा-डिस्क सिस्टम पर यह एक समस्या से कम है क्योंकि भंडारण के सभी नोड्स द्वारा देखे जा सकते हैं इसलिए एकल नोड कमिट को समन्वित कर सकता है।
वितरित प्रणालियों पर संगति: सिस्टम के ऊपर उद्धृत विदेशी प्रमुख उदाहरण लेने के लिए एक सुसंगत स्थिति का मूल्यांकन करने में सक्षम होना चाहिए। उदाहरण के लिए, यदि एक विदेशी कुंजी संबंध के माता-पिता और बच्चे अलग-अलग नोड्स पर निवास कर सकते हैं, तो यह सुनिश्चित करने के लिए कि लेनदेन को मान्य करने के लिए पुरानी जानकारी का उपयोग नहीं करने के लिए कुछ प्रकार के वितरित लॉकिंग तंत्र की आवश्यकता है। यदि इसे लागू नहीं किया गया है तो आप एक उदाहरण के लिए दौड़ की स्थिति (उदाहरण के लिए) कर सकते हैं, जहां माता-पिता को हटा दिया जाता है, जब बच्चे को सम्मिलित करने की अनुमति देने से पहले उसकी उपस्थिति सत्यापित की जाती है।
बाधाओं के विलंबित प्रवर्तन (अर्थात DRI को मान्य करने के लिए प्रतिबद्ध होने तक प्रतीक्षा) को लेनदेन की अवधि के लिए लॉक की आवश्यकता होती है। इस तरह का वितरित लॉकिंग एक महत्वपूर्ण ओवरहेड के साथ आता है।
यदि डेटा की कई प्रतियां आयोजित की जाती हैं (यह अर्ध-जोड़ों से अनावश्यक नेटवर्क ट्रैफ़िक से बचने के लिए साझा-कुछ सिस्टम पर आवश्यक हो सकता है) तो डेटा की सभी प्रतियां अपडेट होनी चाहिए।
वितरित प्रणालियों पर अलगाव: जहां एक लेनदेन पर प्रभावित डेटा कई सिस्टम पर रहता है, वे नोड्स में लॉक और संस्करण (यदि एमवीसीसी उपयोग में है) को सिंक्रनाइज़ किया जाना चाहिए। संचालन की क्रमिकता की गारंटी, विशेष रूप से साझा-कुछ नहीं आर्किटेक्चर पर जहां डेटा की अनावश्यक प्रतियां संग्रहीत की जा सकती हैं, उन्हें एक वितरित सिंक्रनाइज़ेशन तंत्र की आवश्यकता होती है जैसे कि लैमपोर्ट का एल्गोरिथ्म, जो नेटवर्क ट्रैफ़िक में एक महत्वपूर्ण ओवरहेड के साथ भी आता है।
वितरित सिस्टम पर स्थायित्व: एक साझा डिस्क सिस्टम पर स्थायित्व मुद्दा अनिवार्य रूप से एक साझा-मेमोरी सिस्टम के समान है, इस अपवाद के साथ कि सिंक्रनाइज़ेशन प्रोटोकॉल वितरित किए गए अभी भी नोड्स में आवश्यक हैं। DBMS को लॉग को जर्नल लिखना चाहिए और डेटा को लगातार लिखना चाहिए। साझा-कुछ नहीं प्रणाली पर विभिन्न नोड्स पर संग्रहीत डेटा या डेटा के कुछ हिस्सों की कई प्रतियां हो सकती हैं। यह सुनिश्चित करने के लिए कि नोड्स के पार सही ढंग से होता है, एक दो-चरण प्रतिबद्ध प्रोटोकॉल की आवश्यकता है। यह भी महत्वपूर्ण ओवरहेड को उकसाता है।
साझा-कुछ नहीं प्रणाली पर नोड के नुकसान का मतलब सिस्टम में डेटा उपलब्ध नहीं है। इस डेटा को कम करने के लिए एक से अधिक नोड में दोहराया जा सकता है। इस स्थिति में संगति का अर्थ है कि डेटा को उन सभी नोड्स में दोहराया जाना चाहिए जहां यह सामान्य रूप से रहता है। यह लिखने पर पर्याप्त ओवरहेड को उकसा सकता है।
NoSQL सिस्टम में किए गए एक सामान्य अनुकूलन कोरम प्रतिकृति का उपयोग होता है और अंतिम रूप से लेन-देन की रिपोर्ट करने से पहले एक कोरम को लिखकर डेटा के एक निश्चित स्तर की गारंटी देते हुए डेटा को आलसी प्रतिकृति बनाने की अनुमति देता है। इसके बाद डेटा को अन्य नोड्स में lazily दोहराया जाता है जहां डेटा की प्रतियां रहती हैं।
ध्यान दें कि 'अंतिम स्थिरता' स्थिरता पर एक प्रमुख व्यापार-बंद है जो स्वीकार्य नहीं हो सकता है यदि लेनदेन के प्रतिबद्ध होते ही डेटा को लगातार देखा जाना चाहिए। उदाहरण के लिए, वित्तीय आवेदन पर एक अद्यतन शेष राशि तुरंत उपलब्ध होनी चाहिए।
साझा-डिस्क सिस्टम
एक साझा-डिस्क सिस्टम वह है जहां सभी नोड्स में सभी भंडारण तक पहुंच होती है। इस प्रकार, गणना स्थान से स्वतंत्र है। इस मोड में कई डीबीएमएस प्लेटफॉर्म भी काम कर सकते हैं - ओरेकल आरएसी ऐसी वास्तुकला का एक उदाहरण है।
साझा डिस्क सिस्टम काफी हद तक स्केल कर सकते हैं क्योंकि वे स्टोरेज नोड्स और प्रोसेसिंग नोड्स के बीच M: M संबंध का समर्थन कर सकते हैं। एक SAN में कई कंट्रोलर हो सकते हैं और कई सर्वर डेटाबेस चला सकते हैं। इन आर्किटेक्चर के पास केंद्रीय अड़चन के रूप में एक स्विच है लेकिन क्रॉसबार स्विच इस स्विच को बहुत अधिक बैंडविड्थ की अनुमति देते हैं। कुछ प्रोसेसिंग को स्टोरेज नोड्स पर लोड किया जा सकता है (जैसा कि ओरेकल के एक्सडाटा के मामले में है) जो स्टोरेज बैंडविड्थ पर ट्रैफ़िक को कम कर सकता है।
यद्यपि स्विच सैद्धांतिक रूप से एक अड़चन है उपलब्ध बैंडविड्थ का मतलब है कि साझा-डिस्क आर्किटेक्चर बड़े लेनदेन संस्करणों के लिए काफी प्रभावी ढंग से मापेंगे। अधिकांश मुख्यधारा के डीबीएमएस आर्किटेक्चर इस दृष्टिकोण को अपनाते हैं क्योंकि यह 'अच्छा पर्याप्त' स्केलेबिलिटी और उच्च विश्वसनीयता प्राप्त करता है। एक अतिरेक भंडारण आर्किटेक्चर जैसे कि फाइबर चैनल में विफलता का एक भी बिंदु नहीं है क्योंकि किसी भी प्रसंस्करण नोड और किसी भी भंडारण नोड के बीच कम से कम दो रास्ते हैं।
साझा-कुछ भी नहीं सिस्टम
शेयर्ड-नथिंग सिस्टम ऐसी प्रणाली है जहाँ कम से कम कुछ डेटा स्थानीय स्तर पर एक नोड के लिए आयोजित किया जाता है और अन्य नोड्स के लिए प्रत्यक्ष रूप से दिखाई नहीं देता है। यह एक केंद्रीय स्विच की अड़चन को हटाता है, जिससे डेटाबेस को नोड्स की संख्या के साथ स्केल (कम से कम सिद्धांत में) करने की अनुमति मिलती है। क्षैतिज विभाजन डेटा को नोड्स में विभाजित करने की अनुमति देता है; यह क्लाइंट के लिए पारदर्शी हो सकता है या नहीं (ऊपर शेयरिंग देखें)।
क्योंकि डेटा को स्वाभाविक रूप से वितरित किया जाता है एक क्वेरी को एक से अधिक नोड से डेटा की आवश्यकता हो सकती है। यदि किसी जुड़ने के लिए अलग-अलग नोड्स से डेटा की आवश्यकता होती है, तो एक नोड से दूसरे में शामिल होने के लिए पर्याप्त डेटा स्थानांतरित करने के लिए एक सेमी-ज्वाइन ऑपरेशन का उपयोग किया जाता है। इसके परिणामस्वरूप बड़ी मात्रा में नेटवर्क ट्रैफ़िक हो सकता है, इसलिए डेटा के वितरण का अनुकूलन क्वेरी प्रदर्शन के लिए एक बड़ा अंतर बना सकता है।
अक्सर, अर्द्ध-जॉन्स के लिए आवश्यकता को कम करने के लिए डेटा को एक साझा-शून्य प्रणाली के नोड्स में दोहराया जाता है। यह डेटा वेयरहाउस उपकरणों पर काफी अच्छी तरह से काम करता है क्योंकि आयाम आम तौर पर तथ्य तालिकाओं की तुलना में छोटे परिमाण के कई आदेश हैं और नोड्स में आसानी से दोहराया जा सकता है। वे आम तौर पर बैचों में भी लोड होते हैं, इसलिए प्रतिकृति ओवरहेड एक समस्या से कम है, क्योंकि यह एक लेन-देन के आवेदन पर होगा।
साझा-कुछ भी नहीं की वास्तुकला का अंतर्निहित समानता उन्हें डेटा वेयरहाउस की तालिका-स्कैन / कुल प्रश्नों की तरह अच्छी तरह से अनुकूल बनाता है। इस तरह का ऑपरेशन प्रसंस्करण नोड्स की संख्या के साथ लगभग रैखिक रूप से स्केल कर सकता है। नोड्स में बड़े जोड़ अधिक ओवरहेड को उकसाते हैं क्योंकि अर्ध-जुड़ने वाले ऑपरेशन बहुत सारे नेटवर्क ट्रैफ़िक उत्पन्न कर सकते हैं।
लेनदेन प्रसंस्करण अनुप्रयोगों के लिए बड़े डेटा वॉल्यूम को कम करना उपयोगी है, जहां कई अपडेट्स का ओवरहेड इस तरह के आर्किटेक्चर को साझा डिस्क की तुलना में कम आकर्षक बनाता है। इस प्रकार, इस प्रकार की वास्तुकला डेटा वेयरहाउस अनुप्रयोगों से व्यापक रूप से उपयोग नहीं की जाती है।
शेयरिंग, कोरम प्रतिकृति और अंतिम संगति
कोरम प्रतिकृति एक सुविधा है जहां एक DBMS उच्च उपलब्धता के लिए डेटा की प्रतिकृति बनाता है। यह कमोडिटी कमोडिटी हार्डवेयर पर काम करने के लिए उपयोगी सिस्टम के लिए उपयोगी है जिसमें SAN जैसी बिल्ट-इन हाई-उपलब्धता सुविधाएं नहीं हैं। इस प्रकार के सिस्टम में डेटा को रीड परफॉर्मेंस और निरर्थक स्टोरेज के लिए कई स्टोरेज नोड्स में दोहराया जाता है ताकि सिस्टम को नोड की हार्डवेयर विफलता के लिए लचीला बनाया जा सके।
हालाँकि, सभी नोड्स के लिए राइट्स की प्रतिकृति M नोड्स और N राइट्स के लिए O (M x N) है। यदि कोई लेन-देन करने की अनुमति दी जाती है, तो यह लिखना महंगा हो जाता है यदि राइट को सभी नोड्स पर दोहराया जाना चाहिए। कोरम प्रतिकृति एक समझौता है जो लिखने को तुरंत नोड्स के सबसेट के लिए दोहराया जा सकता है और फिर एक पृष्ठभूमि कार्य द्वारा अन्य नोड्स के लिए बाहर लिखा हुआ है। लेन-देन की रिपोर्ट ग्राहक को करने से पहले यह सुनिश्चित करते हुए कि वे न्यूनतम नोड्स के न्यूनतम सबसेट (कोरम) के लिए दोहराए गए हैं, यह सुनिश्चित करके कि अतिरेक की एक निश्चित डिग्री प्रदान करते हुए, लेखन को अधिक तेज़ी से प्रतिबद्ध किया जा सकता है।
इसका मतलब यह है कि कोरम के बाहर नोड्स को पढ़ने से डेटा के अप्रचलित संस्करण देखे जा सकते हैं जब तक कि पृष्ठभूमि प्रक्रिया ने बाकी नोड्स के लिए डेटा लिखना समाप्त नहीं किया है। शब्दार्थ को 'अंतिम संगति' के रूप में जाना जाता है और यह आपके आवेदन की आवश्यकताओं के आधार पर स्वीकार्य हो सकता है या नहीं भी हो सकता है लेकिन इसका अर्थ है कि लेन-देन के साधन संसाधन उपयोग में O (n) की तुलना में O (1) के करीब हैं।
साझाकरण के लिए ग्राहक को डेटाबेस में डेटा के विभाजन के बारे में पता होना चाहिए, अक्सर एक प्रकार के एल्गोरिथ्म का उपयोग करके जिसे 'सुसंगत हैशिंग' कहा जाता है। एक शार्ल्ड डेटाबेस में क्लाइंट ने क्वेरी को जारी करने के लिए क्लस्टर में कौन सा सर्वर निर्धारित करने के लिए कुंजी को हैश किया। चूंकि अनुरोध क्लस्टर में नोड्स में वितरित किए जाते हैं, इसलिए एक एकल क्वेरी समन्वयक नोड के साथ कोई अड़चन नहीं है।
ये तकनीक एक डेटाबेस को क्लस्टर में नोड्स जोड़कर निकट-रैखिक दर पर स्केल करने की अनुमति देती है। सैद्धांतिक रूप से, कोरम प्रतिकृति केवल आवश्यक है यदि अंतर्निहित भंडारण माध्यम को अविश्वसनीय माना जाता है। यह उपयोगी है यदि कमोडिटी सर्वरों का उपयोग किया जाना है, लेकिन कम मूल्य का है यदि अंतर्निहित भंडारण तंत्र की अपनी उच्च उपलब्धता योजना है (उदाहरण के लिए दर्पण के साथ एक SAN, मेजबानों के लिए बहु-पथ कनेक्टिविटी)।
उदाहरण के लिए, Google का बिगटेबल खुद को कोरम प्रतिकृति लागू नहीं करता है, हालांकि यह जीएफएस पर बैठता है, एक संकुल फाइल सिस्टम जो कोरम प्रतिकृति का उपयोग करता है। बिगटेबल (या कोई भी साझा-कुछ भी सिस्टम) कई नियंत्रकों के साथ एक विश्वसनीय भंडारण प्रणाली का उपयोग कर सकता है और नियंत्रकों के बीच डेटा को विभाजित कर सकता है। तब समानांतर पहुँच डेटा के विभाजन के माध्यम से प्राप्त की जाएगी।
वापस RDBMS प्लेटफ़ॉर्म पर
कोई अंतर्निहित कारण नहीं है कि इन तकनीकों का उपयोग RDBMS के साथ नहीं किया जा सकता है। हालाँकि, लॉक और संस्करण प्रबंधन ऐसी प्रणाली पर काफी जटिल होगा और ऐसी प्रणाली के लिए कोई भी बाजार काफी विशिष्ट होने की संभावना है। मुख्य धारा आरडीबीएमएस प्लेटफार्मों में से कोई भी कोरम प्रतिकृति का उपयोग नहीं करता है और मुझे विशेष रूप से किसी भी आरडीबीएमएस उत्पाद (कम से कम किसी भी महत्वपूर्ण अपटेक के साथ नहीं) के बारे में पता नहीं है।
साझा-डिस्क और साझा-कुछ भी सिस्टम बहुत बड़े वर्कलोड तक स्केल नहीं कर सकता है। उदाहरण के लिए, ओरेकल आरएसी 63 प्रोसेसिंग नोड्स का समर्थन कर सकता है (जो अपने आप में बड़ी एसएमपी मशीनें हो सकती हैं) और सैन पर भंडारण नियंत्रकों की एक मनमानी संख्या। एक आईबीएम Sysplex (zSeries मेनफ्रेम का एक समूह) कई मेनफ्रेम (प्रत्येक में पर्याप्त प्रसंस्करण शक्ति और अपने स्वयं के I / O बैंडविड्थ) और कई SAN नियंत्रकों का समर्थन कर सकता है। ये आर्किटेक्चर ACID शब्दार्थ के साथ बहुत बड़े लेनदेन संस्करणों का समर्थन कर सकते हैं, हालांकि वे विश्वसनीय भंडारण का अनुमान लगाते हैं। Teradata, Netezza और अन्य विक्रेता उच्च-प्रदर्शन विश्लेषणात्मक प्लेटफ़ॉर्म बनाते हैं जो साझा-कुछ डिज़ाइनों के आधार पर होते हैं जो बहुत बड़े डेटा वॉल्यूम के पैमाने पर होते हैं।
अब तक, सस्ते लेकिन अल्ट्रा-हाई वॉल्यूम के लिए बाजार पूरी तरह से ACID RDBMS प्लेटफॉर्म MySQL द्वारा हावी है, जो कि शार्किंग और मल्टी-मास्टर प्रतिकृति का समर्थन करता है। MySQL quorum प्रतिकृति का उपयोग लिखने के थ्रूपुट को ऑप्टिमाइज़ करने के लिए नहीं करता है, इसलिए NoSQL सिस्टम की तुलना में लेन-देन कमिट अधिक महंगा होता है। साझाकरण बहुत अधिक पढ़े गए थ्रूपुट की अनुमति देता है (उदाहरण के लिए फेसबुक MySQL का बड़े पैमाने पर उपयोग करता है), इसलिए इस प्रकार का आर्किटेक्चर रीड-हैवी वर्कलोड पर अच्छी तरह से लागू होता है।
एक दिलचस्प बहस
बिगटेबल एक साझा-कुछ भी नहीं है वास्तुकला (मूल रूप से वितरित की-वैल्यू जोड़ी) जैसा कि नीचे माइकल हॉसेनलस ने बताया है । इसके मूल मूल्यांकन में MapReduce इंजन शामिल था, जो BigTable का हिस्सा नहीं है, लेकिन आम तौर पर इसके सबसे सामान्य कार्यान्वयन (जैसे Hadoop / HBase और Google के MapReduce ढांचे) में इसके साथ संयोजन के रूप में उपयोग किया जाएगा।
इस वास्तुकला की तुलना तेरदता से की जाती है, जिसमें भंडारण और प्रसंस्करण के बीच भौतिक आत्मीयता होती है (अर्थात नोड्स में एक साझा SAN के बजाय स्थानीय भंडारण होता है) आप यह तर्क दे सकते हैं कि BigTable / MapReduce एक साझा डिस्क आर्किटेक्चर है जो विश्व स्तर पर दृश्यमान समानांतर प्रणाली के माध्यम से है।
Hadoop जैसे MapReduce स्टाइल सिस्टम का प्रोसेसिंग थ्रूपुट एक नॉन-ब्लॉकिंग नेटवर्क स्विच की बैंडविड्थ से विवश है। 1 गैर-अवरोधक स्विच, हालांकि, डिज़ाइन में निहित समानता के कारण बड़े बैंडविड्थ समुच्चय को संभाल सकते हैं, इसलिए वे प्रदर्शन पर एक महत्वपूर्ण व्यावहारिक बाधा हैं। इसका मतलब है कि एक साझा डिस्क आर्किटेक्चर (शायद बेहतर रूप में साझा-संग्रहण प्रणाली के रूप में संदर्भित) बड़े वर्कलोड के पैमाने पर हो सकता है, भले ही नेटवर्क स्विच सैद्धांतिक रूप से एक केंद्रीय अड़चन हो।
मूल बिंदु यह ध्यान रखना था कि यद्यपि यह केंद्रीय अड़चन साझा-डिस्क सिस्टम में मौजूद है, लेकिन कई स्टोरेज नोड्स (जैसे बिगटेबल टैबलेट सर्वर या सैन नियंत्रकों) के साथ एक विभाजन भंडारण उपतंत्र अभी भी बड़े वर्कलोड तक पैमाना बना सकता है। गैर-अवरोधक स्विच आर्किटेक्चर (सिद्धांत रूप में) कई वर्तमान कनेक्शनों को संभाल सकता है क्योंकि इसमें पोर्ट होते हैं।
1 के प्रसंस्करण और उपलब्ध I / O थ्रूपुट भी प्रदर्शन पर एक सीमा का गठन करते हैं, लेकिन नेटवर्क स्विच एक केंद्रीय बिंदु है जिसके माध्यम से सभी ट्रैफ़िक गुजरते हैं।