আপনি কীভাবে ডেটাবেস পরিবর্তন মোতায়েন পরিচালনা করবেন?


13

আমরা আজ ডাটাবেস মোতায়েনের কৌশলগুলি নিয়ে আলোচনা করেছি, আমাদের বর্তমান প্রক্রিয়ায় বেশ কয়েকটি সাম্প্রতিক ব্যর্থতা দেখেছি এবং এমন পরিস্থিতি দেখেছি যেখানে আমরা কোনও স্থাপনা ফিরিয়ে আনতে চাই তবে অ্যাপ্লিকেশনটির পুরানো সংস্করণটি নতুন সংস্করণের বিপরীতে কখনও পরীক্ষা করা হয়নি। তথ্যশালা.

একদিকে, মাইগ্রেশন-স্টাইল মোতায়েন রয়েছে, যেখানে আপনার ভার্সন-আপ নির্দেশনা এবং একটি সংস্করণ-ডাউন নির্দেশনা রয়েছে (সেগুলি এসকিউএল বা আপনার অ্যাপ্লিকেশন ভাষায় লিখিত হোক না কেন) এবং আপনার অ্যাপ্লিকেশন জানে যে এটির কী সংস্করণটি নেওয়া উচিত।

এগুলি সহজ, এবং আমরা প্রায়শই রোলব্যাক করব না, বিকাশকারীরা সরল বিষয়ে আগ্রহী ke যাইহোক, আপনি যখন কোনও ক্ষেত্র / সারণি যুক্ত করছেন তখন ঝুঁকি থাকে এবং আপনি পিছনে ফিরে যাওয়ার আগে সেই ক্ষেত্রটি জনবহুল হয়। বা আরও খারাপ, যেখানে আপনি আগের সংস্করণের সাথে প্রাসঙ্গিক ডেটা ফেলেছেন।

অন্যদিকে, আমরা একটি আপগ্রেড, রোলব্যাক, রোলফরওয়ার্ড পদ্ধতির বিষয়টি বিবেচনা করতে পারি যেখানে মাইগ্রেশনগুলির মতো পিছনে রোলিং ততটা কঠোর নয়। উদাহরণস্বরূপ, আপগ্রেড একটি নন-অযোগ্য ক্ষেত্র যুক্ত করতে পারে; রোলব্যাক এটিকে naclaable করে তোলে যাতে পুরানো অ্যাপ্লিকেশনটি যত্ন না করে; রোলফোর্ডটি নাল ক্ষেত্রগুলিকে পপুলেট করে এবং এটি আবার অ-অযোগ্য হয়।

এটি ডেটা ধরে রাখে তবে কোড এবং পরীক্ষা উভয়ই জটিল (দুঃখের বিষয়, আমাদের স্বয়ংক্রিয় ইন্টিগ্রেশন পরীক্ষাগুলি অনেকটা অস্তিত্বহীন এবং আমরা যখন এটি সংশোধন করছি, এর মধ্যে আমাদের একটি সমস্যা রয়েছে)।

এগুলি দিয়ে সমস্যাগুলি প্রশমিত করার নিরাপদ উপায় আছে কি? আমার অন্যান্য বিকল্পগুলি বিবেচনা করা উচিত? আপনি কি ভাগ করে নিতে চান খারাপ অভিজ্ঞতা আছে যা পরে আমার ব্যথা বাঁচাতে পারে?

উত্তর:


9

ডেটাবেস পরিবর্তনগুলি অন্যান্য পরিবর্তনগুলির মতো পরিচালনা করা উচিত এবং মোতায়েনের অংশ হিসাবে স্ক্রিপ্ট হিসাবে স্থাপন করা উচিত (এবং অবশ্যই উত্স নিয়ন্ত্রণে সংরক্ষিত)। যেহেতু এগুলি একই সংস্করণের অ্যাপ্লিকেশনটির কোড সহ মোতায়েন করা হয়েছে, আপনি কী জানেন যে পিছনে ফিরে আসতে হবে। আপনি ডেটাবেস স্ক্রিপ্ট লেখার সময় প্রতিটি পরিবর্তন পূর্বাবস্থায় ফ্যান্সি পেতে এবং একটি স্ক্রিপ্ট লিখতে পারেন তবে যদি রোলব্যাকগুলি সাধারণ না হয়, আপনি এটি করতে চাইবেন না। যদি কোনও নতুন কলামটি জনবহুল হয় তবে আপনি যদি অরজিনাল ডাটাবেসে ফিরে যান তবে ডেটা হারাবেন।

এসকিউএল সার্ভারে আপনি একটি স্থাপনার ঠিক আগে একটি স্ন্যাপশট নিতে পারেন এবং তারপরে যদি ব্যর্থতা ব্যর্থ হয় তবে তা অবিলম্বে এটিতে ফিরে আসতে পারেন। এটি ধরে নিয়েছে যে ব্যবহারকারীরা সিস্টেমে থাকাকালীন এই স্থাপনাটি ঘটছে না (আপনি তাদের ডেটা পরিবর্তনগুলি হারাতে চান না)। কোনও বড় রিলিজের সময় এটি সর্বাধিক কার্যকর যখন আপগ্রেড করার জন্য আপনাকে পুরো সিস্টেমটি অস্থায়ীভাবে নামতে হতে পারে। অথবা আপনি এখনও স্ন্যাপশট নিতে পারেন এবং কোনও রোলব্যাকের প্রয়োজন হলে পার্থক্যগুলি দেখতে স্ন্যাপশট এবং ডাটাবেসের মধ্যে একটি ডাটাবেস তুলনা করতে পারেন। এসকিউএলকম্পারের মতো একটি সরঞ্জাম এমনকি স্ন্যাপশটের কাঠামোতে ফিরে আসতে কোড তৈরি করতে পারে। অন্যান্য ডাটাবেসের জন্য কী উপলব্ধ তা আমি জানি না।


3

একটি ডাটাবেস স্ট্রাকচারের পরিবর্তনগুলি একটি পরীক্ষার পরিবেশ ব্যবহার করে স্বয়ংক্রিয় / স্ক্রিপ্ট এবং পরীক্ষা করা উচিত। উত্পাদন পরিবেশে ম্যানুয়াল পরিবর্তনগুলি খুব ঝুঁকিপূর্ণ

একমাত্র যুক্তিসঙ্গত রোলব্যাক কৌশল (জিনিসটি আরও খারাপ করার সম্ভাব্যতম সম্ভাবনা রয়েছে) হ'ল প্রাক-আপগ্রেড স্ন্যাপশটে ফিরে যাওয়া। যদি জিনিসগুলি ভুল হতে চলেছে তবে তা স্ন্যাপশটে ফিরে যাওয়ার ব্যবস্থাযোগ্য করে তোলার জন্য তাড়াতাড়ি যথেষ্ট হবে, অথবা রোলব্যাকের জন্য খুব দেরী হয়েছে (ডাটাবেসে সমস্যার কারণে সপ্তাহের পরের রিপোর্টটি ব্যর্থ হয়)।

পরিবর্তনগুলি ক্রমবর্ধমানভাবে করা যেতে পারে (যেমন ক্ষেত্র যোগ করার মতো) এবং তাই এগুলি পাসের মাধ্যমে সমস্ত করার চেয়ে কম ঝুঁকির সাথে লাইভ পরীক্ষা করা হয়।

পরিকল্পনার মাধ্যমে, আপনি প্রতিটি রিলিজের সাথে সফ্টওয়্যার এবং ডাটাবেস আপগ্রেডের মুখোমুখি না হয়ে বেশ কয়েকটি আসন্ন রিলিজ সমর্থন করতে ডাটাবেসে পরিবর্তন করতে পারেন ।

ডেটাবেস আপগ্রেডের পরের দিনগুলি জরুরি অবস্থার জন্য প্রস্তুত থাকুন , ঠিক যেমনটি আপনি যদি এটি সফ্টওয়্যার আপগ্রেড হন।

ম্যানুয়ালি সমস্যাগুলি প্যাচ করার তাগিদকে প্রতিহত করুন। আপনার অবিচ্ছিন্ন কৌশলটি (রোলব্যাক, স্ন্যাপশট) ব্যবহার করুন এবং তারপরে আবারো আপগ্রেড করার চেষ্টা করার আগে কেন জিনিসগুলি ভুল হয়ে গেছে তা চিন্তা করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.