आप लगातार बदलते डेटाबेस आयामों को कैसे संभालते हैं?


9

पिछले दो महीनों से या तो मैं डेटाबेस के भीतर रिलीज प्रबंधन को संभालने के लिए समाधान या प्रथाओं की तलाश कर रहा हूं। मैं देख रहा हूँ कि लोग इसे संभालने के लिए सबसे अच्छी प्रक्रिया के रूप में क्या देखते हैं।

हमारे डेटाबेस के लिए हमारे पास 3 वातावरण हैं:

  • विकास
  • उपयोगकर्ता स्वीकृति परीक्षण (UAT)
  • उत्पादन

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

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

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

किसी प्रक्रिया पर कोई सुझाव?

धन्यवाद


ऐसा लगता है कि आपकी डेटाबेस स्क्रिप्ट आपके "वास्तविक" कोड के समान स्रोत नियंत्रण में नहीं हैं। ऐसा क्यों है? क्या आप इसे "स्रोत कोड" मान सकते हैं और इसे व्यक्तिगत शाखाओं के साथ रख सकते हैं?
माइक एम।

वर्तमान में हम केवल स्रोत नियंत्रण में स्क्रिप्ट के विकास संस्करण को संग्रहीत करते हैं और यूएटी / उत्पादन दोनों सक्रिय विकास के साथ सिंक से बाहर हो जाते हैं। जब भी कोई डेवलपर कमिट करता है, तो हर बार स्रोत नियंत्रण की प्रत्येक स्क्रिप्ट को अपडेट किया जाता है। व्यक्तिगत शाखाओं के साथ समस्या यह है कि हमारे पास 1 केंद्रीकृत डेटाबेस है जिसका उपयोग हर कोई करता है (बड़े परिवर्तनों के लिए हम अलग-अलग डेटाबेस को शाखा देते हैं)।

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

ऐसा लगता है कि एक बहुत जल्दी से तारीख से बाहर होने की संभावना है। नहीं? मेरी परियोजनाओं में से एक के लिए हम डेटाबेस के बड़े पैमाने पर ओवरहाल के बीच में हैं, इसलिए हमने शाखा की कि एक बंद करें ताकि सक्रिय विकास अभी भी डेटाबेस के अनमॉडिफाइड संस्करण में हो सके। हालांकि, प्रत्येक दिन मैं अपने ब्रांच वाले संस्करण को अधिक से अधिक तारीख से बाहर होते हुए देख रहा हूं, जो मुझे यकीन नहीं है कि यह ठीक है या नहीं ... मुझे वास्तव में इस तरह की स्थितियों से पहले कभी नहीं निपटना था।
जूडा

जवाबों:


5

माइग्रेशन

एक अप और एक डाउन, जो आपके रेपो में है और आपके ऐप के साथ टैग किया गया है।

आप sql फ्लैटफाइल्स के साथ DIY भी कर सकते हैं जो आपके स्कीमा को संशोधित करता है और स्कीमा संस्करण को अपडेट करता है। आपको बस इतना करना है:

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

वैसे आप विकास परिवर्तन देव में कर सकते हैं, लेकिन आपको हमेशा डीबी को उड़ा देना चाहिए और परिवर्तन पर कब्जा करने के बाद इसे माइग्रेशन के साथ पुनर्निर्माण करना चाहिए।


अगर स्क्रिप्ट में बग पाया गया तो क्या होगा? क्या आप sql स्क्रिप्ट पर वापस जाते हैं और इसे अपडेट करते हैं?
जूडा

1
नहीं, आप एक नया माइग्रेशन बनाते हैं (जो स्कीमा संस्करण को बढ़ाता है)। डेटाबेस में स्कीमा संस्करण को देखकर आपको पता चल जाता है कि फिक्स को कैसे तैनात किया गया है।
डायटबुद्ध

आपके सहयोग के लिए धन्यवाद। पहली नज़र से यह बहुत ठोस दृष्टिकोण और हमारी शाखा रणनीति के समान प्रतीत होता है।
जूडा

2

स्रोत नियंत्रण!

आप svn / git / p4 के माध्यम से उत्पादन के बिना सीधे अपने विकास बायनेरिज़ को तैनात नहीं करते हैं, इसलिए आपके डेटाबेस अकेले ऐसा क्यों करेंगे? डेवलपर्स के लिए अपने स्थानीय परिवर्तनों का परीक्षण करने के लिए निजी उदाहरण प्राप्त करें, लेकिन जब इसे विकास डीबी में जाना है, तो इसे डीडीएल फाइलों में जांच से गुजरना होगा। आप इन ddl परिवर्तनों को स्वचालित रूप से लागू करने के लिए उपकरण भी लिख सकते हैं (मुझे इसे सही तरीके से करने का कोई मौजूदा तरीका नहीं पता है)।

एक बार आपके पास db स्कीमा परिवर्तन के स्थान पर प्रतिबंध (कोई और अधिक sqlplus -> मुद्दा ddl!) नहीं है और सख्त खाता नियंत्रण (सभी के लिए कोई ddl एक्सेस नहीं है), यह अधिक प्रबंधनीय हो जाना चाहिए।


1
अफसोस की बात है कि हमारे डेटाबेस निजी सत्रों को चलाने के लिए डेवलपर्स के बीच पारित होने के लिए बहुत बड़े हैं। के रूप में अच्छी तरह से वास्तव में अधिक टीम आधारित विकास की ओर झुकाव करने के लिए प्रतीत नहीं होता है क्योंकि अभी, मैं यूआई काम के लिए लोगों के साथ दोनों को जोड़ने के साथ बात करते हुए वापस विकास करता हूं। मुझे सभी परिवर्तनों की जाँच करके और फिर उन्हें डेटाबेस पर नवीनतम प्राप्त करने के लिए शुरू करने की आवश्यकता होगी, जो एक बड़ी परेशानी प्रतीत होती है।
जुडा

आपके विकास db का उत्पादन db के समान आकार क्यों है? उनके पास एक ही स्कीमा हो सकता है, और आपके पास सभी डेटा के साथ एक विशेष लोड परीक्षण बेड़े भी हो सकता है, लेकिन स्थानीय देव डेटाबेस छोटा हो सकता है। यह डेटा लीक की चिंताओं आदि को भी रोकता है - सिद्धांत रूप में, ठेस डेटा को विकास को प्रभावित नहीं करना चाहिए।
सुबु शंकर सुब्रमण्यन

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

पूरे DB को दोहराने की आवश्यकता नहीं है। Oracle में प्रत्येक उपयोगकर्ता का अपना स्कीमा होता है और हमारे पास एक अनुप्रयोग स्कीमा होता है। एप्लिकेशन स्कीमा में सभी ऑब्जेक्ट के लिए सार्वजनिक समानार्थक शब्द बनाएं। फिर प्रत्येक उपयोगकर्ता अपने स्वयं के स्कीमा में ऑब्जेक्ट्स (टेबल, एसपी) को बदल सकता है और यदि वे खुद को कनेक्ट करते हैं तो उनके ऑब्जेक्ट नाम का उपयोग किया जाएगा। उन वस्तुओं के लिए जो स्कीमा में नहीं हैं, पर्यायवाची शब्द woukd का उपयोग किया जाना चाहिए। इसी तरह हम काम करते हैं।
मुलायम ने

0

माइग्रेशन का उपयोग करने के सुझाव के साथ ... शायद एक O / RM का उपयोग करें जो रूबी जैसे रेल और एंटिटी फ्रेमवर्क पर माइग्रेशन का समर्थन करता है 4.3 दोनों दृष्टिकोणों के साथ समस्या हालांकि यह है कि एक माइग्रेशन सभी या कुछ भी नहीं है। आप (आमतौर पर) यह नहीं चुन सकते हैं कि परिवर्तन सेट के संदर्भ में आप कौन से माइग्रेशन लागू कर सकते हैं।

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

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