নতুন সংস্করণে ধাক্কা দেওয়ার সময় ডাটাবেস স্কিমার পরিবর্তনগুলি পরিচালনা করা


17

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

কিছু আমি খুঁজে পেয়েছি বা অভিজ্ঞতা পেয়েছি:

  1. এক ডাটাবেস থেকে অন্য ডাটাবেসে সোজাভাবে নুয়ে-ডাম্প (আমি এখন কী করছি)
  2. স্ক্রিপ্টের মাধ্যমে বা হাতে চালিত এসকিউএল স্টেটমেন্টগুলির সাথে একটি আপডেট করা.এসকিউএল ফাইল বজায় রাখা।
  3. সক্রিয় ডাটাবেসে সম্পর্কিত "ডিবি-স্কিমা-সংস্করণ" মান সহ একটি আপডেট.এফপিপি ফাইল বজায় রাখা

তৃতীয় বিকল্পটি সর্বাধিক বোধগম্য বলে মনে হচ্ছে, তবে একটি খারাপভাবে নির্মিত এসকিউএল কোয়েরি মিড-স্ক্রিপ্ট ব্যর্থ হওয়ার সম্ভাবনা রয়েছে, ডাটাবেসটিকে অর্ধ-আপডেট অবস্থায় রেখে ব্যাকআপ পুনরুদ্ধারের প্রয়োজন necess

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

আমার ধারণা আমি কী প্রত্যাশা করছি তা এমন একটি সমাধান যা আমাদের প্রতিষ্ঠিত উন্নয়ন কর্মপ্রবাহকে প্রভাবিত করে না?


তবে অবশ্যই, আপনি সক্রিয় ডাটাবেসে এটি প্রয়োগ করার আগে একটি পরীক্ষা পরিবেশে আপনার update.phpবা update.sqlফাইলটি পরীক্ষা করে দেখিয়েছেন, তাই না? এবং পিএইচপিএমআইএডমিনকে স্ক্রিপ্টের মতো সম্ভাব্য সমস্যাগুলির জন্য দোষ দেওয়া হচ্ছে, সম্ভবত এটি কোনও আলাদা / আরও ভাল সরঞ্জাম দেখার সময় এসেছে?
হতাশিত

হাহা, হ্যাঁ, আপনি আমাকে ধরেছেন। আমি আমার নিজের ব্যর্থতাগুলি প্রথম স্থানে সমাধানের পরিবর্তে কাজ করার চেষ্টা করছি।
জুলিয়ান এইচ লাম

আপনি যদি এই কাজটি পেয়ে থাকেন তবে দয়া করে একটি উদাহরণ স্ক্রিপ্ট দেখাবেন? আমি এটিও করার চেষ্টা করছি তবে এমএস এসকিউএল-এর মধ্যে যে কোনও মাইএসকিএল অনুবাদ করব তা কীভাবে করব না: stackoverflow.com/questions/26948916/…
রিচার্ড

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

উত্তর:


11

স্বয়ংক্রিয়। স্বয়ংক্রিয়। স্বয়ংক্রিয়।

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

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


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

2

ডাটাবেস স্কিমা সংস্করণটি যাবার উপায় - প্রতিটি সংস্করণে ডাটাবেসে কেবল একটি পরিবর্তন হয় বা কমপক্ষে পরিবর্তনগুলিও পুরোপুরি ফিরে যেতে পারে। এটি স্বয়ংক্রিয় করার জন্য ডিবিডেপ্লয় একটি দুর্দান্ত সরঞ্জাম।

আমি দরকারী জিনিস শিখেছি কিছু জিনিস হ'ল:

  1. সর্বদা আপনার পরিবর্তন স্থানীয়ভাবে পরীক্ষা করুন এবং এটির সাথে আপনার কোডটি পরীক্ষা করুন, কেবল ALTERপাসিং যথেষ্ট নয়
  2. আপনাকে প্রথমে তাদের পরিবর্তনটি করতে হবে এমনটি সিঙ্ক্রোনাইজ করতে হবে - একটি সাধারণ উইকি পৃষ্ঠা যেখানে আপনি আমার দলের জন্য দুর্দান্ত "কাজ করতে" পারেন।
  3. ভাঙা পরিবর্তন সংশোধন করার চেষ্টা করবেন না, একে অস্বীকার করার জন্য একটি নতুন পাল্টা-পরিবর্তন যুক্ত করুন, এটি অনেকটা বেদনাবিহীন
  4. আপনার কোডটি সেই পরিবর্তনের উপর নির্ভর করে - আপনার বাগ-ট্র্যাকিং সিস্টেমের সমস্যাগুলি ডিবি পরিবর্তনের সাথে যুক্ত করতে ভুলবেন না। এটি মোতায়েনের সময় খুব সহায়ক।
  5. আপনার সিআই-তে ডিবি পরিবর্তনগুলি অন্তর্ভুক্ত করুন - প্রতিশ্রুতিবদ্ধতার পরিবর্তে সিআই ডাটাবেসে আপনার পরিবর্তনগুলি প্রয়োগ করুন। এছাড়াও, আপনার যদি কোনও পরীক্ষা করে থাকে যা একটি ডাটাবেস ব্যবহার করে, সেগুলি কমিট করে চালান।

আমি সহায়তায় আনন্দিত :)
jmruc

0

যেহেতু আপনি phpMyAdmin ব্যবহার করছেন, তখন আমি ধরে নিচ্ছি আপনিও মাইএসকিউএল ব্যবহার করছেন।

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

প্রথমত, আপনি একটি ডাটাবেস উত্স দিয়ে মডেলটি সিঙ্ক্রোনাইজ করতে পারেন। যাতে ডায়াগ্রামের পরিবর্তনগুলি ALL TABLE কমান্ড হিসাবে ঠেলা যায়। এটি আপনাকে ডায়াগ্রামে আপনার স্কিমা পরিবর্তনগুলি সম্পাদন করতে, প্রয়োজনের সময় আপনার বিকাশ ডাটাবেসে আপডেট করার সময় সর্বদা তা আপডেট রাখে।

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

তৃতীয়ত, এটি তৈরি করা এসকিউএল তৈরিতে সহায়তা করতে ব্যবহার করা যেতে পারে যা আপনার "আপডেট.sql" ফাইলের মধ্যে চলে go

কনস:

ডাটাবেস ট্রিগার এবং সীমাবদ্ধতা সিঙ্ক্রোনাইজ আপডেটেটারে সমস্যা। এটি জিনিসগুলির সঠিক ক্রমটি জানে বলে মনে হয় না। বিদেশী কী বাধাগুলি প্রায়শই ত্রুটি উত্পন্ন করে, তবে এটি উত্পন্ন এসকিউএল সম্পাদনা করে এটি সমাধান করা যেতে পারে।

এটি কোনও ডেটা মাইগ্রেশন সরঞ্জাম নয়। খালি স্কিমার বাইরে যে কোনও পরিবর্তনগুলির জন্য এখনও কাস্টম এসকিউএল প্রয়োজন হবে।


0

কটাক্ষপাত http://south.aeracode.org - এটা জ্যাঙ্গো (ক পাইথন ফ্রেমওয়ার্ক) কিন্তু একটি ডিবি মাইগ্রেশন গ্রন্থাগার আছে:

  1. আপনি এ থেকে দুর্দান্ত ধারণা পেতে পারেন (এবং সম্ভবত একটি পিএইচপি ক্লোনও খুঁজে পেতে পারেন)
  2. আপনি আপনার পিএইচপি / মাইএসকিউএল অ্যাপ্লিকেশনগুলির টেবিলগুলি পরিচালনা করতে বাকী জাঙ্গো থেকে স্বাধীনভাবে এটি ব্যবহার করতে পারেন।

এটি স্কিমা আপডেট স্ক্রিপ্টগুলিও তৈরি করতে পারে; এটি বেশিরভাগ সময় স্বয়ংক্রিয়ভাবে পরিবর্তনের বিপরীতগুলি পরিচালনা করে।


দুঃখের বিষয়, তারা এটিকে জ্যাঙ্গো কোরের অংশ বানিয়েছে এবং আর একা দাঁড়িয়ে নেই
Itay Moav -Malimovka
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.