मेरे पास विकास, परीक्षण और उत्पादन सर्वर के बीच डेटाबेस स्कीमा और डेटा का प्रबंधन करने के तरीके के अच्छे उदाहरण खोजने का कठिन समय है।
यहाँ हमारा सेटअप है। प्रत्येक डेवलपर के पास हमारे ऐप और MySQL डेटाबेस को चलाने वाली एक वर्चुअल मशीन होती है। यह उनका व्यक्तिगत सैंडबॉक्स है जो वे चाहते हैं। वर्तमान में, डेवलपर्स SQL स्कीमा में परिवर्तन करेंगे और डेटाबेस की एक डंप को एक पाठ फ़ाइल में करेंगे जो वे एसवीएन में करते हैं।
हम एक निरंतर एकीकरण विकास सर्वर को तैनात करना चाहते हैं जो हमेशा नवीनतम प्रतिबद्ध कोड चला रहा हो। अगर हम अब ऐसा करते हैं, तो यह प्रत्येक बिल्ड के लिए SVN से डेटाबेस को फिर से लोड करेगा।
हमारे पास एक परीक्षण (वर्चुअल) सर्वर है जो "रिलीज उम्मीदवारों" को चलाता है। वर्तमान में परीक्षण सर्वर पर नियोजन एक बहुत ही मैन्युअल प्रक्रिया है, और आमतौर पर मुझे एसवीएन से नवीनतम एसक्यूएल लोड करना और इसे ट्विक करना शामिल है। इसके अलावा, परीक्षण सर्वर पर डेटा असंगत है। आपके सैंडबॉक्स सर्वर पर अंतिम डेवलपर के पास जो भी परीक्षण डेटा है, उसके साथ आप समाप्त होते हैं।
जहां सब कुछ टूट जाता है उत्पादन के लिए तैनाती है। चूंकि हम परीक्षण डेटा के साथ लाइव डेटा को अधिलेखित नहीं कर सकते हैं, इसमें मैन्युअल रूप से सभी स्कीमा परिवर्तनों को फिर से बनाना शामिल है। यदि डेटा में हेरफेर करने के लिए बड़ी संख्या में स्कीमा परिवर्तन या रूपांतरण स्क्रिप्ट थे, तो यह वास्तव में बालों वाला हो सकता है।
यदि समस्या सिर्फ स्कीमा थी, तो यह एक आसान समस्या होगी, लेकिन डेटाबेस में "आधार" डेटा है जो विकास के दौरान भी अपडेट किया जाता है, जैसे कि सुरक्षा और अनुमति तालिकाओं में मेटा-डेटा।
निरंतर एकीकरण और वन-स्टेप-बिल्ड की ओर बढ़ने में यह सबसे बड़ी बाधा है। आप इसे कैसे हल करते हैं?
एक अनुवर्ती प्रश्न: आप डेटाबेस संस्करणों को कैसे ट्रैक करते हैं ताकि आप जान सकें कि किसी दिए गए डेटाबेस उदाहरण को अपग्रेड करने के लिए कौन सी स्क्रिप्ट को चलाना है? क्या मानक प्रक्रिया से नीचे लांस उल्लेखों की तरह एक संस्करण तालिका है?
टारनटिनो के संदर्भ के लिए धन्यवाद। मैं एक .NET वातावरण में नहीं हूँ, लेकिन मुझे उनका DataBaseChangeMangement wiki पेज बहुत मददगार लगा। विशेष रूप से यह पावरपॉइंट प्रस्तुति (.ppt)
मैं एक पायथन स्क्रिप्ट लिखने जा रहा हूं *.sql
, जो डेटाबेस में एक टेबल के खिलाफ दिए गए डायरेक्टरी में स्क्रिप्ट के नामों की जांच करता है और उन लोगों को चलाता है जो एक पूर्णांक के आधार पर क्रम में नहीं हैं जो फ़ाइल नाम का पहला भाग बनाता है। यदि यह एक बहुत सरल समाधान है, जैसा कि मुझे संदेह है कि यह होगा, तो मैं इसे यहां पोस्ट करूंगा।
मुझे इसके लिए एक वर्किंग स्क्रिप्ट मिली है। यह DB को इनिशियलाइज़ करने का काम करता है अगर यह मौजूद नहीं है और आवश्यकतानुसार अपग्रेड स्क्रिप्ट चला रहा है। एक मौजूदा डेटाबेस को पोंछने और एक फ़ाइल से परीक्षण डेटा आयात करने के लिए स्विच भी हैं। यह लगभग 200 लाइनें है, इसलिए मैं इसे पोस्ट नहीं करूंगा (हालांकि अगर यह ब्याज है तो मैं इसे पास्टबिन पर रख सकता हूं)।