पिछले 20 वर्षों में मैंने कुछ बड़े माड्यूलर डेटाबेस डिज़ाइन देखे हैं और मैंने डेविड द्वारा सुझाए गए परिदृश्य को देखा है जो अब कुछ ही समय में हैं जहाँ एप्लिकेशन ने अपने स्वयं के स्कीमा / तालिकाओं के सेट तक पहुंच लिखी है और किसी अन्य स्कीमा / तक पहुंच को पढ़ा है। तालिकाओं का सेट। अधिकतर यह डेटा कि एक एप्लिकेशन / मॉड्यूल को केवल-पढ़ने के लिए एक्सेस मिलता है, जिसे "मास्टर डेटा" के रूप में वर्णित किया जा सकता है ।
उस समय में मैंने उन समस्याओं को नहीं देखा है जो पूर्व के उत्तर सुझा रहे हैं, जिन्हें मुझे देखना चाहिए था इसलिए मुझे लगता है कि पिछले उत्तरों में उठाए गए बिंदुओं पर अधिक विस्तार से ध्यान देने योग्य है।
परिदृश्य: आप सीधे RDBMS में कुछ घटकों को बाँधते हैं, और आप एक विशेष घटक को एक प्रदर्शन बोतल-नेक बनाते हुए देखते हैं
मैं इस टिप्पणी से सहमत हूँ, सिवाय इसके कि यह भी एक तर्क है कि स्थानीय स्तर पर डेटा की एक प्रति माइक्रोसेवा को पढ़ने के लिए है। यही है, अधिकांश परिपक्व डेटाबेस प्रतिकृति का समर्थन करते हैं और इसलिए किसी भी डेवलपर के प्रयास के बिना "मास्टर डेटा" को भौतिक रूप से माइक्रोसैस डेटाबेस पर दोहराया जा सकता है यदि वह वांछित है या जरूरत है।
कुछ लोग इसे "एंटरप्राइज डेटाबेस" के रूप में पुराने तालमेल में पहचान सकते हैं जो कोर तालिकाओं को "डिपार्टमेंटल डेटाबेस" के रूप में दर्शाते हैं। यहां एक बिंदु यह है कि आम तौर पर यह अच्छा होता है अगर कोई डेटाबेस बदले हुए डेटा (केवल बाइनरी फॉर्म में और स्रोत डेटाबेस के लिए कम से कम लागत पर डेल्टा) की प्रतिकृति में हमारे साथ ऐसा करता है।
इसके विपरीत, जब हमारे डेटाबेस विकल्प इस 'शेल्फ' प्रतिकृति समर्थन को बंद नहीं होने देते हैं तो हम एक ऐसी स्थिति में पहुंच सकते हैं, जहां हम "मास्टर डेटा" को माइक्रोसेवा डेटाबेस से बाहर धकेलना चाहते हैं और इसके परिणामस्वरूप डेवलपर के प्रयास का एक महत्वपूर्ण हिस्सा हो सकता है और यह भी एक काफी कम कुशल तंत्र हो।
डेटाबेस को असामान्य करना चाहते हैं, लेकिन आप नहीं कर सकते क्योंकि अन्य सभी घटक प्रभावित होंगे
मेरे लिए यह कथन सही नहीं है। अपभ्रंश एक "योजक" परिवर्तन है और "विराम परिवर्तन" नहीं है और न ही किसी अनुप्रयोग को अपभ्रंश के कारण तोड़ना चाहिए।
एकमात्र तरीका यह है कि एक एप्लिकेशन को तोड़ता है, जहां एप्लिकेशन कोड "सेलेक्ट * ..." जैसी चीज का उपयोग करता है और एक अतिरिक्त कॉलम को हैंडल नहीं करता है। मेरे लिए कि आवेदन में एक बग होगा?
कैसे एक आवेदन को तोड़ सकते हैं? मुझे FUD लगता है।
स्कीमा निर्भरता:
हां, एप्लिकेशन में अब डेटाबेस स्कीमा पर निर्भरता है और निहितार्थ यह है कि यह एक बड़ी समस्या होनी चाहिए। किसी भी अतिरिक्त निर्भरता को जोड़ते समय स्पष्ट रूप से आदर्श नहीं है कि मेरा संकेतन आदर्श है कि डेटाबेस स्कीमा पर निर्भरता एक समस्या नहीं है, इसलिए ऐसा क्यों हो सकता है? क्या मैं सिर्फ भाग्यशाली रहा हूं?
मुख्य आंकडे
स्कीमा जिसे हम आम तौर पर चाहते हैं कि एक माइक्रो-सर्विस के पास केवल-पढ़ने के लिए पहुंच हो, आमतौर पर मैं उद्यम के लिए " मास्टर डेटा " के रूप में वर्णन करता हूं । इसमें मुख्य डेटा है जो उद्यम के लिए आवश्यक है।
ऐतिहासिक रूप से इसका मतलब यह है कि जिस स्कीमा पर हम निर्भरता जोड़ते हैं, वह परिपक्व और स्थिर (उद्यम और अपरिवर्तनीय कुछ मौलिक) है।
मानकीकरण
यदि 3 डेटाबेस डिज़ाइनर जाते हैं और एक सामान्य डीबी स्कीमा डिज़ाइन करते हैं तो वे उसी डिज़ाइन पर समाप्त हो जाएंगे। ठीक है, कुछ 4NF / 5NF भिन्नता हो सकती है लेकिन ज्यादा नहीं। और भी बहुत सारे सवाल हैं जो डिजाइनर मॉडल को मान्य करने के लिए कह सकते हैं ताकि डिजाइनर को विश्वास हो सके कि वे 4NF को मिल गए हैं (क्या मैं भी आशावादी हूं? क्या लोग 4NF के लिए संघर्ष कर रहे हैं?)।
अद्यतन: तक 4NF यहाँ मेरा मतलब है स्कीमा में सभी तालिकाओं (सभी तालिकाओं उचित रूप से 4NF अप करने के लिए सामान्यीकृत गया) 4NF अप करने के लिए अपने उच्चतम सामान्य रूप के लिए मिला है।
मेरा मानना है कि सामान्यीकरण डिज़ाइन प्रक्रिया यही है कि डेटाबेस डिज़ाइनर सामान्य रूप से सामान्यीकृत डेटाबेस स्कीमा पर निर्भर होने के विचार के साथ सहज होते हैं।
सामान्यीकरण की प्रक्रिया एक ज्ञात "सही" डिज़ाइन के लिए डीबी डिज़ाइन प्राप्त करती है और प्रदर्शन से भिन्न होने के लिए वहां से भिन्नता होनी चाहिए।
- समर्थित DB प्रकार (JSON, ARRAY, भू प्रकार समर्थन आदि) के आधार पर भिन्नताएं हो सकती हैं
- कुछ 4NF / 5NF के आधार पर भिन्नता के लिए तर्क दे सकते हैं
- हम भौतिक भिन्नता को बाहर करते हैं (क्योंकि इससे कोई फर्क नहीं पड़ता)
- हम इसे OLTP डिज़ाइन तक सीमित करते हैं न कि DW डिज़ाइन के लिए क्योंकि वे स्कीमा हैं जिन्हें हम केवल पढ़ने के लिए एक्सेस देना चाहते हैं
यदि 3 प्रोग्रामर जहां लागू करने के लिए एक डिज़ाइन दिया गया है (कोड के रूप में) तो उम्मीद 3 अलग कार्यान्वयन (संभावित रूप से बहुत अलग) के लिए होगी।
मेरे लिए संभावित रूप से "सामान्यीकरण में विश्वास" का सवाल है।
ब्रेकिंग स्कीमा में बदलाव?
विघटन, कॉलम जोड़ना, बड़े भंडारण के लिए कॉलम बदलना, नए तालिकाओं के साथ डिजाइन का विस्तार करना आदि सभी गैर-ब्रेकिंग परिवर्तन हैं और डीबी डिज़ाइनर जो 4 के सामान्य रूप में प्राप्त हुए हैं, उन पर विश्वास किया जाएगा।
कॉलम / टेबल को गिराकर या ब्रेकिंग प्रकार परिवर्तन करके स्पष्ट रूप से परिवर्तन संभव हैं। संभव हाँ, लेकिन व्यावहारिक रूप से मैंने यहाँ किसी भी समस्या का अनुभव नहीं किया है। शायद इसलिए कि यह समझा जाता है कि परिवर्तन क्या होते हैं और इनका प्रबंधन अच्छी तरह से किया जाता है?
मुझे साझा रीड-ओनली स्कीमा के संदर्भ में स्कीमा परिवर्तन के मामलों को सुनने में दिलचस्पी होगी।
एक microservice के बारे में अधिक महत्वपूर्ण और महत्वपूर्ण है: इसके एपीआई या इसके डेटाबेस स्कीमा? एपीआई, क्योंकि यह दुनिया के बाकी हिस्सों के साथ इसका अनुबंध है।
जब मैं इस कथन से सहमत हूं तो मुझे लगता है कि एक महत्वपूर्ण चेतावनी है जो हम एक एंटरप्राइज़ आर्किटेक्ट से सुन सकते हैं जो "डेटा हमेशा के लिए रहता है" । यह है, जबकि एपीआई सबसे महत्वपूर्ण बात हो सकती है डेटा भी उद्यम के रूप में एक पूरे के रूप में महत्वपूर्ण है और यह बहुत लंबे समय के लिए महत्वपूर्ण होगा।
उदाहरण के लिए, एक बार बिजनेस इंटेलिजेंस के लिए डेटा वेयरहाउस को पॉप्युलेट करने की आवश्यकता होती है, फिर एपीआई के बावजूद बिजनेस रिपोर्टिंग के नजरिए से स्कीमा और सीडीसी सपोर्ट महत्वपूर्ण हो जाता है।
एपीआई के साथ मुद्दे?
अब अगर एपीआई सही और आसान थे, तो सभी बिंदुओं को लूट लिया जाता है क्योंकि हम स्थानीय रीड-ओनली एक्सेस के बजाय हमेशा एपीआई का चयन करेंगे। इसलिए स्थानीय रीड-ओनली एक्सेस पर विचार करने की प्रेरणा यह है कि एपीआई की स्थानीय पहुँच से बचने के लिए कुछ समस्याओं का सामना करना पड़ सकता है।
What motivates people to desire local read-only access?
एपीआई अनुकूलन:
लिंक्डइन में उनके एपीआई के अनुकूलन के मुद्दे पर (2009 से) एक दिलचस्प प्रस्तुति है और यह उनके पैमाने पर उनके लिए महत्वपूर्ण क्यों है। http://www.slideshare.net/linkedin/building-consistent-restful-apis-in-a-highperformance-environment
संक्षेप में, एक बार एक एपीआई को कई अलग-अलग उपयोग के मामलों का समर्थन करना पड़ता है, यह आसानी से उस स्थिति में पहुंच सकता है जहां यह एक उपयोग के मामले को बेहतर तरीके से समर्थन करता है और बाकी को नेटवर्क के नजरिए और डेटाबेस के नजरिए से खराब तरीके से।
यदि एपीआई में लिंक्डइन की तरह ही परिष्कार नहीं है, तो आप आसानी से परिदृश्यों को प्राप्त कर सकते हैं:
- API को आपकी आवश्यकता से बहुत अधिक डेटा प्राप्त होता है (बेकार)
- Chatty API का जहाँ आपको एपीआई को कई बार कॉल करना होगा
हां, हम एपीआई में कैशिंग जोड़ सकते हैं, लेकिन अंततः एपीआई कॉल एक दूरस्थ कॉल है और डेटा स्थानीय होने पर डेवलपर्स के लिए कई अनुकूलन उपलब्ध हैं।
मुझे संदेह है कि वहाँ लोगों का एक समूह है जो इसे जोड़ सकते हैं:
- मास्टर डेटा की कम लागत प्रतिकृति माइक्रोसर्विस डेटाबेस (बिना विकास लागत और तकनीकी रूप से कुशल)
- सामान्यीकरण में विश्वास और स्कीमा में अनुप्रयोगों के लचीलेपन में परिवर्तन होता है
- आसानी से हर उपयोग के मामले का अनुकूलन करने और संभावित रूप से चैट / बेकार / अक्षम रिमोट एपीआई कॉल से बचने की क्षमता
- इसके अलावा बाधाओं और सुसंगत डिजाइन के संदर्भ में कुछ अन्य लाभ
इस जवाब को बहुत लंबा रास्ता मिल गया है। क्षमा याचना!!