ডাটাবেস উত্স নিয়ন্ত্রণ


57

ডাটাবেস ফাইল (স্ক্রিপ্ট ইত্যাদি) উত্স নিয়ন্ত্রণে থাকা উচিত? যদি তা হয় তবে এটি রাখার এবং সেখানে আপডেট করার সর্বোত্তম পদ্ধতি কোনটি?

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

উত্স-নিয়ন্ত্রণে ডাটাবেসের জন্য কোন পদ্ধতির ব্যবহার সবচেয়ে ভাল?


23
হাজার বার হ্যাঁ! সাধারণ প্রশ্ন একটি সহজ উত্তর প্রাপ্য।
maple_shaft

1
স্ট্যাকওভারফ্লো ডট কম এ একবার এই বিষয় নিয়ে বিশাল আলোচনা হয়নি?
হতাশাহীন

7
ডাটাবেস এসকিউএল ফাইলগুলি (ডিডিএল, ডিএমএল) কোড হয়। সমস্ত কোড একটি সংস্করণ নিয়ন্ত্রণ সিস্টেমে থাকা উচিত।
ডায়েটবুদ্ধ

4
আহা! আমি মনে করি এটিই আমি খুঁজছিলাম: স্ট্যাকওভারফ্লো.com
হতাশাগ্রস্থ

1
কেবলমাত্র আপনার ডাটাবেস উত্স নিয়ন্ত্রণে থাকা উচিত নয় তবে এমন একটি একক স্ক্রিপ্ট থাকা উচিত যা আপনি এটি স্ক্র্যাচ থেকে পুনরায় তৈরি করতে চালাতে পারেন, এটি সারণী, সিকোয়েন্স, ভিউ, প্যাকেজস ইত্যাদি
বেন

উত্তর:


42

হ্যাঁ. আপনার সিস্টেমের যে কোনও অংশটি ডাটাবেস সহ উত্স নিয়ন্ত্রণ থেকে পুনর্নির্মাণ করতে সক্ষম হওয়া উচিত (এবং আমি কিছু স্থির ডেটাও যুক্তি দিয়েছিলাম)।

ধরে নিই যে এটি করার কোনও সরঞ্জাম আপনি রাখতে চান না, আমি আপনাকে নিম্নলিখিতগুলি অন্তর্ভুক্ত করতে চাইব:

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

সমস্ত স্ক্রিপ্টগুলিতে যথাযথ ড্রপ স্টেটমেন্টগুলি অন্তর্ভুক্ত করা উচিত এবং লিখিত হওয়া উচিত যাতে এগুলি যে কোনও ব্যবহারকারী হিসাবে চালানো যায় (যেমন সম্পর্কিত সম্পর্কিত স্কিমা / মালিকের উপসর্গ সহ)।

আপডেট / ট্যাগিং / ব্রাঞ্চিংয়ের প্রক্রিয়াটি অন্যান্য উত্স কোডের মতোই হওয়া উচিত - আপনি যদি কোনও অ্যাপ্লিকেশন সংস্করণের সাথে কোনও ডাটাবেস সংস্করণ সংযুক্ত করতে না পারেন তবে এটি করার কোনও দরকার নেই।

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


এমন কোনও সরঞ্জাম আছে যা ম্যানুয়ালি না করেই ডাটাবেস কনফিগারেশনগুলির এসপিএস বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে সংস্করণ নিয়ন্ত্রণে জমা দেয় ?!
আলী

@ অলি: একটি ফ্ল্যাটফাইলে এসপি লিখুন যা সংস্করণটি নিয়ন্ত্রিত। এটি কোনও ডিবি স্ক্রিপ্টের ইনপুট হতে হবে যা আপনার স্থানান্তর চালায়।
ডায়েটবুদ্ধ

18

হ্যাঁ.

এটি রাখার এবং সেখানে এটি আপডেট করার সর্বোত্তম পদ্ধতি কোনটি?

উম। স্কিমা-নির্মাতা স্ক্রিপ্ট লিখুন। পরিবর্তনগুলি করার পরে এটি পরীক্ষা করে দেখুন। এটি চালানোর আগে এটি পরীক্ষা করে দেখুন।

আপনি যা চাইছেন তা নির্ধারণ করা শক্ত।

আনুষ্ঠানিক স্কিমা মাইগ্রেশন স্ক্রিপ্ট লিখুন। পরীক্ষার পরে তাদের পরীক্ষা করে দেখুন। এগুলি চালানোর আগে তাদের পরীক্ষা করে দেখুন।

আর কি আছে?

যা ঘটে তা হ'ল স্কিমা পরিবর্তনগুলি গুরুতর সমস্যায় রূপান্তরিত হয় কারণ স্কিমাটি অনিবন্ধিত পরিবর্তনের একটি সিরিজের মাধ্যমে জৈবিকভাবে বিকশিত হয়।

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

যদি কোনও একক, অনুমোদনের উত্স থাকে তবে স্কিমা মাইগ্রেশন হ'ল শেষ সংস্করণ এবং এই সংস্করণটির মধ্যে ব-দ্বীপ।


7

হ্যাঁ

ডাটাবেস স্ক্রিপ্ট (ddl, dML) কোড হয়। সমস্ত কোড একটি সংস্করণ নিয়ন্ত্রণ সিস্টেমে থাকা উচিত।

মাইগ্রেশন

  • ডাটাবেস স্থানান্তর ব্যবহার করুন

আপনাকে একই ডিবি ফাইলগুলি বিকাশ, কিউএ এবং রিলিজে ব্যবহার করতে দেয়।

  • একটি রিলিজ নম্বর সহ ডাটাবেসে প্রকাশ করুন

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


7

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

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


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

1
@ বোজানস্ক্র: আমি ভয় করি যে আমার কোনও অভিজ্ঞতা না থাকলেও ওয়েবসাইটটি "কোনও সমস্যা নেই" হিসাবে সমর্থিত হিসাবে এসকিউএল সার্ভারকে তালিকাবদ্ধ করে।
ফ্যালকন

যাইহোক টিপ জন্য ধন্যবাদ। আপনার পরামর্শ খুব সহায়ক হয়েছে।
দ্য বোয়ান

5

হ্যাঁ

এবং আরও দূরে, আপনি শাখা চাইবেন ।


আমি শাখাগুলির জন্য গিট ব্যবহার করি:

  • প্রতি বৈশিষ্ট্য বিকাশের জন্য (যেমন আমরা বাকি অ্যাপ্লিকেশনগুলির নিয়মিত বিকাশের জন্য করি)

  • এবং প্রডাকশন সার্ভারের জন্য একটি কারণ অ্যাপ্লিকেশন ব্যবহার করা গ্রাহকরা সামগ্রীগুলিও তৈরি করে।

এইভাবে, আপনি উত্স নিয়ন্ত্রণ এবং উভয় উত্স কোড এবং ডাটাবেস (এবং আপনার কাছে অন্য যে কোনও ফাইল রয়েছে) এর শাখা থেকে সুবিধা পাবেন।


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

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


5

জাভার জন্য, আমাদের দলটি ফ্লাইওয়ে ব্যবহার করে , যা আমরা ব্যবহার করতে খুব সহজ এবং শক্তিশালী বলে মনে করি।

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

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

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


3

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

ডাটাবেস সংস্করণ নিয়ন্ত্রণ কার্যকর হওয়ার জন্য নিয়মিত কোড সংস্করণ নিয়ন্ত্রণের মতো হতে হবে না। তবে এক ধরণের পরিবর্তন নিয়ন্ত্রণ এবং ইতিহাসের ব্যাকআপ অনেক সমস্যা রোধ করবে।


আপনি এই নিবন্ধটি সম্পর্কে আগ্রহী হতে পারেন: মার্টিনফাউলারের.আর্টিকেলস
ফ্যালকন

2

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


0

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

এটি কলাম যুক্ত / পরিবর্তন / কমানো, চালানো ক্যোয়ারী, সূচী যোগ / ছাড়ার সূচি, সীমাবদ্ধতা ইত্যাদি সমর্থন করে It এটি আপনাকে যে কোনও স্থানান্তরিত হওয়া উচিত তা নির্দিষ্ট করে "সময়ের সাথে পিছনে ফিরে যেতে" অনুমতি দেয়। ( php ladder.php migrate 15)

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


0

ডেটাগ্রোভ এখানে উল্লিখিত কিছু সমস্যা সমাধান করে ( উদাহরণস্বরূপ jfrankcarr দ্বারা )।

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


0

আমি একটি মনিটরিং সরঞ্জাম আনতে চাই যা ডেটা সংস্করণকরণ সরঞ্জাম হিসাবেও ব্যবহৃত হতে পারে। আমি যে সরঞ্জামটির কথা বলছি তা হ'ল মনিওগ, আসলে এটি একটি মাইএসকিউএল মনিটরিং সরঞ্জাম তবে সামান্য হ্যাকের সাহায্যে আমরা সহজেই এটি ডেটা সংস্করণ হিসাবে ব্যবহার করতে পারি।

তবে আরও যাওয়ার আগে আমি উদ্ধৃতি দিয়ে বলব যে ভার্সনটির জন্য পুরো ডাটাবেস রাখার পরামর্শ দেওয়া হবে না। কোনও নির্দিষ্ট সেট ডেটার পরিবর্তনের জন্য ট্র্যাক করা আসল হত্যাকারী।

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

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