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