আমি কীভাবে গিট (সংস্করণ নিয়ন্ত্রণ) এর অধীনে একটি ডেটাবেস রাখতে পারি?


274

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

আমি কেমন করে ঐটি করি? একটি নির্দিষ্ট ফোল্ডার আছে যা আমি গিট রিপোজিটরির আওতায় রাখতে পারি? আমি কীভাবে জানব কোনটি? আমি কীভাবে নিশ্চিত হতে পারি যে আমি সঠিক ফোল্ডারটি রাখছি?

আমার নিশ্চিত হওয়া দরকার, কারণ এই পরিবর্তনগুলি পিছনে সামঞ্জস্যপূর্ণ নয়; আমি স্ক্রু আপ সামর্থ্য না।

আমার ক্ষেত্রে ডাটাবেস পোস্টগ্রাইএসকিউএল

সম্পাদনা:

কেউ ব্যাকআপ নেওয়ার এবং ব্যাকআপ ফাইলটি ডাটাবেসের পরিবর্তে সংস্করণ নিয়ন্ত্রণে রাখার পরামর্শ দিয়েছিল। সত্যি কথা বলতে কি আমি গিলে ফেলা সত্যিই কঠিন।

এখানে অবশ্যই একটি ভাল রাস্তা আছে।

হালনাগাদ:

ঠিক আছে, সুতরাং এর চেয়ে ভাল আর কোনও উপায় নেই, তবে আমি এখনও যথেষ্ট বিশ্বাস করি না, তাই আমি প্রশ্নটি কিছুটা পরিবর্তন করব:

আমি পুরো ডাটাবেসটিকে সংস্করণ নিয়ন্ত্রণে রাখতে চাই, আমি কোন ডাটাবেস ইঞ্জিন ব্যবহার করতে পারি যাতে আমি প্রকৃত ডাটাবেসটিকে তার ডাম্পের পরিবর্তে সংস্করণ নিয়ন্ত্রণে রাখতে পারি?

স্ক্লাইট কি গিট-বান্ধব হতে পারে?

যেহেতু এটি কেবলমাত্র উন্নয়নের পরিবেশ, তাই আমি যা চাই ডাটাবেস বেছে নিতে পারি।

Edit2:

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


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


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


উত্তর:


140

একটি ডাটাবেস ডাম্প নিন এবং পরিবর্তে সংস্করণটি নিয়ন্ত্রণ করুন। এইভাবে এটি একটি ফ্ল্যাট টেক্সট ফাইল।

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

আপনি যদি বড় পরিবর্তন করছেন, আপনার কাছে একটি গৌণ ডাটাবেস থাকা উচিত যা আপনি নতুন স্কিমা পরিবর্তন করে এবং পুরানোটিকে স্পর্শ করবেন না যেহেতু আপনি যেমন বলেছিলেন যে আপনি একটি শাখা তৈরি করছেন।


132
কি? আরও ভাল উপায় আছে।
হেসেন

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

6
হুঁ, দেখছি! আচ্ছা, এমন কি ডিবি সিস্টেমগুলি আরও বেশি গিট-বান্ধব?
হেসেন

16
সমাধান এই ধরনের চমত্কার মান এবং স্কিমা হয় আসলে সোর্স কোড।
দানা দ্য সনে

12
এটি 2017, এই প্রশ্নের কোনও আপডেট আছে? বাক্সের বাইরে আসলে কোনও ডিবি সংস্করণ নেই? সত্যি?
স্ট্যাভম

48

কোড পরিবর্তনগুলির সাথে মিল রেখে আপনার ডাটাবেস বজায় রাখার জন্য একগুচ্ছ ভাল কৌশলগুলির জন্য রিফ্যাক্টরিং ডেটাবেসগুলি ( http://datediarefactoring.com/ ) দেখুন।

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

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


2
আমি ডাটাবেসফ্যাক্টরিং সাইটে প্রাসঙ্গিক তথ্য খুঁজে পেলাম না ... এটি ডিবি কোডের জন্য বিভিন্ন রিফ্যাক্টরিং কৌশলগুলির তালিকা হিসাবে উপস্থিত রয়েছে (যেমন
ফওলার

26

আমি সত্যিই একটি সহজ সমাধান ভাবতে শুরু করছি, কেন জানি না কেন আগে আমি এটি ভেবে দেখিনি !!

  • ডাটাবেসটির সদৃশ করুন (স্কিমা এবং ডেটা উভয়)।
  • নতুন-প্রধান-পরিবর্তনের জন্য শাখায়, নতুন সদৃশ ডাটাবেসটি ব্যবহার করার জন্য প্রজেক্ট কনফিগারেশনটি পরিবর্তন করুন।

এইভাবে আমি ডাটাবেস স্কিমা পরিবর্তনের বিষয়ে চিন্তা না করে শাখাগুলি স্যুইচ করতে পারি।

সম্পাদনা করুন:

সদৃশ দ্বারা, আমার অর্থ একটি ভিন্ন নামের (যেমন my_db_2) দিয়ে অন্য একটি ডাটাবেস তৈরি করা ; ডাম্প বা এরকম কিছু করছে না।


3
এটি সহজ এবং সর্বাধিক দক্ষ সমাধানের মতো বলে মনে হচ্ছে তবে এটিকে স্বয়ংক্রিয় করার কোনও উপায় থাকলে খুব ভাল লাগবে ... আমি অবাক হয়েছি এখনও সেখানে কিছু নেই ...
JustMaier

শাখার নামের উপর ভিত্তি করে টেমপ্লেট থেকে একটি ডাটাবেস তৈরি করতে গিট হুক,
২alore

এটি আমি যা করি, আমি ডিবি ভেরিয়েবলগুলির জন্য অন্তর্ভুক্ত ফাইলটিতে একটি আইপি চেক লাইনও যুক্ত করি যাতে যদি আমি ঘটনাক্রমে লাইভ সার্ভারে "ভুল" শাখার ফাইল আপলোড করি তবে কিছুই ভাঙবে না।
liamvictor

খুব সুন্দর প্রতিটি শাখা তার নিজস্ব ডিবি পেতে, তাই না? 🤔
ওলি

19

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


3
Liguibase এর সেরা অনুশীলনগুলি ক্রমবর্ধমান অনুক্রমিক স্ক্রিপ্টগুলির একটি সেট হিসাবে স্কিমা তৈরির স্ক্রিপ্টগুলি রাখার পরামর্শ দেয়। যদিও এটি একটি সেরা সেরা অনুশীলন আমি দেখতে পাচ্ছি না এটি কেন্দ্রীয় সংগ্রহস্থল ছাড়া কীভাবে কাজ করবে, যা আন-জিআইটি।
ফ্র্যাঙ্ক শোয়েটারম্যান

1
ঠিক আছে, আপনি যদি আপনার আইডি = এবং লেখক = ট্যাগ সম্পর্কে সতর্ক হন তবে এটি পুরোদস্তুর কাজ করবে। তত্ত্ব অনুসারে প্রতিটি ব্যবহারকারীর নিজস্ব লেখক প্রবেশ (জিইউডি) থাকবে এবং আপনি যদি আইডি = দিয়ে যুক্তিসঙ্গত কিছু করেন তবে YYYYMMDD_REV বলুন, তবে আপনি যেতে বেশ ভাল। এমনকি গিট সহ, বেশিরভাগেরই একটি প্রদত্ত প্রকল্পের জন্য একটি 'সেন্ট্রাল রেপো' রয়েছে। 99% লোকের কিছু 'কেন্দ্রীয়' থাকে না। আবার, লিকুইবেস ফাইলগুলি কেবলমাত্র প্রদত্ত ডিবি (বা সেট) এর বিরুদ্ধে কার্যকর করার জন্য একটি কমান্ডের স্ট্যাক সহ, টেক্সট এক্সএমএল-ইশ ফাইলগুলি পরিকল্পনা করে plan সমস্ত প্রকল্পের 99% সম্ভাবনা রয়েছে ডিভিসিএসের সাথে, বাস্তবে এটি অনুসরণ করার পরে 0 টি সমস্যা থাকবে।
জি

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

7

অনুরূপ প্রয়োজনের মুখোমুখি হয়েছি এবং ডাটাবেস সংস্করণ নিয়ন্ত্রণ সিস্টেমে আমার গবেষণাটি এখানে ফেলেছে:

  1. স্কিচ - পার্ল ভিত্তিক ওপেন সোর্স; PostgreSQL https://github.com/sqitchers/sqitch সহ সমস্ত বড় ডেটাবেসের জন্য উপলব্ধ
  2. মাহাউট - কেবল পোস্টগ্র্যাস এসকিউএলএর জন্য; ওপেন সোর্স ডাটাবেস স্কিমা সংস্করণ নিয়ন্ত্রণ। https://github.com/cbbrowne/mahout
  3. লিকুইবেস - আরেকটি ওপেন সোর্স ডিবি সংস্করণ নিয়ন্ত্রণ সো। ডেটিকাল বিনামূল্যে সংস্করণ। http://www.liquibase.org/index.html
  4. ডেটিক্যাল - লিকুইবেসের বাণিজ্যিক সংস্করণ - https://www.datical.com/
  5. বক্সফিউজ দ্বারা ফ্লাইওয়ে - বাণিজ্যিক sw। https://flywaydb.org/
  6. আরেকটি ওপেন সোর্স প্রকল্প https://gitlab.com/depesz/ ভার্সনিং লেখক এখানে একটি গাইড সরবরাহ করেছেন: https://www.depesz.com/2010/08/22/versioning/
  7. রেড গেট চেঞ্জ অটোমেশন - কেবল এসকিউএল সার্ভারের জন্য। https://www.red-gate.com/products/sql-development/sql-change-automation/

অতীতে, এছাড়াও কিছু নামে পরিচিত ChronicDBহয়েছিল: ChronicDB provides dynamic database upgrades with zero database downtime and inconsistencies. crunchbase.com/organization/chronicdb#section-overview ক্রিস্টিস ম্যাকরিস নামে এক ব্যক্তি সেই প্রতিষ্ঠাতার একজন ছিলেন, যা হয়ত এসসিএমবুগের জন্য পরিচিত: mkgnu.net/scmbug
Thorsten Schöning

6

মতবাদের অধীনে মাইগ্রেশন নামে একটি দুর্দান্ত প্রকল্প রয়েছে যা কেবল এই উদ্দেশ্যে নির্মিত হয়েছিল।

এটি এখনও আলফা অবস্থায় রয়েছে এবং পিএইচপি জন্য নির্মিত।

http://docs.doctrine-project.org/projects/doctrine-migrations/en/latest/index.html


অপস! আপনার লিঙ্কটি নষ্ট হয়ে গেছে ... সম্ভবত আপনি এটির
ফ্রান্সেস্কো

এখানে সিমফনি 2-তে মতবাদ স্থানান্তরকে সংহত করার জন্য বান্ডিলের জন্য ডকগুলি: symfony.com/doc/master/bundles/DoctrineMigrationBundle/…
ফ্রান্সেসকো

1
টিপটির জন্য ধন্যবাদ, মতবাদী ছেলেদের ডক্সের অবস্থান পরিবর্তন করার প্রবণতা রয়েছে, যার ফলে এখানে এবং গুগল উভয়ই অনেকগুলি ভাঙা লিঙ্ক তৈরি করে। লিঙ্কটি স্থির করে।
হাকান ডেরিয়াল

4

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

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

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

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

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

গিটটি ডেল্টাস তৈরি diffকরে এমন প্রক্রিয়াটি এবং যে প্রক্রিয়াটি দ্বারা এটি একটি ফাইলের সাথে 1 বা একাধিক ডেল্টাস সংযোজন করে তাকে ডাকা হয় merge। আপনি যদি আলাদা প্রসঙ্গ থেকে পৃথক এবং মার্জ করার জন্য কোনও পদ্ধতি নিয়ে আসতে পারেন তবে গিটটি কাজ করা উচিত, তবে যেমনটি আলোচনা করা হয়েছে আপনি এমন কোনও সরঞ্জাম পছন্দ করতে পারেন যা এটি আপনার পক্ষে করে। সমাধানের দিকে আমার প্রথম চিন্তাটি হ'ল এই https://git-scm.com/book/en/v2/Customizing-Git-Git-Configration#Extern-Merge- and-Diff- টুলে যেগুলি কীভাবে গিটের অভ্যন্তরীণ পার্থক্য প্রতিস্থাপন করতে হবে এবং মার্জ সরঞ্জাম আমি এই উত্তরটি আপডেট করব, যেহেতু আমি সমস্যার আরও ভাল সমাধান নিয়ে এসেছি, তবে আমার ক্ষেত্রে আমি কেবলমাত্র ডেটা পরিবর্তনগুলি পরিচালনা করতে হবে বলে মনে করি, ডিবি ভিত্তিক ফাইল স্টোরটি খুব দূরত্বে পরিবর্তন হতে পারে, তাই আমার সমাধান আপনার যা প্রয়োজন ঠিক তা নাও হতে পারে।


3

রেডগেট এসকিউএল সোর্স কন্ট্রোলটি একবার দেখুন।

http://www.red-gate.com/products/sql-development/sql-source-control/

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

এটি প্রতি ব্যবহারকারী $ 495 এ কিছুটা দামি, তবে একটি 28 দিনের বিনামূল্যে ট্রায়াল উপলব্ধ।

দ্রষ্টব্য আমি কোনওভাবেই রেডগেটের সাথে অনুমোদিত নই।


3

আমি অনুরূপ কিছু করতে চাই, আমার সংস্করণ নিয়ন্ত্রণ সিস্টেমে আমার ডাটাবেস পরিবর্তনগুলি যুক্ত করুন।

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

  • উত্স নিয়ন্ত্রণ সিস্টেমে এর স্কিমা এবং রেফারেন্স ডেটা উভয়ই সংরক্ষণ করুন।
  • প্রতিটি পরিবর্তনের জন্য আমরা পরিবর্তনগুলি সহ একটি পৃথক এসকিউএল স্ক্রিপ্ট তৈরি করব

যদি এটি সাহায্য করে!


3
  • Irmin
  • Flur.ee
  • ক্রুস ডিবি

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

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

এই ডাটাবেসটি সম্প্রতি ব্লকচেইন-উদ্দেশ্যে তৈরি করা হয়েছিল। ব্লকচেইনগুলির প্রকৃতির কারণে ডেটাগুলি ইনক্রিমেন্টে রেকর্ড করা দরকার যা গিট ঠিক কীভাবে কাজ করে। তারা কিউ 2 2019-তে একটি মুক্ত-উত্স প্রকাশকে লক্ষ্য করছে

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

আপডেট : ক্রুকস ডাটাবেসটিও দেখুন , যা সন্নিবেশগুলির সময় মাত্রা জুড়ে প্রশ্ন করতে পারে, যা আপনি 'সংস্করণ' হিসাবে দেখতে পেতেন। ক্রাক্সকে অত্যন্ত প্রশংসিত ডেটামিকের একটি মুক্ত উত্স বাস্তবায়ন বলে মনে হচ্ছে।

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


2

আপনি এটি পারমাণবিকতা ব্যতীত করতে পারবেন না, এবং আপনি pg_dump বা একটি স্ন্যাপশ্যাটিং ফাইল সিস্টেম ব্যবহার না করে পারমাণবিকতা পেতে পারবেন না।

আমার পোস্টগ্র্যাসের উদাহরণটি zfs এ রয়েছে, যা আমি মাঝে মধ্যে স্ন্যাপশট করি। এটি প্রায় তাত্ক্ষণিক এবং সামঞ্জস্যপূর্ণ।


2

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

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


2

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

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

https://github.com/cannadayr/git-sqlite


দেখে মনে হচ্ছে আপনি গিটকে বাইনারি ডেটা যেমন আছে তেমন সঞ্চয় করতে দেয়। পরিবর্তে, কেউ ডাম্পগুলি সঞ্চয় করতে ক্লিন / স্মাড ফিল্টার ব্যবহার করতে পারে। আছে কিছু স্ক্রিপ্ট যা এটা করতে।
সর্বাধিক 630

1
আপনি দু'টি ডাটাবেসের মধ্যে পার্থক্য না করলে শালীন দৃষ্টিভঙ্গি বাদে আপনি ডাম্পের পাঠ্যগত পার্থক্য সম্পাদন করছেন। কাস্টম ডিফ ড্রাইভার হিসাবে স্ক্লাডিফ ব্যবহার করে আপনি আপনার ডাটাবেসটিকে পরবর্তী অবস্থায় রূপান্তর করতে আসল কমান্ড পাবেন।
cannadayr

1

আমি মনে করি এক্স-ইজিশনটি সঠিক পথে রয়েছে তবে আপনি এই কৌশলটিতে আরও কয়েকটি উন্নতি করতে পারেন। প্রথমে ব্যবহার করুন:

$pg_dump --schema ... 

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

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

$pg_dump --table=.. <or> --exclude-table=..

এটি একটি ভাল ধারণা কারণ আপনার ডেটাবেস যখন 100Mb + তে পূর্ণ ডেটা ডাম্প করে তখন রেপো সত্যিই ক্লানকি পেতে পারে। আরও ভাল ধারণা হ'ল আপনার অ্যাপ্লিকেশনটি পরীক্ষা করার জন্য প্রয়োজনীয় সংখ্যার আরও ন্যূনতম সেট আপ করা up যদি আপনার ডিফল্ট ডেটা খুব বড় হয় তবে এটি এখনও সমস্যা তৈরি করতে পারে।

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

এছাড়াও, আমি পুনর্বিবেচনার উদ্দেশ্যে বাইনারি ধরে টেক্সট ফর্ম্যাট ডাম্পগুলি ব্যবহার করার পরামর্শ দিচ্ছি (কমপক্ষে স্কিমার জন্য) যেহেতু এগুলি পৃথক করা সহজ। আপনি চেক ইন করার আগে স্থান বাঁচাতে সর্বদা এগুলি সঙ্কুচিত করতে পারেন।

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


ডাম্প শুধু একটি ব্যাকআপ না?
হেসেন

হ্যাঁ, তবে আপনি এটি একটি বিকল্প ডাটাবেসে পুনরুদ্ধার করতে পারেন এবং সেখানে নিজের পরিবর্তন করতে পারেন।
দানা দ্য সনে

1

এই প্রশ্নের বেশ উত্তর দেওয়া হয়েছে তবে আমি একটি ছোট পরামর্শ দিয়ে এক্স-ইশিটেশন এবং দানা সানের উত্তরকে পরিপূরক করতে চাই।

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

এটি দিয়ে আপনার উভয়ই পুনর্বিবেচনা নিয়ন্ত্রণের সুবিধা রয়েছে এবং আপনি খুব বেশি জায়গা নষ্ট করবেন না।

যে কোনও ক্ষেত্রে, বড় ফ্ল্যাট ফাইলগুলিতে সরাসরি গিট ব্যবহার করা যা খুব ঘন ঘন পরিবর্তিত হয় ভাল সমাধান নয়। যদি আপনার ডাটাবেস খুব বড় হয়ে যায়, গিটের ফাইলগুলি পরিচালনা করতে কিছু সমস্যা হতে শুরু করবে।


1

আমার প্রকল্পগুলিতে আমি যা করার চেষ্টা করছি তা এখানে:

  • পৃথক তথ্য এবং স্কিমা এবং ডিফল্ট ডেটা।

ডাটাবেস কনফিগারেশন কনফিগারেশন ফাইলে সংরক্ষণ করা হয় যা সংস্করণ নিয়ন্ত্রণের অধীনে নেই (.gitignore)

ডাটাবেস ডিফল্ট (নতুন প্রকল্প স্থাপনের জন্য) সংস্করণ নিয়ন্ত্রণে একটি সাধারণ এসকিউএল ফাইল।

ডাটাবেসের জন্য স্কিমা সংস্করণ নিয়ন্ত্রণের অধীনে একটি ডেটাবেস স্কিমা ডাম্প তৈরি করুন।

সর্বাধিক সাধারণ উপায় হল আপডেট স্ক্রিপ্টগুলিতে এসকিউএল স্টেটমেন্টগুলি রয়েছে (আল্টার টেবিল .. বা আপডেট)। আপনার ডাটাবেসে আপনার এমন একটি জায়গা থাকা উচিত যেখানে আপনি আপনার স্কিমার বর্তমান সংস্করণটি সংরক্ষণ করেন)

অন্যান্য বড় ওপেন সোর্স ডাটাবেস প্রকল্পগুলি দেখুন (পিক, বা আপনার প্রিয় সিমি সিস্টেম), তারা সকলেই আপডেট স্ক্রিপ্টগুলি ব্যবহার করে (1.sql, 2.sql, 3.sh, 4.php.5.sql)

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

সুতরাং তাত্ত্বিকভাবে (এবং আমি যা সন্ধান করছি তা হ'ল) ​​প্রতিটি পরিবর্তনের পরে আপনি ডাটাবেস স্কিমাটি ফেলে দিতে পারেন (ম্যানুয়ালি, কনজব, গিট হুকস (সম্ভবত কমিট করার আগে)) (এবং কেবলমাত্র কিছু বিশেষ ক্ষেত্রে আপডেট স্ক্রিপ্ট তৈরি করা হয়)

এর পরে আপনার সাধারণ আপডেটসক্রিপ্টে (বিশেষ আপডেটের জন্য সাধারণ আপডেট স্ক্রিপ্টগুলি চালনা করুন) এবং তারপরে স্কিমাস (ডাম্প এবং বর্তমান ডাটাবেস) তুলনা করুন এবং তারপরে স্বয়ংক্রিয়ভাবে নেসেসারি অলটার বিবৃতি জেনারেট করুন। এমন কিছু সরঞ্জাম রয়েছে যা ইতিমধ্যে এটি করতে পারে তবে এখনও একটি ভাল সরঞ্জাম খুঁজে পায় নি।


1

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


@ নিকোলে হ্যাঁ এটি বন্ধ হয়ে গেছে বলে মনে হচ্ছে। বিকল্প হিসাবে কেন আপনি স্কিচ চেষ্টা করবেন না আপনি এটি এখানে পাবেন sqitch.org
জেরি এম সানি

ধন্যবাদ, এটি পরীক্ষা করে দেখুন!
নিকোলে

1

আমি আমার ব্যক্তিগত প্রকল্পগুলিতে যা করি তা হ'ল, আমি আমার পুরো ডাটাবেসটি ড্রপবক্সে সঞ্চয় করি এবং তারপরেই এখান থেকে এটি ব্যবহার করার জন্য এমএএমপি, ডাব্লুএইচএমপি ওয়ার্কফ্লোটি নির্দেশ করি .. এইভাবে ডেটাবেস সর্বদা আপ টু ডেট থাকে যেখানে আমাকে কিছু বিকাশ করতে হবে। তবে এটি কেবল দেবের জন্য! লাইভ সাইটগুলি সেই অফ কোর্সের জন্য নিজস্ব সার্ভার ব্যবহার করছে! :)


1

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


1

আমি এটি কিভাবে করি:

যেহেতু আপনার ডিবি টাইপ সম্পর্কে ফ্রি চয়েজ রয়েছে যেমন ফাইলবাইজড ডিবি যেমন ফায়ারবার্ড ব্যবহার করুন।

এমন একটি টেম্পলেট ডিবি তৈরি করুন যার স্কিমা রয়েছে যা আপনার প্রকৃত শাখায় ফিট করে এবং এটি আপনার ভাণ্ডারে সংরক্ষণ করে in

আপনার অ্যাপ্লিকেশনটি কার্যকর করার সময় আপনার টেমপ্লেট ডিবিটির একটি অনুলিপি তৈরি করুন, এটিকে অন্য কোথাও সংরক্ষণ করুন এবং সেই অনুলিপিটির সাথে কাজ করুন।

আপনি আপনার ডিবি স্কিমাটি ডেটা ছাড়াই সংস্করণ নিয়ন্ত্রণে রাখতে পারেন put এবং আপনি যদি আপনার স্কিমা পরিবর্তন করেন তবে আপনাকে কেবলমাত্র ডিবি টেমপ্লেট পরিবর্তন করতে হবে


1

আমরা একটি স্ট্যান্ডার্ড এলএএমপি কনফিগারেশনে একটি সামাজিক ওয়েবসাইট চালাতাম। আমাদের একটি লাইভ সার্ভার, টেস্ট সার্ভার এবং বিকাশ সার্ভার, পাশাপাশি স্থানীয় বিকাশকারী মেশিন ছিল। সমস্ত জিআইটি ব্যবহার করে পরিচালিত হয়েছিল।

প্রতিটি মেশিনে, আমাদের পিএইচপি ফাইল ছিল, তবে মাইএসকিউএল পরিষেবা, এবং চিত্রগুলির একটি ফোল্ডার যা ব্যবহারকারীরা আপলোড করতে পারে। লাইভ সার্ভারে প্রায় ১০০ কে (!) বার বার ব্যবহারকারী এসেছে, ডাম্প ছিল প্রায় 2 জিবি (!), চিত্র ফোল্ডারটি ছিল 50 জিবি (!)। আমি চলে যাওয়ার সময়, আমাদের সার্ভারটি তার সিপিইউ, রাম এবং সর্বোপরি একযোগে নেট সংযোগের সীমাতে পৌঁছেছিল (এমনকি সার্ভারটি 'লোল' সর্বাধিক করার জন্য আমরা নেটওয়ার্ক কার্ড ড্রাইভারের নিজস্ব সংস্করণটি সংকলিত করেছি)। আমরা জিআইটিতে 2GB ডেটা এবং 50 জিবি চিত্র রাখতে পারি না ( বা আপনার ওয়েবসাইটটি ধরে নেওয়া উচিত নয় )।

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

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

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

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

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


0

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

এটি আপনাকে আলাদা আলাদা পরিবেশে পৃথক পরিবর্তন প্রয়োগ করতে, কোন পরিবেশে কোন পরিবর্তন রয়েছে তা পরিবর্তন রাখতে পারে, এন এর মাধ্যমে পরিবর্তন এ প্রয়োগ করতে স্ক্রিপ্ট তৈরি করতে পারে, রোলব্যাক পরিবর্তন ইত্যাদি।


0

আমি পুরো ডাটাবেসটিকে সংস্করণ নিয়ন্ত্রণে রাখতে চাই, আমি কোন ডাটাবেস ইঞ্জিন ব্যবহার করতে পারি যাতে আমি প্রকৃত ডাটাবেসটিকে তার ডাম্পের পরিবর্তে সংস্করণ নিয়ন্ত্রণে রাখতে পারি?

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


2
আপনার সত্যিকারের ক্লোনিওতে এটি দেখতে পাওয়া উচিত যা উপাত্তগুলিকে সংস্করণ করার জন্য তৈরি করা হয় (বর্তমানে মঙ্গো এবং মাইএসকিউএল সমর্থন করে)। এখনও বিটাতে রয়েছে, তবে বেশ আশাব্যঞ্জক বলে মনে হচ্ছে।
farthVader

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