बड़े डेटाबेस में गलत डेटा अपडेट से बचने के लिए आप किन प्रथाओं का पालन करते हैं?


20

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

हालाँकि, यह तब तक अच्छी तरह से काम कर सकता है जब तक कि DB आकार कुछ GB में न हो। DB का आकार बड़ा होने के बाद, बैकअप को पूरा होने में लंबा समय लगता है। ऐसी परिस्थितियों में कुछ सर्वोत्तम प्रथाओं का पालन किया जाना चाहिए, ताकि कोड तैनाती में तार्किक मुद्दों के कारण तार्किक डेटा भ्रष्टाचार से बचा जा सके?


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

10
मैं इस सवाल को फिर से बताऊंगा, समस्या यह नहीं है कि बैकअप में लंबा समय लगता है, समस्या यह है कि यदि किसी अद्यतन में एक असफल विफलता है, तो एक पुनर्स्थापना आवश्यक हो सकती है, जो लंबे समय तक उत्पादन को अवरुद्ध कर सकती है। इसलिए एक अपडेट के दौरान विफलता के जोखिमों को कम करने की रणनीति के बाद आप वास्तव में क्या हैं।
डॉक ब्राउन

1
मैं यहाँ @DocBrown से सहमत हूँ। डेटा भ्रष्टाचार से बचने और बहुत अधिक समय लेने से बैकअप वास्तव में दो अलग-अलग प्रश्न हैं।
रॉबी डे

1
जब आप जल्दी से स्वीकार करते हैं तो आपको उतना इनपुट नहीं मिलता है।
paparazzo

1
आपका क्या मतलब है "एक कोड परिनियोजन में तार्किक मुद्दे"?
paparazzo

जवाबों:


25

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

यदि आप विशिष्ट रिकॉर्ड के बजाय सभी रिकॉर्ड में बदलाव कर सकते हैं, तो यह बेहतर है।

दूसरे शब्दों में, यदि आपको आईडी के रिकॉर्ड की सूची दी गई है, जिसमें उनके राज्य को बदलने की आवश्यकता है, तो आपको खुद से पूछना चाहिए कि कार्यक्रम के संदर्भ में अपडेट क्यों किया जा रहा है। यह उन 10 रिकॉर्डों में से हो सकता है जिन्हें आपको अपडेट करने की आवश्यकता है, तालिका केवल है 10 तत्वों। इसलिए आपको अपने आप से पूछना चाहिए कि क्या वैचारिक रूप से आप जो कर रहे हैं वह सभी रिकॉर्ड की स्थिति को अपडेट कर रहा है।

यदि आप सम्मिलित कर सकते हैं, तो यह बेहतर है।

रिकॉर्ड जोड़ने का कार्य स्व-निहित है। इससे मेरा मतलब है कि रिकॉर्ड जोड़ने का केवल एक पक्ष प्रभाव है, और यह एक रिकॉर्ड का अस्तित्व है जो पहले मौजूद नहीं था। इसलिए जब तक आप एक रिकॉर्ड जोड़ रहे हैं जो वहाँ नहीं होना चाहिए, कोई समस्या नहीं होनी चाहिए।

यदि आप विलोपन से बच सकते हैं, तो यह बेहतर है।

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

एक सुसंगत अद्यतन नीति रखें।

यदि आपको रिकॉर्ड अपडेट करने की आवश्यकता है, तो कई चीजों में से एक हो सकती है:

  1. आपका रिकॉर्ड मौजूद नहीं है
  2. आपका रिकॉर्ड मौजूद है लेकिन इसे पहले ही बदल दिया गया है।
  3. आपका रिकॉर्ड मौजूद है और परिवर्तन की आवश्यकता है।

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

बैकअप

इसका कोई मतलब नहीं है कि आप किसी प्रोडक्शन के माहौल में कोई भी अपडेट करने से पहले बैकअप करने से मना करते हैं! हालांकि एक बैकअप के साथ, मैं इसे बैकअप का उपयोग करने में विफलता मानता हूं। सबसे खराब स्थिति में भी डेटा खोना एक संभावना नहीं हो सकती है।

निष्कर्ष

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

सौभाग्य!


आपके द्वारा कही गई हर बात से मैं सहमत हूं, लेकिन मैं लेन-देन के आपके विचारों पर उत्सुक था जब 10 रिकॉर्ड होते हैं जो 10k और आवेषण को बदलने की आवश्यकता होती है / सभी रिकॉर्डों को अपडेट करना व्यवहार्य नहीं है?
मैं यहाँ

फिर आप सिर्फ 10 रिकॉर्ड अपडेट करें। मैंने कहा अगर हो सके तो करो। मैंने यह नहीं कहा कि भले ही यह आपके ग्राहक के उत्पादन डेटाबेस को नष्ट कर दे। कृपया नमक के एक दाने के साथ मेरी सलाह लें।
नील

12

उस बिंदु पर, आपको एक वाणिज्यिक ग्रेड डीबी सिस्टम का उपयोग करना चाहिए जो स्नैपशॉट्स का समर्थन करता है (ओरैकल्स इसे फ्लैशबैक कहते हैं ) - यह बिल्कुल उसी तरह की चीज है जिसके लिए वे हैं।

ध्यान रखें कि आपको वैसे भी एक बैकअप अवधारणा की आवश्यकता है - अधिक डेटा होने का मतलब यह नहीं है कि आप बैकअप को छोड़ दें क्योंकि वे मुश्किल, काफी विपरीत हो जाते हैं। आपको स्वचालित फेलओवर के साथ प्रतिकृति के आधार पर किसी तरह के निरंतर बैकअप की आवश्यकता होती है।


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

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

@PritamBarhate: आपको अपडेट के कारण "अधिक बैकअप" की आवश्यकता नहीं है। एक उत्पादन डेटाबेस पर जहां लोग उस डेटा के साथ काम करते हैं, बैकअप को कम से कम दैनिक, अपडेट के साथ या बिना करना पड़ता है। Restores आपकी समस्या है, आप हर हालत में अनावश्यक restores से बचना चाहते हैं।
डॉक ब्राउन

3
स्वचालित विफलता के साथ प्रतिकृति अतिरेक है डेटाबेस का उपयोग करने की तुलना में डेटाबेस के लिए कोई बैकअप रणनीति नहीं है डिस्क के लिए है
ब्लरफ्ल

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

3

यह एक विशाल क्षेत्र है - इसलिए इस प्रश्न को काफी कम क्रम में बंद करने की अपेक्षा करें लेकिन, मेरे सिर के ऊपर (यंग डेटाबेस पर पूर्व डीबीए के रूप में):

मार्ट / भंडार

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

सोर्स कोड

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

बनाएँ / अद्यतन तिथि

कुछ ऐसा है जो ट्रैकिंग में बहुत मदद कर सकता है जहाँ चीजें गलत हो गई हैं और हर पंक्ति के लिए एक निर्माण और अद्यतन डेटा है। फिर आप एक नज़र में देख सकते हैं कि कौन सी पंक्तियों को अपडेट किया गया है।

ईटीएल

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

बैकअप

पूर्ण बैकअप निश्चित रूप से बहुत सारे स्थान लेते हैं, लेकिन सामान्य परिदृश्य एक पूर्ण बैकअप के लिए नियमित अंतराल पर होता है (कहते हैं, साप्ताहिक) और अधिक लगातार आधार (दैनिक आदि) पर आंशिक।

समय वसूली में बिंदु

आप किस आरडीबीएमएस का उपयोग कर रहे हैं, इसके आधार पर समय में कुछ सहायता मिलती है। यह आपको उस समय को वापस रोल करने की अनुमति देता है जब एक अच्छा राज्य ज्ञात था। हालाँकि इसके लिए बड़ी मात्रा में भंडारण की आवश्यकता होती है जो इस बात के लिए बढ़ जाती है कि आप कितनी दूर जाना चाहते हैं।

लेखा परीक्षा

ऑडिट टेबल होने से आपको पता चल जाएगा कि किसने (या क्या) एक पंक्ति में अपडेट किया है। यह आपको जांच के लिए एक अच्छा प्रारंभिक बिंदु दे सकता है।

इतिहास

कुछ महत्वपूर्ण तालिकाओं के लिए, अद्यतन के समय पर्टेंट पंक्ति की एक प्रति ली जाती है, ताकि आवश्यकता पड़ने पर डेटा को पुनर्स्थापित किया जा सके।

डेटा मान्य

आधारभूत सत्यापन जाँच सुनिश्चित करें कि डेटा संग्रहीत होने से पहले - उस पर और बुनियादी डेटा प्रकार जाँच के ऊपर किया जाए।

निर्देशात्मक अखंडता

प्रासंगिक अखंडता एक चांदी की गोली नहीं है, लेकिन यह सुनिश्चित करने में मदद कर सकती है कि डेटा अच्छी तरह से संरचित है।



2

कई बार अगर हम "वन शॉट" अपडेट कर रहे होते हैं तो हम प्रोडक्शन का बैक अप लेते हैं और इसे टेस्ट सर्वर पर रिस्टोर करते हैं। फिर हम परीक्षणों का एक सूट बनाते हैं और एक शॉट चलाते हैं। हम सत्यापित करते हैं कि डेटा परीक्षणों के माध्यम से बदल गया है और सहज हो गया है कि अपडेट सफल होगा और डेटा को उस तरीके से संशोधित करेगा, जिसकी हम अपेक्षा करते हैं। इसे ड्राई या ट्रायल रन कहा जाता है। मैं ऐसा करने की सलाह देता हूं।

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

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

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