2009-07-27 17 views
13

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

मैंने शायद एक गुलाम डीबी (MySQL प्रतिकृति का उपयोग करके) पर स्विच करने और मास्टर पर स्कीमा परिवर्तनों को चलाने के बारे में सोचा है, लेकिन फिर आपको दास पर लागू अद्यतन प्रश्नों को कैप्चर करने की आवश्यकता होगी, जहां मास्टर पर लागू नहीं किया गया है और आप बैकअप सर्वर नहीं होने का जोखिम चलाएंगे।

इन समस्याओं के आसपास लोगों को किस तकनीक का उपयोग करने के लिए उपयोग किया जाता है?

धन्यवाद, मनीष

उत्तर

4

मैं कहना चाहता हूँ कि आप विचार पर ही वाले हैं; प्रभावी रूप से, मेरे पास एक मास्टर और दास होगा, मास्टर जीने के साथ, और दास में बदलावों को दोहराया जाएगा; दास पर प्रतिकृति रोकें, और उसके बाद गुलाम पर स्कीमा परिवर्तन करें, और एक बार स्कीमा परिवर्तन किए जाने के बाद, प्रतिकृति को रोक दें; एक बार जब पूरी प्रक्रिया पूरी हो जाती है, तो यह सुनिश्चित करने के लिए मास्टर को बहुत ही कम समय के लिए रोकें कि दास पर प्रतिकृति परिवर्तन फंस गए हैं, और फिर मास्टर और दास को स्विच करें। आपको जो चाहिए वह करना चाहिए।

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

2

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

0

इसके आसपास एकमात्र वास्तविक तरीका क्लस्टर डेटाबेस, या मास्टर/दास जैसा आपने सुझाव दिया है। आम तौर पर आप एक नोड ऑफ़लाइन लेते हैं और अपग्रेड करते हैं। एक बार यह पूरा हो जाने के बाद, आप आमतौर पर मौजूदा मास्टर से नए अपग्रेड किए गए सिस्टम में सिंक्रनाइज़ेशन चलाते हैं जो समझता है कि पुरानी स्कीमा से डेटा को नए तरीके से कैसे अनुवादित किया जाए। (सिंक के दौरान, मास्टर को केवल पढ़ने-योग्य मोड में संक्षेप में रखा जा सकता है।)

फिर आप मास्टर/गुलाम भूमिकाएं स्विच करते हैं और अन्य डेटाबेस स्कीमा को अपग्रेड करते हैं। उन्हें बैक अप सिंक करें, और अपग्रेड किए गए दास को ऑनलाइन वापस लाएं।

अभ्यास में यह सही हो सकता है, खासकर यदि आपके पास महत्वपूर्ण स्कीमा परिवर्तन हैं।

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