एक नया डेटाबेस बनाम नॉन-डोब स्कीमा का उपयोग करने के बारे में निर्णय मानदंड


22

मैं ज्यादातर एक एप्लिकेशन डेवलपर हूं, लेकिन अपने वर्तमान प्रोजेक्ट के लिए सभी अप-फ्रंट डेटाबेस काम करने के लिए खुद को ढूंढता हूं ( btw ... इसका एमएस SQL ​​सर्वर 2008 )। पहले निर्णय के रूप में, मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या अलग-अलग डेटाबेस का उपयोग करके या एक ही डेटाबेस में अलग स्कीमा का उपयोग करके मेरे राज्य को विभाजित करना है या नहीं। मैंने SQL Server स्कीमा पर थोड़ी सी रीडिंग की है और यह ऑब्जेक्ट डोमेन ( जो मुझे पसंद है ) को अलग करने के लिए एक प्राकृतिक तरीका लगता है , लेकिन मुझे यकीन नहीं है कि इस पैटर्न में छिपी हुई लागत हो सकती है।

इन दो दृष्टिकोणों के बीच चयन करते समय मुझे और किन व्यावहारिक बातों पर विचार करना चाहिए? अगर मैं अपने आर्किटेक्चर के लिए अन्य चुनौतियों ( या समस्याओं ) का सामना करूंगा तो क्या मैं इसके dbo.mytableपक्ष से बचूंगा?myschema.mytable

एक साइड नोट के रूप में ... कुछ बिंदु पर इसे बनाए रखने / समर्थन करने के लिए एक वास्तविक डीबीए को सौंप दिया जाएगा, इसलिए मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि मैं उनके जीवन को कठिन नहीं बनाता हूं।


dbo के अलावा एक स्कीमा का उपयोग करने का एक साइड इफेक्ट यह है कि आप इसे लिखना नहीं भूलते हैं। यह निष्पादन योजना के पुन: उपयोग की दिशा में एक कदम है।
हेनरिक स्टॉउन पोल्सेन

जवाबों:


15

मैं यह कहकर शुरू करूँगा कि ओओएम अर्थों में स्कीमा को नामस्थान या ऑब्जेक्ट डोमेन के रूप में न समझें। स्कीमा अनिवार्य रूप से कुछ अतिरिक्त मूल्य वाले कंटेनरों को अनुमति देते हैं (नीचे देखें)

इसके अलावा, "अलग स्कीमा" या "अलग डेटाबेस" 2 अलग-अलग अवधारणाएं हैं। डेटा जिसे ट्रांजेक्शनल और रेफ़रेंशियल रूप से सुसंगत होना चाहिए, उसी डेटाबेस में होना चाहिए। एक डेटाबेस या दस देखें ? अधिक के लिए ब्लॉग लेख।

उस डेटाबेस में, आप अपनी वस्तुओं को व्यवस्थित करने के लिए स्कीमा का उपयोग कर सकते हैं या नहीं भी कर सकते हैं।

व्यक्तिगत रूप से, मैं स्कीमा का प्रशंसक हूं और हमेशा उनका उपयोग करता हूं लेकिन अनुमति और तार्किक समूहन जैसी चीजों के लिए। उसके लिए, मैं आपको पिछले प्रश्नों का उल्लेख करूँगा जहाँ आप देख सकते हैं कि आम राय उनके पक्ष में है:

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


9

@ से सहमत। मैंने अलग-अलग और डेटाबेस के लिए स्कीमा का उपयोग करके अलग-अलग समाधानों का उपयोग किया है, और मुझे लगता है कि डेटाबेस का उपयोग करना अधिक व्यावहारिक है। कारणों की एक जोड़ी:

  1. आपका एप्लिकेशन किसी संदर्भ-विशिष्ट डेटाबेस से कनेक्ट होता है और फिर <schema>सभी ऑब्जेक्ट संदर्भों के सामने आपके प्रश्नों को इंजेक्ट करने की तुलना में समान क्वेरी चलाना बहुत आसान होता है । यह स्वयं को बहुत अधिक गतिशील एसक्यूएल के लिए उधार देता है, डिफ़ॉल्ट स्कीमा के साथ बहुत सारे अलग-अलग एप्लिकेशन लॉगिन (जिसका अर्थ है कि आपका कोड स्कीमा उपसर्ग का उपयोग नहीं करेगा, एप्लिकेशन उपयोगकर्ता के डिफ़ॉल्ट स्कीमा पर निर्भर करता है - बड़े पैमाने पर प्लान कैश ब्लोट और कठिन डिबगिंग को जन्म दे सकता है,) या प्रबंधित करने के लिए बहुत सारी संग्रहीत कार्यविधियाँ (चित्र सिर्फ एक साधारण रिपोर्ट, यदि आपको प्रति स्कीमा एक की आवश्यकता है, तो कोड बदल जाता है, अब आपको एक ही कोड को कई बार बदलना होगा, प्रत्येक स्कीमा के लिए)।
  2. डेटाबेस से अलग होने से आप एक बड़े सभी शामिल डेटाबेस से बाहर चीर वस्तुओं के बिना व्यस्त डेटाबेस को तेज या अलग भंडारण / उदाहरणों में स्थानांतरित करने की अनुमति देता है। ज्यादातर लोग इसके बारे में पहले से सोचते नहीं हैं, लेकिन यह निश्चित रूप से एक संभावित पैमाने की समस्या है। विशेष रूप से यदि आप एक स्कीमा को समाप्त करते हैं जो "लेता है" और सर्वर पर अधिकांश संसाधनों की आवश्यकता होती है, तो उन्हें अलग करना एक अत्यंत बोझिल कार्य हो सकता है, भले ही वे पहले से ही स्कीमा द्वारा अलग हो गए हों।
  3. अलग-अलग डेटाबेस आपको प्रत्येक डिवीजन के लिए अलग-अलग रखरखाव और बैकअप शेड्यूल करने की अनुमति भी दे सकते हैं। मुझे यकीन नहीं है कि आप "राज्य द्वारा विभाजित" से क्या मतलब है, लेकिन यह मानकर कि आप ग्राहकों को अलग-थलग करते हैं, आपके पास अलग-अलग आवश्यकताओं वाले ग्राहक हो सकते हैं और डेटा हानि, सूचकांक रखरखाव आदि के लिए अलग-अलग सहिष्णुता हो सकती है।
  4. आप उन ग्राहकों के साथ समाप्त हो सकते हैं, जो कानून या कॉर्पोरेट नीति द्वारा, आपको अपने डेटा को किसी और से अलग रखने की आवश्यकता है। यह आमतौर पर डेटाबेस स्तर पर स्वीकार्य है, लेकिन स्कीमा स्तर आमतौर पर अपर्याप्त होने वाला है। अब आपके पास ये ग्राहक नहीं हो सकते हैं, लेकिन अगर आप ऐसा करते हैं तो यह एक वास्तविक समस्या बन सकती है।

3
अब गोल्डन सवाल यह है कि "क्या सभी डेटा ट्रांजेक्शनल और रेफ़रेंशियल कंसिस्टेंट हैं"? अब मैं मानता हूं और आपका उत्तर इसके लिए सही है
gbn

@ यह एक बहुत अच्छा सवाल है और कुछ मुझे एक रास्ते पर करने से पहले कुछ विचार देने की जरूरत है।
जोजेकी

@AaronBertrand यह दिलचस्प है ... लगता है जैसे मुझे थोड़ी क्षमता की योजना बनाने की ज़रूरत है, और देखें कि स्केलिंग के मुद्दे कहाँ पैदा हो सकते हैं। यदि क्षैतिज रूप से स्केलिंग उपयुक्त है, तो अलग डेटाबेस एक अच्छा विकल्प हो सकता है? अन्यथा, मुझे अन्य पैटर्न पर विचार करना होगा।
जोजेकी

2
@JoeGeeky: "लेनदेन और संदर्भ के अनुरूप" के अधीन, एकल डेटाबेस को फ़ाइलग्रुप के साथ भी स्केल किया जा सकता है। वैसे भी, आपके पास आपके उपयोग के मामले के आधार पर 2 मान्य ऐनर हैं। न गलत है।
gbn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.