স্কাইমা পরিবর্তন এবং ডেটা মাইগ্রেশনের জন্য ডাউনটাইম ছাড়াই কোনও লাইভ ডাটাবেসে সেরা অনুশীলন?


43

ডাউনটাইম ছাড়াই আপনি কীভাবে লাইভ ডাটাবেসে স্কিমা পরিবর্তন করবেন?

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

আমার ধারণা এই সমস্যাটি প্রায়শই ঘনিয়ে আসে তবে আমি এটিকে মোকাবেলার জন্য কোনও মানক সমাধান খুঁজে পাই না।

এই নিবন্ধটি সমস্যার সমাধান করে তবে আমি ৩ য় পদক্ষেপটি সত্যই বুঝতে পারি নি He তিনি উভয় টেবিলকে লেখার জন্য বলেছেন, তারপরে প্রথম টেবিল থেকে নতুন টেবিলে পুরানো ডেটা স্থানান্তর করুন। আপনি কীভাবে নিশ্চিত হন যে আপনি কেবল পুরানো ডেটা স্থানান্তর করছেন?

(আমি হিরোকুতে পোস্টগ্রিজ এসকিউএল ব্যবহার করি ))


2
ফেসবুক মাইএসকিউএলের জন্য এটি করার জন্য একটি সরঞ্জাম তৈরি করেছে developed
নিক চ্যামাস

2
কে স্কট অ্যালেন এখানে স্কিমা সংস্করণ পরিচালনা করার জন্য একটি সিস্টেম সম্পর্কে লিখেছেন । আমি সংস্করণ-সচেতন স্কিমা স্থাপনার জন্য ওপেন সোর্স সরঞ্জাম ডিবিইউপিডেটার তৈরি করেছি। আরো এখানে - http://www.tewari.info/dbupdater
ছাই

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

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

উত্তর:


27

আপনার উত্তর ইতিমধ্যে আপনার কাছে রয়েছে:

  1. সমান্তরালে নতুন কাঠামো তৈরি করুন
  2. উভয় কাঠামোতে লেখা শুরু করুন
  3. পুরানো ডেটা নতুন কাঠামোতে স্থানান্তর করুন
  4. কেবল নতুন কাঠামো লিখুন এবং পড়ুন
  5. পুরানো কলামগুলি মুছুন

হিসাবে ধাপ 3 , ভালো কিছু (এক লেনদেনে) ব্যবহার করুন:

এখনও নেই যা Inোকান:

INSERT INTO new_tbl (old_id, data)
SELECT old_id, data
FROM   old_tbl
WHERE  NOT EXISTS (SELECT * FROM new_tbl WHERE new_tbl.old_id = old_tbl.old_id);

এর মধ্যে কী বদলেছে তা আপডেট করুন:

UPDATE new_tbl
SET    data  = old.data
USING  old_tbl
WHERE  new_tbl.old_id = old_tbl.old_id
AND    new_tbl.data IS DISTINCT FROM old_tbl.data;

নতুন ডেটা স্পর্শ করা হবে না, কারণ এটি উভয় জায়গায় অভিন্ন।


আপনি যে দৃশ্যের জন্য এই উত্তরটির প্রস্তাব করেছিলেন তা বোঝার চেষ্টা করার সময় আমার কয়েকটি প্রশ্ন রয়েছে - ১. ডিবি পরিবর্তন শুরু হওয়ার সাথে সাথে কোড পরিবর্তনগুলিও স্থাপন করা হবে? ২. কেন উভয় কাঠামোর লেখার প্রয়োজন হবে? ৩. কেন নতুন কাঠামোটিকে প্রথমে আনতে হবে না এবং তারপরে বিদ্যমান ডেটা স্থানান্তরিত করা যাবে এবং তারপরে কোড পরিবর্তনগুলি স্থাপন করা হবে যা নতুন কাঠামোকে জনপ্রিয় করবে? ৪) সেখানে কী নেই তা খুঁজে পাওয়ার দরকার কেন (আপনার প্রথম প্রশ্ন)? আপনি একাধিক চেষ্টায় সন্নিবেশ প্রস্তাব করছেন?
সন্দীপন নাথ

2
@ সন্দীপনাথ, আপনার মন্তব্যে 3 প্রশ্নের উত্তর দিতে: কারণ আপনি যদি (ক) নতুন কাঠামো আনেন, (খ) এটিতে ডেটা মাইগ্রেট করুন, (গ) পুরানো পরিবর্তে নতুন কাঠামোতে ডেটা লিখতে আপনার কোড পরিবর্তন করুন, তবে সমস্ত পদক্ষেপ বি এবং ধাপ সি এর মধ্যে করা ডেটা পরিবর্তনগুলি কেবল পুরানো কাঠামোর মধ্যে উপস্থিত থাকবে । প্রশ্ন ছিল কীভাবে ডাউনটাইম ছাড়াই স্কিমা পরিবর্তন করা যায়। এই উত্তরটি আবার মনোযোগ সহকারে পড়ুন।
ওয়াইল্ডকার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.