2014-11-17 2 views
7

में सुधार मैं हाल ही में ठंड माइग्रेशन कर रहे हैं ... जिसका मतलब है कि मैं थोड़ी देर के माइग्रेशन (रखरखाव पेज) कर एक आवेदन स्तर डेटाबेस के लिए/लिखने पढ़ने के लिए यह असंभव से बनाते हैं।बनाम ठंड mysql स्कीमा माइग्रेशन गर्म और गति

इस तरह त्रुटियों को संरचना में बदलावों के लिए नहीं होगा और यदि बहुत भार है तो मैं माइग्रेशन को माइग्रेशन के बीच में क्रैश नहीं करना चाहूंगा।

मेरी संरचना यह है कि प्रत्येक ग्राहक को अपना डेटाबेस प्राप्त होता है। इस दृष्टिकोण का एकमात्र नकारात्मक पक्ष यह है कि कितने बदलाव किए गए हैं, इस पर निर्भर करते हुए उनका 15-45 मिनट का डाउनटाइम हो सकता है।

एक ही समय में चल रहे कोड के 2 प्रतियां है:

इस मेरे समाधान निम्नलिखित होगा। मेरे पास कोड है जो यह पता लगाता है कि वे किस कार्यक्रम के संस्करण पर हैं और यदि वे अभी भी पुराने हैं तो उन्हें पुराना कोड दिखाएं ... यदि वे नए हैं तो उन्हें नया कोड दिखाएं

एकमात्र ऐसा हिस्सा जो मुझे डराता है कोई माइग्रेशन के बीच में सेवा हमले से इनकार करता है मुझे गंभीर समस्याएं हो सकती हैं।

मेरे पास अभी 360 डेटाबेस हैं।

क्या गर्म विधि की सिफारिश की गई है? मैं बस इसके बीच में सेवा के इनकार या किसी प्रकार की mysql क्वेरी त्रुटि के बारे में चिंतित हूं क्योंकि उनके डेटा में बदलाव हो सकते हैं। मैंने यह एक बार पहले किया था लेकिन सौभाग्य से यह माइग्रेशन शुरू करने से ठीक पहले था।

+0

पहली बात, जब सर्वर डाउन होने पर आप एक पृष्ठ ऐसा ही कुछ कहते हैं प्रदान कर सकता है इसके अस्थायी रखरखाव (के लिए एक घंटे के लिए नीचे इतना ठंडा अद्यतन ठीक करता है, तो तुमने किया था कि ... Ive ऐसा पृष्ठों तक पहुँच से पहले और बाद नीचे समय केवल 45 मिनट जैसा होगा ऐसा प्रतीत नहीं होता कि ऐसा भी हो सकता है हो सकता है एक समय का लंबा) ... दूसरी बात, आप एक अलग डेटाबेस में प्रत्येक ग्राहक के लिए डेटा क्यों संग्रहीत कर रहे हैं? उनकी सामग्री/संग्रहण आवश्यकता है जो प्रति ग्राहक विशाल है? लगता है कि आपको लगता है कि तुलना में एक बेहतर सेटअप करने के लिए सक्षम होना चाहिए। –

+0

मैं बिक्री प्रणाली के एक बिंदु है और प्रत्येक ग्राहक के लिए अपने स्वयं के डेटाबेस हो जाता है और मैं एक एक करके उन्हें एक ओर पलायन।यह ऐसा करता है ताकि प्रत्येक ग्राहक के लिए सबकुछ स्वयं निहित हो और आसानी से पोर्टेबल हो। मैंने अपनी माइग्रेशन रणनीति का परीक्षण किया और यह बहुत अच्छी तरह से काम करता प्रतीत होता है। इसमें लगभग 30-45 मिनट लगते हैं लेकिन मूल रूप से कोई डाउनटाइम नहीं होता है। –

उत्तर

3

आपका विचार काम करेगा ही अगर "नया कोड बेस" "पुराने डीबी संस्करण" के साथ 100% संगत है, वरना जबकि डीबी प्रवास प्रगति पर है यह क्रैश हो सकता है। साथ ही, यह आवश्यक है कि डीबी माइग्रेशन के दौरान किसी भी स्तर पर, डेटाबेस कभी असंगत स्थिति में नहीं है (शायद उचित लेनदेन में माइग्रेशन चरणों को लपेटकर)।

तो ressources की अनुमति देते हैं, मैं करूंगा:

  • स्थापित करने और एक नया आभासी मेजबान के तहत नए कोड बेस कॉन्फ़िगर करते हैं, नए डेटाबेस पर इशारा करते हुए (नीचे देखें)
  • पढ़ने में "पुराने" साइट डाल -only मोड
  • वर्तमान डेटाबेस नकल
  • नए संस्करण
  • स्विच नया कोड बेस को वर्चुअलहोस्ट (सुनिश्चित करें कि आप maintenan लिफ्ट बनाने के लिए डुप्लिकेट डेटाबेस विस्थापित ही डीबी सर्वर पर, सीई मोड :)
  • नए संस्करण को कुछ घंटों तक परिपक्व होने दें, और फिर पुराने कोड बेस, डीबी और वर्चुअल होस्ट को छोड़ दें।

(तुम भी आभासी मेजबान को संवारता छोड़ सकते हैं और बजाय सांकेतिक लिंक का उपयोग कर सकते हैं) अगर किसी पृष्ठ का उपयोग करने की कोशिश की

+0

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

+0

मैं लेनदेन की स्थिरता सोच रहा था। मुझे खेद है, फिलहाल मैं डेटाबेस माइग्रेशन के लिए विशिष्ट यथार्थवादी उदाहरण के साथ आने में असमर्थ हूं। लेकिन इसी कारण से जीवन के सामान्य पाठ्यक्रम के दौरान लेनदेन की आवश्यकता होती है आपके आवेदन, लेनदेन को लाइव सर्वर पर लागू माइग्रेशन क्वेरीज़ के लिए आवश्यक होने की संभावना है। आखिरकार, माइग्रेशन क्वेरी किसी अन्य क्वेरी से अलग नहीं हैं। – RandomSeed

+0

संक्षेप में: आपके प्रारंभिक दृष्टिकोण के लिए या तो 1. आवश्यक है कि संपूर्ण डेटाबेस माइग्रेशन प्रक्रिया परमाणु है (सब कुछ एक बड़े लेनदेन में), या 2. कोड किसी भी राज्य का समर्थन करता है जो डेटाबेस मौजूद हो सकता है, जो पहले, दौरान, और बाद में है igration। मैं 1 पसंद करता हूं, और इसे किसी अन्य डेटाबेस में कर रहा हूं (जिस दृष्टिकोण से मैं कुछ हद तक मैन्युअल रूप से एक [डेटाबेस-व्यापी डबलराइट-बफर] लागू करता हूं (http://dev.mysql.com/doc/refman/5.6/en/glossary। एचटीएमएल # glos_doublewrite_buffer))। – RandomSeed

संबंधित मुद्दे