উত্স নিয়ন্ত্রণ থেকে আপনার ডাটাবেসটি কীভাবে তৈরি করা উচিত?


103

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

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

বাস্তব বিশ্বে কী কী অনুশীলন কার্যকর হয়েছে সে সম্পর্কে আমি এসও সম্প্রদায়ের কাছ থেকে কিছু ধারণা শুনতে চাই।

আমি বুঝতে পারি যে এটি অনুশীলনমূলক যেটি অনুশীলনগুলি সত্যই সেরা, তবে আমি মনে করি কোন কাজটি অনেক লোকের পক্ষে সহায়ক হতে পারে সে সম্পর্কে একটি ভাল কথোপকথন।

এই বিষয়টিতে উদ্বেগের ক্ষেত্রগুলি সম্পর্কে আমার টিজারের কয়েকটি প্রশ্ন এখানে রয়েছে। এগুলি একটি নির্দিষ্ট তালিকা হতে বোঝায় না - বরং আমি কী খুঁজছি তা বুঝতে সাহায্য করার জন্য লোকদের জন্য একটি সূচনা পয়েন্ট point

  1. উভয় পরীক্ষা এবং উত্পাদন পরিবেশ উত্স নিয়ন্ত্রণ থেকে নির্মিত উচিত?
    • উভয়ই অটোমেশন ব্যবহার করে তৈরি করা উচিত - বা কোনও স্থিতিশীল, চূড়ান্ত পরীক্ষার পরিবেশ থেকে কোনও বিষয়বস্তু অনুলিপি করে নির্মিত উচিত?
    • পরীক্ষার স্ক্রিপ্টগুলিতে পরীক্ষা এবং উত্পাদন পরিবেশের মধ্যে সম্ভাব্য পার্থক্যগুলি কীভাবে মোকাবেলা করবেন?
    • আপনি কীভাবে পরীক্ষা করতে পারেন যে মোতায়েনের স্ক্রিপ্টগুলি পরীক্ষার মতো উত্পাদনের বিরুদ্ধে কার্যকরভাবে কাজ করবে?
  2. কোন ধরণের অবজেক্টগুলিকে সংস্করণটি নিয়ন্ত্রণ করা উচিত?
    • শুধু কোড (পদ্ধতি, প্যাকেজ, ট্রিগার, জাভা, ইত্যাদি)?
    • ইনডেক্সে?
    • সীমাবদ্ধতাসমূহ?
    • ছক সংজ্ঞা?
    • টেবিল পরিবর্তন স্ক্রিপ্ট? (উদাহরণস্বরূপ স্ক্রিপ্টগুলি পরিবর্তন করুন)
    • সবকিছু?
  3. কোন ধরণের অবজেক্টগুলিকে সংস্করণটি নিয়ন্ত্রণ করা উচিত নয়?
    • সিকোয়েন্স?
    • অনুদান?
    • ব্যবহারকারীর অ্যাকাউন্ট?
  4. আপনার এসসিএম সংগ্রহস্থলে ডাটাবেস অবজেক্টগুলি কীভাবে সংগঠিত করা উচিত?
    • রূপান্তর স্ক্রিপ্ট বা অলটার স্ক্রিপ্টের মতো এককালীন জিনিসগুলির সাথে আপনি কীভাবে ডিল করবেন?
    • আপনি কীভাবে ডেটাবেস থেকে অবসরপ্রাপ্ত বস্তুগুলির সাথে ডিল করবেন?
    • উন্নয়ন থেকে পরীক্ষার স্তরগুলিতে অবজেক্টগুলির প্রচারের জন্য কার দায়বদ্ধ হওয়া উচিত ?
    • আপনি একাধিক বিকাশকারীদের থেকে পরিবর্তনগুলি কীভাবে সমন্বয় করবেন?
    • আপনি একাধিক সিস্টেম দ্বারা ব্যবহৃত ডাটাবেস অবজেক্টের জন্য শাখা নিয়ে কাজ করবেন?
  5. কোন ব্যতিক্রম, যদি থাকে তবে এই প্রক্রিয়াটি যুক্তিসঙ্গত করা যায়?
    • নিরাপত্তা বিষয়ক?
    • ডে-সনাক্তকরণ উদ্বেগ সহ ডেটা?
    • সম্পূর্ণরূপে স্বয়ংক্রিয় করা যায় না এমন স্ক্রিপ্টগুলি?
  6. আপনি কীভাবে প্রক্রিয়াটিকে স্থিতিস্থাপক এবং প্রয়োগযোগ্য করে তুলতে পারেন?
    • বিকাশকারী ত্রুটি?
    • অপ্রত্যাশিত পরিবেশগত সমস্যাগুলি?
    • দুর্যোগ পুনরুদ্ধারের জন্য?
  7. আপনি কীভাবে সিদ্ধান্ত গ্রহণকারীদের বোঝাতে পারেন যে ডিবি-এসসিএমের সুবিধাগুলি সত্যই ব্যয়টিকে ন্যায়সঙ্গত করে?
    • অকল্পনীয় প্রমাণ?
    • শিল্প গবেষণা?
    • শিল্প সেরা অনুশীলন সুপারিশ?
    • স্বীকৃত কর্তৃপক্ষের কাছে আবেদন?
    • খরচ লাভ বিশ্লেষণ?
  8. এই মডেলটিতে কার "ডাটাবেস অবজেক্ট" থাকা উচিত?
    • ডেভেলপারগণ?
    • DBAs?
    • ডেটা বিশ্লেষকরা?
    • একের অধিক?

3
এই প্রশ্নের গভীরতা একটি অনুগ্রহের জন্য প্রার্থনা করে।
গ্রেগ ডি

উত্তর:


53

আপনার প্রশ্নের কয়েকটি উত্তর এখানে দেওয়া হল:

  1. উভয় পরীক্ষা এবং উত্পাদন পরিবেশ উত্স নিয়ন্ত্রণ থেকে নির্মিত উচিত? হ্যাঁ
    • উভয়ই অটোমেশন ব্যবহার করে তৈরি করা উচিত - বা কোনও স্থিতিশীল, চূড়ান্ত পরীক্ষার পরিবেশ থেকে কোনও বিষয়বস্তু অনুলিপি করে নির্মিত উচিত?
    • উভয়ের জন্য অটোমেশন। পরিবেশের মধ্যে ডেটা অনুলিপি করবেন না
    • পরীক্ষার স্ক্রিপ্টগুলিতে পরীক্ষা এবং উত্পাদন পরিবেশের মধ্যে সম্ভাব্য পার্থক্যগুলি কীভাবে মোকাবেলা করবেন?
    • টেমপ্লেটগুলি ব্যবহার করুন, যাতে আপনি প্রতিটি পরিবেশের জন্য আলাদা আলাদা স্ক্রিপ্ট তৈরি করতে পারেন (উদাহরণস্বরূপ বাহ্যিক সিস্টেমে রেফারেন্স, লিঙ্কযুক্ত ডাটাবেস ইত্যাদি)
    • আপনি কীভাবে পরীক্ষা করতে পারেন যে মোতায়েনের স্ক্রিপ্টগুলি পরীক্ষার মতো উত্পাদনের বিরুদ্ধে কার্যকরভাবে কাজ করবে?
    • আপনি তাদের প্রাক-উত্পাদন পরিবেশে পরীক্ষা করুন: উত্পাদন পরিবেশের সঠিক অনুলিপি (ডাটাবেস এবং সম্ভাব্য অন্যান্য সিস্টেম) পরীক্ষা পরীক্ষা
  2. কোন ধরণের অবজেক্টগুলিকে সংস্করণটি নিয়ন্ত্রণ করা উচিত?
    • শুধু কোড (পদ্ধতি, প্যাকেজ, ট্রিগার, জাভা, ইত্যাদি)?
    • ইনডেক্সে?
    • সীমাবদ্ধতাসমূহ?
    • ছক সংজ্ঞা?
    • টেবিল পরিবর্তন স্ক্রিপ্ট? (উদাহরণস্বরূপ স্ক্রিপ্টগুলি পরিবর্তন করুন)
    • সবকিছু?
    • সবকিছু এবং:
      • স্থিতিশীল ডেটা (অনুসন্ধানের তালিকা ইত্যাদি) ভুলে যাবেন না, তাই আপনাকে পরিবেশের মধ্যে কোনও ডেটা অনুলিপি করার দরকার নেই
      • ডাটাবেস স্ক্রিপ্টগুলির কেবলমাত্র বর্তমান সংস্করণ (অবশ্যই সংস্করণটি নিয়ন্ত্রিত) এবং রাখুন
      • অলটার স্ক্রিপ্টগুলি সংরক্ষণ করুন: 1 টি বিগ স্ক্রিপ্ট (বা পছন্দ মতো 001_AlterXXX.sql নামক স্ক্রিপ্টগুলির ডিরেক্টরি, যাতে এগুলি প্রাকৃতিক সাজানোর ক্রমে চালনা করে সংস্করণ A থেকে B এ উন্নীত করা হবে)
  3. কোন ধরণের অবজেক্টগুলিকে সংস্করণটি নিয়ন্ত্রণ করা উচিত নয়?
    • সিকোয়েন্স?
    • অনুদান?
    • ব্যবহারকারীর অ্যাকাউন্ট?
    • 2 দেখুন যদি আপনার ব্যবহারকারী / ভূমিকা (বা প্রযুক্তিগত ব্যবহারকারীর নাম) পরিবেশের মধ্যে পৃথক হয়, আপনি এখনও টেমপ্লেটগুলি ব্যবহার করে সেগুলি স্ক্রিপ্ট করতে পারেন (দেখুন 1)
  4. আপনার এসসিএম সংগ্রহস্থলে ডাটাবেস অবজেক্টগুলি কীভাবে সংগঠিত করা উচিত?
    • রূপান্তর স্ক্রিপ্ট বা অলটার স্ক্রিপ্টের মতো এককালীন জিনিসগুলির সাথে আপনি কীভাবে ডিল করবেন?
    • 2 দেখুন।
    • আপনি কীভাবে ডেটাবেস থেকে অবসরপ্রাপ্ত বস্তুগুলির সাথে ডিল করবেন?
    • ডিবি থেকে মুছে ফেলা হয়েছে, উত্স নিয়ন্ত্রণ ট্রাঙ্ক / টিপ থেকে সরানো হয়েছে
    • উন্নয়ন থেকে পরীক্ষার স্তরগুলিতে অবজেক্টগুলির প্রচারের জন্য কার দায়বদ্ধ হওয়া উচিত?
    • দেব / পরীক্ষা / প্রকাশের সময়সূচী
    • আপনি একাধিক বিকাশকারীদের থেকে পরিবর্তনগুলি কীভাবে সমন্বয় করবেন?
    • প্রতিটি বিকাশকারীর জন্য পৃথক ডাটাবেস তৈরি না করার চেষ্টা করুন। আপনি সোর্স-নিয়ন্ত্রণ ব্যবহার করেন, তাই না? এই ক্ষেত্রে ডেভেলপাররা ডাটাবেস পরিবর্তন করে এবং স্ক্রিপ্টগুলিতে চেক-ইন করে। পুরোপুরি নিরাপদ থাকতে, রাতে তৈরির সময় স্ক্রিপ্টগুলি থেকে ডাটাবেসটি পুনরায় তৈরি করুন
    • আপনি একাধিক সিস্টেম দ্বারা ব্যবহৃত ডাটাবেস অবজেক্টের জন্য শাখা নিয়ে কাজ করবেন?
    • শক্ত এক: যে কোনও মূল্যে এড়াতে চেষ্টা করুন।
  5. কোন ব্যতিক্রম, যদি থাকে তবে এই প্রক্রিয়াটি যুক্তিসঙ্গত করা যায়?
    • নিরাপত্তা বিষয়ক?
    • পরীক্ষার / প্রোডের জন্য পাসওয়ার্ড সংরক্ষণ করবেন না। আপনি এটি দেবের জন্য মঞ্জুরি দিতে পারেন, বিশেষত যদি আপনি দৈনিক / রাত্রে ডিবি পুনর্নির্মাণ করেন
    • ডে-সনাক্তকরণ উদ্বেগ সহ ডেটা?
    • সম্পূর্ণরূপে স্বয়ংক্রিয় করা যায় না এমন স্ক্রিপ্টগুলি?
    • রিলিজ তথ্য / ALTER স্ক্রিপ্ট সহ নথি এবং সঞ্চয় করুন
  6. আপনি কীভাবে প্রক্রিয়াটিকে স্থিতিস্থাপক এবং প্রয়োগযোগ্য করে তুলতে পারেন?
    • বিকাশকারী ত্রুটি?
    • স্ক্র্যাচ থেকে দৈনিক বিল্ড দিয়ে পরীক্ষা করা হয়েছে এবং ফলাফলগুলি ইনক্রিমেন্টাল আপগ্রেডের সাথে (ALTER ব্যবহার করে সংস্করণ A থেকে B) তুলনা করুন। উভয় ফলাফলের স্কিমা এবং স্থিতিশীল ডেটা তুলনা করুন
    • অপ্রত্যাশিত পরিবেশগত সমস্যাগুলি?
    • সংস্করণ নিয়ন্ত্রণ এবং ব্যাকআপ ব্যবহার করুন
    • বিশেষতঃ স্থাপনার আগে আপনি যা ভাবেন তার সাথে প্রোড ডেটাবেস স্কিমা তুলনা করুন। সুপারডুপারকুল ডিবিএ সম্ভবত একটি ত্রুটি সমাধান করেছে যা আপনার টিকিট সিস্টেমে কখনও ছিল না :)
    • দুর্যোগ পুনরুদ্ধারের জন্য?
  7. আপনি কীভাবে সিদ্ধান্ত গ্রহণকারীদের বোঝাতে পারেন যে ডিবি-এসসিএমের সুবিধাগুলি সত্যই ব্যয়টিকে ন্যায়সঙ্গত করে?
    • অকল্পনীয় প্রমাণ?
    • শিল্প গবেষণা?
    • শিল্প সেরা অনুশীলন সুপারিশ?
    • স্বীকৃত কর্তৃপক্ষের কাছে আবেদন?
    • খরচ লাভ বিশ্লেষণ?
    • যদি বিকাশকারী এবং ডিবিএগুলি সম্মত হন তবে আপনার কাউকে বোঝানোর দরকার নেই, আমি মনে করি ( এমএসএসকিউএলের জন্য ডিবিঘস্টের মতো সফ্টওয়্যার কিনতে আপনার অর্থের প্রয়োজন না থাকলে )
  8. এই মডেলটিতে কার "ডাটাবেস অবজেক্ট" থাকা উচিত?
    • ডেভেলপারগণ?
    • DBAs?
    • ডেটা বিশ্লেষকরা?
    • একের অধিক?
    • সাধারণত ডিবিএরা মডেলটিকে অনুমোদন দেয় (কোড পর্যালোচনার অংশ হিসাবে চেক-ইন করার আগে বা পরে)। তারা অবশ্যই কার্য সম্পাদন সম্পর্কিত বস্তুর মালিক। তবে সাধারণভাবে দলটির মালিক [এবং নিয়োগকর্তা অবশ্যই :)]

আপনার উত্তরের জন্য ধন্যবাদ! আপনি কি এই প্রকল্পগুলি সমস্ত প্রকল্পের জন্য প্রযোজ্য বলে মনে করেন? আপনি কি এমন কোনও সরঞ্জাম সম্পর্কে জানেন যা অটোমেশনের এই স্তরটি অর্জন করতে সহায়তা করে? এতে আরও বেশি লোকের ওজন হওয়ায় আমি আমার প্রশ্ন আপডেট করব। এছাড়াও, সচেতন থাকুন আমার "টিজার" প্রশ্নগুলি সমাধানের জন্য উদ্বেগের একটি চূড়ান্ত তালিকা হিসাবে নয় - বরং আলোচনার জন্য প্রাথমিক পয়েন্ট হিসাবে as
এল বুশকিন

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

ভাল উত্তর. আমি ধরে নিচ্ছি "তালিকাগুলি তালিকাগুলি" মানে সেই ডাটা যা <সलेक्ट> বাক্সগুলিকে জনপ্রিয় করতে ব্যবহৃত হয়? এটি সর্বদা সম্ভব নাও হতে পারে, যেহেতু সেই ডেটা ব্যবহারকারীর দ্বারা উত্পাদনের (কোনও উপায়ে) পরিবর্তন করা যেতে পারে। ব্যাকআপ রাখা এই ক্ষেত্রে অর্থবোধ করে। আপনি রাতের বিল্ডের অংশ হিসাবে স্ক্র্যাচ থেকে ডেটাবেস পুনরায় তৈরি করার পরামর্শ দেন। আমি মনে করি না এটি একটি ভাল ধারণা; এটি অগ্রগতিতে কাজ মুছে ফেলতে পারে, বা অন্য সফ্টওয়্যারটির পুনরায় ইনস্টলেশন / কনফিগারেশন প্রয়োজন। পরিশেষে, আমি স্থিতিস্থাপক প্রক্রিয়াগুলি নিশ্চিত করতে স্ক্র্যাচ থেকে বিল্ডিংয়ের পরিবর্তে টেস্ট-মোড, ডেটা ভ্যালিডিটার এবং অন্যান্য সরঞ্জামগুলি তৈরি করার পরামর্শ দেব।
রিচার্ড লেভাসিউর

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

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

5

আমি যখন সম্ভব হয় এসকিউএলকে উত্স-কোড হিসাবে বিবেচনা করি

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

উত্স নিয়ন্ত্রণে পরীক্ষার জন্য আমি ডামি ডেটাও অন্তর্ভুক্ত করেছি:

  1. PROJ / SQL / setup_db.sql
  2. PROJ / SQL / dummy_data.sql
  3. PROJ / SQL / mssql_specific.sql
  4. PROJ / SQL / mysql_specific.sql

এবং তারপরে আমি আমার সমস্ত এসকিউএল কোয়েরিগুলি বিমূর্ত করি যাতে আমি মাইএসকিউএল, ওরাকল, এমএসএসকিউএল বা অন্য যে কোনও কিছুর জন্য পুরো প্রকল্পটি তৈরি করতে পারি।

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


4

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

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

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

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


4

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

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

এছাড়াও আপনি স্ক্রিপ্টগুলি থেকে উত্পাদন কোড তৈরির জন্য মাভেন, পিঁপড়া বিল্ড সিস্টেমগুলি ব্যবহার করতে পারেন ।

মাইনাসটি হ'ল লিকুইবেস বিস্তৃত এসকিউএল আইডিইয়ের সাথে সংহত করে না এবং আপনার নিজেরাই বেসিক অপারেশন করা উচিত।

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

এই প্রোগ্রামটিতে:

  1. ফাইলগুলিতে ডিএমএল সংরক্ষণ করুন যাতে আপনি সেগুলি সংস্করণ করতে পারেন।
  2. উত্স নিয়ন্ত্রণ থেকে স্কিমা বিল্ড প্রক্রিয়া স্বয়ংক্রিয় করুন।
  3. পরীক্ষার উদ্দেশ্যে বিকাশকারী বিল্ড সিস্টেমের মাধ্যমে উত্স নিয়ন্ত্রণ থেকে নির্মিত স্থানীয় ডিবি ব্যবহার করতে পারেন + স্ক্রিপ্টগুলির সাথে ডেটা বা ডিবিউনিট স্ক্রিপ্টগুলি (উত্স নিয়ন্ত্রণ থেকে) লোড টেস্টিং ডেটা via
  4. লিকুইবেস আপনাকে নির্ভরতার সম্মানের জন্য স্ক্রিপ্টগুলির "রান সিকোয়েন্স" সরবরাহ করতে দেয়।
  5. ডিবিএ দল থাকতে হবে যা উত্পাদন ব্যবহারের আগে সমস্ত পরিবর্তন সহ মাস্টার ব্রাঞ্চ পরীক্ষা করে। আমার অর্থ তারা মাস্টার ট্রাঙ্কে কমিট করার আগে অন্যান্য ডিবিএর কাছ থেকে ট্রাঙ্ক / শাখা পরীক্ষা করে। সুতরাং যে মাস্টার সর্বদা সামঞ্জস্যপূর্ণ এবং উত্পাদন প্রস্তুত।

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


3

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


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

3

আমি মূলত ভ্যান দ্বারা প্রদত্ত প্রতিটি উত্তরের সাথে একমত । আরও অন্তর্দৃষ্টি সম্পর্কে, ডাটাবেস পরিচালনার জন্য আমার বেসলাইনটি হলেন কে স্কট অ্যালেন সিরিজ (অবশ্যই পড়তে হবে, আইএমএইচএও এবং জেফের মতামতটিও মনে হয়)।

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

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

ডাটাবেসের প্রথম সংস্করণটি উত্পাদনের পরে, আপনার কেবল স্ক্রিপ্টগুলি তৈরি করতে হবে না (মূলত বিকাশকারীদের জন্য), তবে স্ক্রিপ্টগুলিও উন্নত করতে হবে (একই নীতিগুলির ভিত্তিতে):

  • ডাটাবেস থেকে সংস্করণটি পুনরুদ্ধার করার জন্য অবশ্যই একটি উপায় থাকতে হবে (আমি একটি সঞ্চিত পদ্ধতি ব্যবহার করি তবে একটি টেবিলটিও তা করতে পারে)।
  • একটি নতুন সংস্করণ প্রকাশের আগে, আমি একটি Upgrade.sqlফাইল তৈরি করেছি (এটি অন্যরা কল করতে পারে) যা সংস্করণ এন -1 সংস্করণ এন-তে আপগ্রেড করার অনুমতি দেয় (এন সংস্করণ প্রকাশিত হচ্ছে)। আমি এই স্ক্রিপ্টটি নামের একটি ফোল্ডারের নীচে সঞ্চয় করি N-1
  • আমি যে আপগ্রেড করে একটি ব্যাচ ফাইল আছে: Upgrade.cmd। এটি একটি সহজ নির্বাচনী স্টেটমেন্টের মাধ্যমে ডাটাবেসের বর্তমান সংস্করণ (সিভি) পুনরুদ্ধার করতে পারে , ফোল্ডারের Upgrade.sqlনীচে সঞ্চিত স্ক্রিপ্টটি চালু করতে পারে CVএবং কোনও ফোল্ডার না পাওয়া পর্যন্ত লুপ করতে পারে। এইভাবে, আপনি স্বয়ংক্রিয়ভাবে এন -3 থেকে এন-তে আপগ্রেড করতে পারেন say

এটির সাথে সমস্যাগুলি হ'ল:

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

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


1

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

স্থাপনার জন্য এটি সম্ভব না যেহেতু ডাটাবেসগুলি খুব বেশি বড়: এটিই প্রথম স্থানে একটি ডাটাবেসে থাকার মূল কারণ।


1

আমি দৃ strongly়ভাবে বিশ্বাস করি যে কোনও ডিবি হ'ল উত্স নিয়ন্ত্রণের অংশ এবং বিল্ডিং প্রক্রিয়ার একটি বৃহত্তর ডিগ্রি অংশ হওয়া উচিত। এটি যদি সোর্স নিয়ন্ত্রণে থাকে তবে এসকিউএল-তে একটি সঞ্চিত পদ্ধতি লেখার সময় আমার কাছে একই কোডিং সেফ গার্ড রয়েছে যেমন আমি সি # তে ক্লাস লেখার সময় করি। আমি আমার উত্স গাছের নীচে একটি ডিবি স্ক্রিপ্ট ডিরেক্টরি অন্তর্ভুক্ত করে এটি করি। এই স্ক্রিপ্ট ডিরেক্টরিটি অগত্যা ডাটাবেসে একটি অবজেক্টের জন্য একটি ফাইল নেই। বাটে ব্যথা হবে! আমি আমার কোড প্রকল্পে আমার ডিবিতে বিকাশ করি। তারপরে যখন আমি চেক করতে প্রস্তুত হই তখন আমি আমার ডাটাবেসের শেষ সংস্করণ এবং আমি যে কাজ করছি তার বর্তমান সংস্করণের মধ্যে পার্থক্য করি। আমি এর জন্য এসকিউএল তুলনা ব্যবহার করি এবং এটি সমস্ত পরিবর্তনগুলির একটি স্ক্রিপ্ট উত্পন্ন করে। এই স্ক্রিপ্টটি সুনির্দিষ্ট নামকরণ কনভেনশনের সাহায্যে আমার db_update ডিরেক্টরিতে সংরক্ষিত হবে আমার বিল্ড প্রক্রিয়াটির অংশ আমি একটি নতুন ডেটাবেস দিয়ে শুরু করি যা পরে এই ডিরেক্টরিতে স্ক্রিপ্টগুলি ব্যবহার করে প্রগতিশীলভাবে নির্মিত হয়। আমি একটি কাস্টম ন্যান্ট টাস্ক লিখেছি যা প্রতিটি স্ক্রিপ্টের মাধ্যমে খালি ডিবিতে এর বিষয়বস্তু সম্পাদন করে ite স্পষ্টতই যদি ডিবিতে যেতে আমার কিছু ডেটা দরকার হয় তবে আমার কাছে ডেটা scোকানো স্ক্রিপ্টগুলিও রয়েছে। এটি এর অনেক উপকারিতাও রয়েছে। এক, আমার সমস্ত জিনিস সংস্করণযুক্ত। দ্বিতীয়ত, প্রতিটি বিল্ডটি একটি তাজা বিল্ড যার অর্থ আমার বিকাশ প্রক্রিয়াটিতে প্রবেশের কোনও ছদ্মবেশযুক্ত জিনিস থাকবে না (যেমন নোংরা ডেটা যা সিস্টেমে অদ্ভুততার কারণ হয়)। তিন, যখন কোনও নতুন লোককে দেব দলে যুক্ত করা হয়, তাদের কেবল সর্বশেষতম হওয়া দরকার এবং তাদের স্থানীয় দেব তাদের জন্য ফ্লাইতে তৈরি করা হয়। চার, আমি টেস্ট কেসগুলি চালাতে পারি (আমি এটিকে "ইউনিট পরীক্ষা" বলি না!) ডাটাবেসের অবস্থা প্রতিটি বিল্ডের সাথে পুনরায় সেট করা হয় (যার অর্থ আমি পরীক্ষাগুলির ডেটা যুক্ত করার চিন্তা না করেই আমার সংগ্রহশালাগুলি পরীক্ষা করতে পারি) ডিবি)।

এটি সবার জন্য নয়।

এটি প্রতিটি প্রকল্পের জন্য নয়। আমি সাধারণত সবুজ ক্ষেত্রের প্রকল্পগুলিতে কাজ করি যা আমাকে এই সুবিধার জন্য দেয়!


আপনি এসকিউএল ব্যবহার করছেন তা শুনে আপনার ডেটাবেস বিকাশের জীবনচক্রের অংশ হিসাবে তুলনা করুন lad আমরা মনে করি নতুন বিকাশকারীরা বিকাশকারীদের স্বাচ্ছন্দ্যে উন্নতি করেছি। এসকিউএল উত্স নিয়ন্ত্রণ দেখুন। এটি এসকিউএল এর সাথে পাশাপাশি কাজ করে বিকাশকারীদের সহযোগিতা সহজ করার জন্য তুলনা করুন, পাশাপাশি আপনার স্কিমা অবজেক্ট উত্সকে নিয়ন্ত্রিত রাখার অনুমতি দিন (আপনি এসভিএন বা টিএফএস ব্যবহার করছেন তবে)। red-gate.com/products/sql_source_control/index.htm
ডেভিড অ্যাটকিনসন

1

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

স্ক্র্যাচ থেকে একটি ডেটাবেস তৈরি করা এসকিউএল স্ক্রিপ্টগুলি পরিচালনা হিসাবে সংক্ষিপ্ত করা যেতে পারে।

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

এরপরে এটি প্রয়োজনীয় সমস্ত স্ক্রিপ্টগুলি একসাথে জড়ো করে চালাবে। এরপরে কোন স্ক্রিপ্টগুলি রেকর্ড করা হয়েছে তা রেকর্ড করে।

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

এখানে একটি ভাল ভূমিকা দেখুন:

http://code.google.com/p/dbdeploy/wiki/GettingStarted



0

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

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