ডিবি স্কিমা পরিবর্তনগুলি ট্র্যাক করার পদ্ধতিগুলি [বন্ধ]


135

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

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

একাধিক প্ল্যাটফর্মকে সমর্থন করে এমন একটি সমাধান অগ্রাধিকারযোগ্য হলেও আমাদের বেশিরভাগ কাজ সেই প্ল্যাটফর্মে থাকায় আমাদের অবশ্যই লিনাক্স / অ্যাপাচি / মাইএসকিউএল / পিএইচপি স্ট্যাক সমর্থন করতে হবে।

উত্তর:


56

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

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

রেল মাইগ্রেশন সম্পর্কিত এই ওরাকল গাইডটি মাইগ্রেশনকে বেশ ভালভাবে কভার করে।

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


1
এফটিডব্লিউকে অবহেলা - আমরা এটিকে আমাদের ডিবি সিস্টেমের সাথে খাপ খাইয়ে নিয়েছি এবং এতে খুশি।
পিসকভোর :12 ই অক্টোবর'০৯-

এটি এখন গিথুবে

50

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


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

এগুলি টেবিলগুলি যুক্ত করতে, কলামগুলি যুক্ত করতে, কোনও পুরানো থেকে নতুন কলাম ফর্ম্যাটে ডেটা মাইগ্রেট করার জন্য ব্যবহার করা যেতে পারে তারপর কলামটি ড্রপ করুন, "মাস্টার" ডেটা সারি যেমন ব্যবহারকারীর প্রকার ইত্যাদি sertোকান, মূলত, এটি কিছু করতে পারে এবং সঠিক ডেটা সহ মাইগ্রেশন স্ক্রিপ্টগুলি আপনি কখনই ডেটা হারাবেন না।

আপডেট স্ক্রিপ্টটি এর মতো কাজ করে:

  • ডাটাবেসের সাথে সংযুক্ত করুন।
  • বর্তমান ডাটাবেসের (কারণ কাপড় একটি ব্যাকআপ করুন করবে ভুল হয়ে যেতে পারে) [mysqldump]।
  • বুককিপিং টেবিল তৈরি করুন (_মেটা নামে পরিচিত) এটি উপস্থিত না থাকলে।
  • _মেটা সারণী থেকে বর্তমান ভার্সনটি পড়ুন। যদি 0 না পাওয়া যায় তবে ধরে নিন।
  • সমস্ত। এসকিউএল ফাইলগুলি VERSION এর চেয়ে বেশি নম্বরযুক্ত, ক্রমে তাদের চালিত করুন
  • যদি ফাইলগুলির মধ্যে একটি ত্রুটি তৈরি করে: ব্যাকআপে ফিরে যান
  • অন্যথায়, বুককিপিং টেবিলের সংস্করণটি সর্বোচ্চ .sql ফাইলের মধ্যে আপডেট করা হয়েছে।

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

আমরা স্ক্র্যাচ থেকে পুরো ডাটাবেসটিকে পুনরায় তৈরি করতে একই স্ক্রিপ্টটি ব্যবহার করতে পারি; আমরা কেবল ডাটাবেসটি ড্রপ এবং পুনরায় তৈরি করব, তারপরে স্ক্রিপ্টটি চালাব যা সম্পূর্ণভাবে ডাটাবেসটিকে পুনরায় তৈরি করবে। স্বয়ংক্রিয় পরীক্ষার জন্য খালি ডাটাবেস তৈরি করতে আমরা স্ক্রিপ্টটিও ব্যবহার করতে পারি।


এই সিস্টেমটি সেট আপ করতে কয়েক ঘন্টা সময় লেগেছিল, এটি ধারণাগতভাবে সহজ এবং প্রত্যেকে সংস্করণ নম্বরকরণের স্কিম পায় এবং এটি যোগাযোগ বা ম্যানুয়ালি সংশোধন না করে ডেটাবেস ডিজাইনটি এগিয়ে নিয়ে যাওয়ার এবং বিকশিত করার ক্ষমতা রাখার ক্ষেত্রে মূল্যবান হয়ে উঠেছে it সমস্ত ডাটাবেসে।

যদিও পিএইচপিএমএইডমিন থেকে প্রশ্নগুলি পেস্ট করার সময় সাবধান! এই উত্পন্ন প্রশ্নগুলিতে সাধারণত ডাটাবেসের নাম অন্তর্ভুক্ত থাকে যা আপনি অবশ্যই চাইবেন না কারণ এটি আপনার স্ক্রিপ্টগুলি ভেঙে দেবে! টেবিল তৈরির মতো কিছু mydbnewtable(...) সিস্টেমে থাকা ডাটাবেসটিকে মাইডিবি না বললে ব্যর্থ হবে। আমরা একটি প্রাক-মন্তব্য এসভিএন হুক তৈরি করেছি mydbযা স্ট্রিংযুক্ত। এসকিউএল ফাইলগুলি অস্বীকার করবে , এটি একটি নিশ্চিত সাইন যে কোনও ব্যক্তি যথাযথ চেকিং ছাড়াই পিএইচপিএমআইএডমিন থেকে কপি / পেস্ট করেছে।


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

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

12

আমার দলটি সমস্ত ডাটাবেস পরিবর্তনগুলি স্ক্রিপ্ট করে এবং অ্যাপ্লিকেশনটির প্রতিটি প্রকাশের পাশাপাশি এসভিএন-তে এই স্ক্রিপ্টগুলি প্রতিশ্রুতি দেয়। এটি কোনও ডেটা না হারাতে ডাটাবেসের বর্ধিত পরিবর্তনগুলির জন্য অনুমতি দেয়।

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


1
আপনি কীভাবে সমস্ত পরিবর্তন স্ক্রিপ্ট করবেন?
স্মিথ

10

এখানে সমস্যাটি সত্যিকার অর্থে বিকাশকারীদের টিমের সাথে ভাগ করে নেওয়ার জন্য সোর্স নিয়ন্ত্রণে তাদের নিজস্ব স্থানীয় পরিবর্তনগুলি স্ক্রিপ্ট করা সহজ করে দিচ্ছে। আমি বহু বছর ধরে এই সমস্যার মুখোমুখি হয়েছি এবং ডাটাবেস পেশাদারদের জন্য ভিজ্যুয়াল স্টুডিওর কার্যকারিতা দ্বারা অনুপ্রাণিত হয়েছি। যদি আপনি একই বৈশিষ্ট্যযুক্ত একটি ওপেন-সোর্স সরঞ্জাম চান, তবে এটি চেষ্টা করুন: http://dbsourcetools.codeplex.com/ মজা করুন, - নাথান।


10

আপনি যদি এখনও সমাধানগুলি খুঁজছেন: আমরা নেক্সটপ ডিজাইনার নামে একটি সরঞ্জাম প্রস্তাব করছি। এটি একটি ডাটাবেস বিকাশের পরিবেশ যার সাহায্যে আপনি আপনার সম্পূর্ণ ডাটাবেসটিকে সংস্করণ নিয়ন্ত্রণে রাখতে পারেন। আপনি এমন একটি সংস্করণ নিয়ন্ত্রিত সংগ্রহস্থল নিয়ে কাজ করেন যেখানে প্রতিটি পরিবর্তনকে ট্র্যাক করা যায়।

যখন আপনাকে একটি আপডেট প্রকাশ করতে হবে, আপনি নিজের উপাদানগুলি প্রতিশ্রুতিবদ্ধ করতে পারেন এবং পণ্যটি স্বয়ংক্রিয়ভাবে পূর্ববর্তী সংস্করণ থেকে এসকিউএল আপগ্রেড স্ক্রিপ্ট তৈরি করবে। অবশ্যই, আপনি যে কোনও 2 সংস্করণ থেকে এই এসকিউএল তৈরি করতে পারেন।

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

পণ্যটি জিপিএল এবং একটিগ্রহের উপর ভিত্তি করে এটি লিনাক্স, ম্যাক এবং উইন্ডোতে চলে। এটি এই মুহুর্তে ওরাকল, মাইএসকিএল এবং পোস্টগ্র্যাস্কলকেও সমর্থন করে (ডিবি 2 সমর্থন এগিয়ে চলছে)। উইকিতে একবার দেখুন যেখানে আপনি আরও বিস্তারিত তথ্য পাবেন: http://www.nextep-softwares.com/wiki


বেশ মজার তো. এটির পাশাপাশি কমান্ড-লাইন ইন্টারফেস রয়েছে, বা এটির পরিকল্পনা রয়েছে?
পিসকভোর

8

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

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

এটি সক্রিয় হিসাবে, বিকাশকারীরা কখনও কখনও তাদের স্যান্ডবক্স ডাটাবেসটিকেও ঝাপিয়ে যায় এবং এসভিএন-তে স্কিমা ফাইল আপডেট করতে অবহেলা করে। কোডটি তখন কোনও ডিবি পরিবর্তনের উপর নির্ভর করে যা চেক করা হয়নি। এটি যদি আপনার আরও বৃহত্তর ধারাবাহিক সংহতকরণ পরিকল্পনার মধ্যে থাকে তবে এটি বিশেষত দুর্দান্ত।


7

আপনার স্কিমাটি কোনও ফাইলে ফেলে দিন এবং এটি উত্স নিয়ন্ত্রণে যুক্ত করুন। তারপরে একটি সাধারণ ডিফ আপনাকে কী বদলেছে তা দেখাবে।


1
মাইস্কুলডাম্পের মতো ডাম্পটি এসকিউএল হতে হবে, ওরাকলের ডাম্পগুলি বাইনারি।
ওসামা আল-মায়েদ

7
স্কিমা পৃথককরণের সাথে আরও একটি মৌলিক সমস্যা রয়েছে। আপনি কীভাবে একটি কলামের ড্রপটিকে আলাদা করতে পারেন + একটি কলামের নাম থেকে যুক্ত করুন। উত্তরটি সহজ: আপনি পারবেন না। এই কারণেই আপনাকে আসল স্কিমা পরিবর্তন ক্রিয়াকলাপ রেকর্ড করতে হবে।
পিএসপি

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

6

কে। স্কট অ্যালেনের স্কিমা সংস্করণে দু'জনের একটি শালীন নিবন্ধ রয়েছে, যা এখানে অন্যান্য উত্তরে রেফারেন্সযুক্ত ইনক্রিমেন্টাল আপডেট স্ক্রিপ্ট / মাইগ্রেশন ধারণা ব্যবহার করে; দেখতে http://odetocode.com/Blogs/scott/archive/2008/01/31/11710.aspx


5

এটি খুব কম প্রযুক্তি, এবং সেখানে আরও ভাল সমাধান হতে পারে, তবে আপনি কেবল নিজের স্কিমা একটি এসকিউএল স্ক্রিপ্টে সঞ্চয় করতে পারেন যা ডাটাবেস তৈরির জন্য চালানো যেতে পারে। আমি মনে করি আপনি এই স্ক্রিপ্টটি তৈরি করতে কোনও আদেশ কার্যকর করতে পারেন, তবে দুর্ভাগ্যক্রমে আমি আদেশটি জানি না।

তারপরে, স্ক্রিপ্টটি কোডটিতে সোর্স নিয়ন্ত্রণের সাথে এটিতে কাজ করে যা এটিতে কাজ করে। কোডের সাথে সাথে আপনার যখন স্কিমা পরিবর্তন করা দরকার তখন স্ক্রিপ্টটি সেই কোডের সাথেও যাচাই করা যেতে পারে যা পরিবর্তিত স্কিমা প্রয়োজন। তারপরে, স্ক্রিপ্টে ভিন্নতাগুলি স্কিমা পরিবর্তনের ক্ষেত্রে পৃথকগুলি নির্দেশ করবে।

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


হ্যাঁ, এখনই আমাদের কাছে এটি বেশ কিছু। দুর্ভাগ্যক্রমে এটি আমাদের বিদ্যমান ডাটাবেসগুলিকে সংশোধন করার সহজ উপায় দেয় না - মাইএসকিএলডাম্প দ্বারা উত্পাদিত এসকিউএল স্ক্রিপ্ট ধরে নেওয়া হয় আপনি স্ক্র্যাচ থেকে টেবিলটি তৈরি করছেন (বা কোনও টেবিল বিদ্যমান থাকলে ওভাররাইট করা)। আমাদের আরও কিছুটা উচ্চ প্রযুক্তির প্রয়োজন কারণ এটি ডাটাবেসে ALTER TABLE বিবৃতিগুলির একটি ক্রম প্রয়োগ করা দরকার এবং সঠিকভাবে এটি করার জন্য এটি ডাটাবেসের বর্তমান অবস্থা সম্পর্কে সচেতন হওয়া প্রয়োজন।
pix0r

5

আপনি যদি সি # ব্যবহার করছেন তবে সাবসোনিকটি দেখুন, খুব কার্যকর একটি ওআরএম সরঞ্জাম, তবে এটি আপনার স্কিম এবং \ বা ডেটা পুনরায় তৈরি করতে স্কয়ার স্ক্রিপ্ট তৈরি করে। এই স্ক্রিপ্টগুলি উত্স নিয়ন্ত্রণে রাখা যেতে পারে।

http://subsonicproject.com/


সময় মত এই পয়েন্ট হিসাবে একটি মৃত URL হিসাবে মনে হচ্ছে।
মার্ক শুলথিস

5

আমি কয়েকটি প্রকল্পের জন্য ভিজ্যুয়াল স্টুডিওতে নিম্নলিখিত ডাটাবেস প্রকল্প কাঠামোটি ব্যবহার করেছি এবং এটি বেশ ভালভাবে কাজ করেছে:

তথ্যশালা

স্ক্রিপ্ট পরিবর্তন করুন

0.PreDeploy.sql

1.SchemaChanges.sql

2.DataChanges.sql

3.Permissions.sql

স্ক্রিপ্ট তৈরি করুন

Sprocs

ক্রিয়াকলাপ

দেখেছে

আমাদের বিল্ড সিস্টেমটি নিম্নলিখিত ক্রমে স্ক্রিপ্টগুলি সম্পাদন করে একটি সংস্করণ থেকে পরবর্তী সংস্করণে ডাটাবেস আপডেট করে:

1.PreDeploy.sql

2.SchemaChanges.sql

স্ক্রিপ্টস তৈরি করুন ফোল্ডারের সামগ্রীসমূহ

2.DataChanges.sql

3.Permissions.sql

প্রতিটি বিকাশকারী প্রতিটি ফাইলের শেষে তাদের কোড যুক্ত করে নির্দিষ্ট বাগ / বৈশিষ্ট্যের জন্য তাদের পরিবর্তনগুলি পরীক্ষা করে। একবার মুখ্য সংস্করণ সম্পূর্ণ হয়ে যায় এবং উত্স নিয়ন্ত্রণে ব্রাঞ্চ হয়ে যায়, পরিবর্তন স্ক্রিপ্টস ফোল্ডারে .sql ফাইলের সামগ্রী মুছে ফেলা হয়।


5

আমরা একটি খুব সহজ তবে কার্যকর সমাধান ব্যবহার করি।

নতুন ইনস্টলগুলির জন্য, আমাদের কাছে একটি ডিপোজিটি.এসকিউএল ফাইল রয়েছে যা সমস্ত ডিবি স্কিমা ধারণ করে, তারপরে বিল্ড প্রক্রিয়ায় আমরা এই ফাইলটি ডেটাবেস তৈরি করতে ব্যবহার করি।

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

সুতরাং আমাদের সফ্টওয়্যারটিতে আমাদের এমন কিছু রয়েছে:

RegisterUpgrade(1, 'ALTER TABLE XX ADD XY CHAR(1) NOT NULL;');

এই কোডটি ডাটাবেসটি সংস্করণ 1-এ রয়েছে কিনা তা যাচাই করবে (যা স্বয়ংক্রিয়ভাবে তৈরি হওয়া কোনও টেবিলে সঞ্চিত থাকে), যদি এটি পুরানো হয় তবে কমান্ডটি কার্যকর করা হয়।

সংগ্রহস্থলটিতে মেটাডেটা.এসকিউএল আপডেট করার জন্য, আমরা স্থানীয়ভাবে এই আপগ্রেডগুলি পরিচালনা করি এবং তারপরে সম্পূর্ণ ডাটাবেস মেটাডেটা বের করি।

প্রতিবার প্রায়শই ঘটে থাকে, তা হ'ল মেটাডেটা.এসকিউএল কমিটিকে ভুলে যাওয়া, তবে এটি একটি বড় সমস্যা নয় কারণ বিল্ড প্রক্রিয়াটি পরীক্ষা করা তার সহজ কাজ এবং এটিই ঘটতে পারে এমন একমাত্র বিষয় যা একটি নতুন ইনস্টল করা তা দিয়েই হয় is একটি পুরানো ডেটাবেস এবং প্রথম ব্যবহারে এটি আপগ্রেড।

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


4

আমি বিল্ড সংস্করণগুলির নামে নামযুক্ত ফোল্ডার তৈরি করি এবং সেখানে আপগ্রেড এবং ডাউনগ্রেড স্ক্রিপ্টগুলি রাখি। উদাহরণস্বরূপ, আপনার নিম্নলিখিত ফোল্ডারগুলি থাকতে পারে: 1.0.0, 1.0.1 এবং 1.0.2। প্রত্যেকটিতে এমন স্ক্রিপ্ট রয়েছে যা আপনাকে সংস্করণগুলির মধ্যে আপনার ডেটাবেসকে আপগ্রেড বা ডাউনগ্রেড করতে দেয়।

কোনও ক্লায়েন্ট বা গ্রাহক যদি আপনাকে 1.0.1 সংস্করণে সমস্যা নিয়ে কল করে এবং আপনি 1.0.2 ব্যবহার করছেন, ডাটাবেসটিকে তার সংস্করণে ফিরিয়ে আনতে সমস্যা হবে না।

আপনার ডাটাবেসে, "স্কিমা" নামে একটি সারণী তৈরি করুন যেখানে আপনি ডাটাবেসের বর্তমান সংস্করণটি রেখেছেন। তারপরে এমন একটি প্রোগ্রাম লেখা যা আপনার জন্য আপনার ডাটাবেসকে আপগ্রেড বা ডাউনগ্রেড করতে পারে সহজ।

জো যেমন বলেছিল, আপনি যদি রেলের জগতে থাকেন তবে মাইগ্রেশন ব্যবহার করুন। :)


3

আমার বর্তমান পিএইচপি প্রকল্পের জন্য আমরা রেল স্থানান্তরের ধারণাটি ব্যবহার করি এবং আমাদের একটি মাইগ্রেশন ডিরেক্টরি রয়েছে যেখানে আমরা ফাইলগুলি "migration_XX.sql" শিরোনাম রাখি যেখানে XX হ'ল স্থানান্তর সংখ্যা। বর্তমানে আপডেটগুলি তৈরি করার সাথে সাথে এই ফাইলগুলি হাতে তৈরি করা হয় তবে তাদের তৈরিগুলি সহজেই সংশোধন করা যায়।

তারপরে আমাদের কাছে "মাইগ্রেশন_ওয়াতচার" নামে একটি স্ক্রিপ্ট রয়েছে যা আমরা প্রাক-আলফায় থাকাকালীন বর্তমানে প্রতিটি পৃষ্ঠা লোডে চলে এবং পরীক্ষা করে দেখি যে নতুন মাইগ্রেশন_এক্সএক্স.এসকিএল ফাইল আছে যেখানে বর্তমান মাইগ্রেশন সংস্করণের তুলনায় এক্সএক্স বড় রয়েছে কিনা। যদি তাই হয় তবে এটি সমস্ত মাইগ্রেশন_এক্সএক্সএক্সএইচএল ফাইলগুলি ডাটাবেস এবং ভয়েলার বিরুদ্ধে বৃহত্তম সংখ্যায় চালায়! স্কিমা পরিবর্তনগুলি স্বয়ংক্রিয় হয়।

আপনার যদি সিস্টেমটি ফিরিয়ে আনার দক্ষতার প্রয়োজন হয় তবে অনেকগুলি টুইটের প্রয়োজন হবে, তবে এটি সহজ এবং এতদূর আমাদের মোটামুটি ছোট দলের পক্ষে খুব ভালভাবে কাজ করে চলেছে।


3

আমি "স্ক্রিপ্টিং" পক্ষের জন্য পিঁপড়া (ক্রস প্ল্যাটফর্ম) ব্যবহার করার পরামর্শ দেব (যেহেতু এটি jdbc এর মাধ্যমে সেখানে যে কোনও ডিবির সাথে ব্যবহারিকভাবে কথা বলতে পারে) এবং উত্স সংগ্রহস্থলের জন্য সাবভার্সিয়ন। পিঁপড় পরিবর্তন করার আগে আপনাকে স্থানীয় ডিবিতে আপনার ডিবি "ব্যাক আপ" করতে দেয়। ১. অ্যান্টের মাধ্যমে ফাইল করার জন্য বিদ্যমান ডিবি স্কিমাকে ব্যাকআপ দিন


3

মাইএসকিউএল এর জন্য টোডের স্কিমা তুলনা নামে একটি ফাংশন রয়েছে যা আপনাকে 2 টি ডাটাবেস সিঙ্ক্রোনাইজ করতে দেয়। এটি আমি এখনও অবধি ব্যবহার করেছি সেরা সরঞ্জাম।


3

Yii কীভাবে ডাটাবেস স্থানান্তর পরিচালনা করে তা আমি পছন্দ করি । একটি মাইগ্রেশন মূলত পিএইচপি স্ক্রিপ্ট বাস্তবায়ন করে CDbMigration। মাইগ্রেশন যুক্তিযুক্ত এমন CDbMigrationএকটি upপদ্ধতি নির্ধারণ করে । downমাইগ্রেশন বিপরীত সমর্থন সমর্থন করার জন্য একটি পদ্ধতি প্রয়োগ করাও সম্ভব । বিকল্পভাবে, safeUpবা safeDownকোনও লেনদেনের প্রসঙ্গে মাইগ্রেশন হয়েছে কিনা তা নিশ্চিত করতে ব্যবহার করা যেতে পারে।

ইআইআই-র কমান্ড-লাইন সরঞ্জামটিতে yiicমাইগ্রেশন তৈরি এবং সম্পাদন করতে সহায়তা রয়েছে। মাইগ্রেশনগুলি একে একে বা ব্যাচের মাধ্যমে প্রয়োগ বা বিপরীত হতে পারে। একটি পিএইচপি ক্লাস বাস্তবায়নের কোডে মাইগ্রেশন ফলাফল তৈরি করা CDbMigration, একটি টাইমস্ট্যাম্প এবং ব্যবহারকারীর দ্বারা নির্দিষ্ট একটি মাইগ্রেশন নামের উপর ভিত্তি করে স্বতন্ত্রভাবে নামকরণ করা হয়। পূর্বে ডাটাবেসে প্রয়োগ করা সমস্ত মাইগ্রেশন মাইগ্রেশন সারণীতে সংরক্ষণ করা হয়।

আরও তথ্যের জন্য ম্যানুয়াল থেকে ডেটাবেস মাইগ্রেশন নিবন্ধটি দেখুন।



2

আইএমএইচও মাইগ্রেশনগুলির একটি বিশাল সমস্যা রয়েছে:

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

বর্তমান সংস্করণ (শত শত গ্রাহকের ডাটাবেসের জন্য) অবধি বেসলাইনটি থেকে ডেল্টাসের পুরো ইতিহাস চালানো খুব দীর্ঘ সময় নিতে পারে।


0

একটি কমান্ড-লাইন mysql-diff সরঞ্জাম রয়েছে যা ডাটাবেস স্কিমার সাথে তুলনা করে, যেখানে স্কিমা ডিস্কে একটি লাইভ ডাটাবেস বা এসকিউএল স্ক্রিপ্ট হতে পারে। সর্বাধিক স্কিমা মাইগ্রেশন কাজের জন্য এটি ভাল।

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