पैनापन क्या है और यह महत्वपूर्ण क्यों है?


196

मुझे लगता है कि मैं समझ में आया कि अपने कटा हुआ डेटा (शार्प्स) को वापस लाना आसान है, जो कि संदर्भ में समझ में आता है। क्या ये सही है?

अपडेट : मुझे लगता है कि मैं यहां संघर्ष कर रहा हूं। मेरी राय में एप्लिकेशन टीयर को यह निर्धारित करने का कोई व्यवसाय नहीं होना चाहिए कि डेटा कहाँ संग्रहीत किया जाना चाहिए। सबसे अच्छा यह किसी तरह का तेज ग्राहक होना चाहिए। दोनों प्रतिक्रियाओं ने उत्तर दिया कि क्या है लेकिन यह महत्वपूर्ण पहलू क्यों नहीं है। स्पष्ट प्रदर्शन लाभ के बाहर इसके क्या निहितार्थ हैं? क्या ये लाभ MVC उल्लंघन की भरपाई के लिए पर्याप्त हैं? बहुत बड़े पैमाने पर अनुप्रयोगों में अधिकतर महत्वपूर्ण है या यह छोटे पैमाने पर लागू होता है?


1
क्या इनमें से एक वेबिनार मददगार होगा? vimeo.com/26742356 slideshare.net/rightscale/... vimeo.com/32541189

जवाबों:


193

साझाकरण डेटाबेस के "क्षैतिज विभाजन" के लिए सिर्फ एक और नाम है। आप इसे स्पष्ट करने के लिए उस शब्द को खोजना चाहते हैं।

से विकिपीडिया :

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

शार्किंग के बारे में कुछ और जानकारी:

सबसे पहले, प्रत्येक डेटाबेस सर्वर समान है, जिसमें समान टेबल संरचना है। दूसरे, डेटा रिकॉर्ड तार्किक रूप से एक शार्पड डेटाबेस में विभाजित होते हैं। विभाजन डेटाबेस के विपरीत, प्रत्येक पूर्ण डेटा रिकॉर्ड केवल एक ही शर्ड में मौजूद है (जब तक कि बैकअप / अतिरेक के लिए मिररिंग नहीं है) सभी CRUD ऑपरेशनों के साथ बस उस डेटाबेस में प्रदर्शन किया गया है। आप उपयोग की जाने वाली शब्दावली को पसंद नहीं कर सकते हैं, लेकिन यह तार्किक डेटाबेस को छोटे भागों में व्यवस्थित करने के एक अलग तरीके का प्रतिनिधित्व करता है।

अपडेट: आप MVC को तोड़ नहीं सकते। सही शार्द का निर्धारण करने का कार्य जहां डेटा को संग्रहीत करना पारदर्शी रूप से आपके डेटा एक्सेस लेयर द्वारा किया जाएगा। वहां आपको मापदंड के आधार पर सही शार्द का निर्धारण करना होगा जो आपने अपने डेटाबेस को शार्द करने के लिए इस्तेमाल किया था। (जैसा कि आपको अपने एप्लिकेशन के कुछ ठोस पहलुओं के आधार पर डेटाबेस को कुछ अलग-अलग शार्दों में मैन्युअल रूप से शार्द करना होगा।) तब आपको सही शार्द का उपयोग करने के लिए डेटाबेस में डेटा को लोड / स्टोर करते समय ध्यान रखना होगा।

शायद जावा कोड वाला यह उदाहरण इसे कुछ हद तक स्पष्ट कर देता है (यह हाइबरनेट शार्ड्स प्रोजेक्ट के बारे में है ), यह वास्तविक जीवन परिदृश्य में कैसे काम करेगा।

" why sharding" को संबोधित करने के लिए : यह मुख्य रूप से केवल बहुत बड़े पैमाने पर अनुप्रयोगों के लिए है, जिसमें बहुत सारे डेटा हैं। सबसे पहले, यह डेटाबेस प्रश्नों के लिए प्रतिक्रिया समय को कम करने में मदद करता है। दूसरा, आप एक बड़े सर्वर के बजाय अपने डेटा को होस्ट करने के लिए अधिक सस्ते, "लोअर-एंड" मशीनों का उपयोग कर सकते हैं, जो शायद अब पर्याप्त नहीं है।


1
मुझे माफ़ कर दें लेकिन डेटाबेस को डेटा स्टोर करने के लिए दृढ़ संकल्प नहीं करना चाहिए। क्या यह एप्लिकेशन टियर पर कोड को प्रभावित करता है?
ojblass

6
मैं लंबे समय से यह समझने की कोशिश कर रहा हूं कि यह क्षैतिज विभाजन से कैसे अलग है, और आपके उत्तर थोड़े में लिंक साबित करता है कि कोई अंतर नहीं है। जैसा कि थियो श्लोस्नागले की पोस्ट पर टिप्पणियों में कोई कहता है, "... यदि आप एक पारंपरिक डेटाबेस संस्कृति से हैं तो आपकी क्षैतिज विभाजन प्रक्रिया, यदि आप एक वेब संस्कारी हैं, तो यह 'शेयरिंग' है ..."
andreister

@andreister मैं जो पढ़ रहा हूं, उसमें से वैचारिक रूप से भिन्न है कि यह कई तार्किक या भौतिक नोड्स (मेरी समझ के मामले में (mySQL) कई डेटाबेस में क्षैतिज रूप से स्केलिंग द्वारा परिभाषित किया गया है), सबसे अधिक संभावना अलग-अलग तार्किक हार्डवेयर पर रखे गए हैं। क्षैतिज विभाजन एक कम विशिष्ट शब्द है, जिसमें से "शेयरिंग" एक सबसेट है। एक उदाहरण के रूप में mySQL का उपयोग करने के बाद, एक mySQL विभाजन को एक एकल db उदाहरण द्वारा नियंत्रित किया जाता है, जो कि एप्लिकेशन के लिए 100% पारदर्शी है। एक शार्डिंग अप्रोच में एक प्रॉक्सी या एक एप्लिकेशन शामिल होता है जो समझदारी से किस उदाहरण को चुना है।
नैटडांस

विकिपीडिया के अनुसार "प्रत्येक व्यक्तिगत विभाजन को एक शार्क या डेटाबेस शार्क के रूप में जाना जाता है।" जो उत्तर में पाठ से थोड़ा अलग है जो कहता है कि "प्रत्येक विभाजन एक हिस्से का हिस्सा है"।
केविन व्हीलर

आपके द्वारा संदर्भित विकि लेख उन दो शब्दों के बीच थोड़ा सा अंतर करता है। क्षैतिज विभाजन विभाजन पंक्ति में एक या एक से अधिक तालिकाओं को विभाजित करता है, आमतौर पर एक स्कीमा और डेटाबेस सर्वर के एकल उदाहरण के भीतर। / *** / साझाकरण इससे आगे जाता है: यह समस्याग्रस्त तालिका (ओं) को उसी तरह से विभाजित करता है, लेकिन यह स्कीमा के संभावित कई उदाहरणों में ऐसा करता है। en.wikipedia.org/wiki/…
पीटर कोक

38

यदि आपके पास एक DBMS के लिए प्रश्न हैं, जिसके लिए स्थानीयता काफी प्रतिबंधित है (कहते हैं, एक उपयोगकर्ता केवल 'जहां उपयोगकर्ता नाम = $ my_username' के साथ चयन करता है) यह सभी उपयोगकर्ता नाम को एक सर्वर पर और सभी NZ से शुरू करने के लिए समझ में आता है दूसरे पर। इसके द्वारा आप कुछ प्रश्नों के लिए रैखिक स्केलिंग के पास पहुँचते हैं।

कहानी संक्षिप्त में : साझाकरण मूल रूप से अलग-अलग सर्वरों पर तालिकाओं को वितरित करने की प्रक्रिया है ताकि दोनों पर लोड को समान रूप से संतुलित किया जा सके।

बेशक, यह वास्तविकता में बहुत अधिक जटिल है। :)


इसलिए आप जिस डेटा को स्टोर कर रहे हैं उसके डिजाइन को प्रभावित करना शार्पिंग को प्रभावित करता है ... क्षमा करें यदि मुझे काफी समझ नहीं है।
ojblass

क्या यह एक क्षैतिज विभाजन नहीं है?
हरनूरधन २०'१६

18

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

हमें वितरित प्रणालियों की आवश्यकता क्यों है?

  • बढ़ी हुई अस्वस्थता।
  • आसान विस्तार।
  • अर्थशास्त्र: एकल बड़े कंप्यूटर की शक्ति के साथ छोटे कंप्यूटर का एक नेटवर्क बनाने के लिए कम खर्च होता है।

आप यहाँ और अधिक पढ़ सकते हैं: वितरित डेटाबेस के लाभ

वितरित प्रणाली को प्राप्त करने में सहायता कैसे तेज होती है?

आप खोज विभाजन को N विभाजनों में विभाजित कर सकते हैं और प्रत्येक सूचकांक को एक अलग सर्वर पर लोड कर सकते हैं। यदि आप एक सर्वर को क्वेरी करते हैं, तो आपको परिणामों का 1 / Nth मिलेगा। इसलिए पूर्ण परिणाम सेट प्राप्त करने के लिए, एक विशिष्ट वितरित खोज प्रणाली एक एग्रीगेटर का उपयोग करती है जो प्रत्येक सर्वर से परिणाम जमा करेगी और उन्हें संयोजित करेगी। एक एग्रीगेटर प्रत्येक सर्वर पर क्वेरी भी वितरित करता है। इस एग्रीगेटर प्रोग्राम को बड़ी डेटा शब्दावली में मैपरेड्यूस कहा जाता है । दूसरे शब्दों में, डिस्ट्रीब्यूटेड सिस्टम्स = शेयरिंग + मैपरेड्यूस (हालाँकि अन्य चीजें भी हैं)।

नीचे एक दृश्य प्रतिनिधित्व। वितरित प्रणाली


7

बहुत बड़े पैमाने पर अनुप्रयोगों में अधिकतर महत्वपूर्ण है या यह छोटे पैमाने पर लागू होता है?

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

इसके अलावा, भविष्य संभवतः एक बड़े पैमाने पर वस्तु "क्लाउड" की तरह कुछ मजेदार और रोमांचक होने वाला है जो सभी संभावित प्रदर्शन सीमाओं को मिटा देता है, है ना? :)


क्या आप ऐसी स्थिति साझा कर सकते हैं, जहाँ आपको शार्पनिंग की आवश्यकता है
गगन बर्ड

4

साझाकरण मूल रूप से Google इंजीनियरों द्वारा गढ़ा गया था और आप Google App Engine पर एप्लिकेशन लिखते समय इसे बहुत अधिक उपयोग करते देख सकते हैं। चूँकि आपके प्रश्नों का उपयोग कर सकने वाले संसाधन की कठिन सीमाएँ हैं और क्योंकि प्रश्नों की स्वयं की कठोर सीमाएँ हैं, इसलिए शार्पिंग को न केवल प्रोत्साहित किया जाता है बल्कि वास्तुकला द्वारा लगभग लागू भी किया जाता है।

डेटा प्लेसिंग पर विवाद को कम करने के लिए एक और स्थान का उपयोग किया जा सकता है। यह विशेष रूप से महत्वपूर्ण है जब डेटा के उन टुकड़ों को देखने के लिए स्केलेबल सिस्टम का निर्माण किया जाता है जो अक्सर लिखे जाते हैं क्योंकि वे हमेशा अड़चन होते हैं। एक अच्छा समाधान यह है कि उस विशिष्ट इकाई को शार्प किया जाए और बहु-प्रतियों को लिखा जाए, फिर कुल पढ़ें। इसका एक उदाहरण "शार्प्ड काउंटर wrt GAE: http://code.google.com/appengine/articles/sharding_count.html.html


7
<< शेयरिंग मूल रूप से Google इंजीनियरों द्वारा गढ़ा गया था - सच नहीं। Google की स्थापना 1998 में हुई थी। scholar.google.com 1980 के दशक से "एक प्रतिकृति डेटाबेस प्रणाली में अप्रचलित सूचनाओं को दूर करने" जैसे कागजात ढूंढता है ... CCA में उच्च स्तर पर उपलब्ध प्रतिकृति डेटा (SHARD) के लिए सिस्टम विकसित किया गया ... मुझे याद है लोगों को सुनना फिर से तेज करने के बारे में बात कर रहे हैं।
क्रेजी गेलव

3

साझाकरण केवल क्षैतिज विभाजन से अधिक होता है। विकिपीडिया लेख के अनुसार ,

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

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

इसके अलावा,

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


1

मेरी राय में एप्लिकेशन टियर को यह निर्धारित करने का कोई व्यवसाय नहीं होना चाहिए कि डेटा कहाँ संग्रहीत किया जाना चाहिए

यह एक अच्छा नियम है लेकिन ज्यादातर चीजें हमेशा सही नहीं होती हैं।

जब आप अपनी वास्तुकला करते हैं तो आप जिम्मेदारियों और सहयोग के साथ शुरू करते हैं। एक बार जब आप अपनी कार्यात्मक वास्तुकला निर्धारित करते हैं, तो आपको गैर-कार्यात्मक बलों को संतुलित करना होगा।

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


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