د Liquibase په کارولو سره په پښو کې د ځان د ډزو کولو څخه څنګه مخنیوی وکړئ

مخکې هیڅکله نه و، او دلته موږ بیا ځو!

زموږ په راتلونکې پروژه کې، موږ پریکړه وکړه چې له پیل څخه د Liquibase څخه کار واخلو ترڅو په راتلونکي کې د ستونزو څخه مخنیوی وشي. لکه څنګه چې دا معلومه شوه، د ټیم ټول ځوان غړي نه پوهیږي چې څنګه یې په سمه توګه وکاروي. ما یو داخلي ورکشاپ ترسره کړ، چې بیا ما پریکړه وکړه چې په یوه مقاله بدل کړم.

مقاله کې ګټورې لارښوونې او د دریو خورا څرګند زیانونو توضیحات شامل دي چې تاسو کولی شئ د اړوند ډیټابیس مهاجرت وسیلو سره کار کولو کې راښکته شئ ، په ځانګړي توګه Liquibase. د جاوا پراختیا کونکو لپاره په جونی او مینځنۍ کچه ډیزاین شوی؛ د ډیرو تجربه لرونکو پراختیا کونکو لپاره دا ممکن د جوړښت او تکرار لپاره علاقه ولري هغه څه چې ډیری احتمال دمخه پیژندل شوي.

د Liquibase په کارولو سره په پښو کې د ځان د ډزو کولو څخه څنګه مخنیوی وکړئ

Liquibase او Flyway د جاوا نړۍ کې د اړونده جوړښتونو د نسخې کنټرول ستونزې حل کولو لپاره اصلي سیالي کونکي ټیکنالوژي دي. لومړی یې په بشپړ ډول وړیا دی، په عمل کې دا ډیری وختونه د کارولو لپاره غوره کیږي، له همدې امله Liquibase د خپرونې د اتل په توګه غوره شوی. په هرصورت، ځینې تشریح شوي تمرینونه ممکن نړیوال وي، ستاسو د غوښتنلیک جوړښت پورې اړه لري.

د اړونده جوړښتونو مهاجرت د اړونده معلوماتو ذخیره کولو ضعیف انعطاف سره معامله کولو لپاره اجباري لاره ده. د OOP فیشن په دوره کې، د ډیټابیسونو سره د کار کولو سټایل پدې معنی و چې موږ به سکیما یو ځل بیان کړو او بیا به یې لمس نه کړو. مګر حقیقت تل دا دی چې شیان بدلیږي، او د میز جوړښت کې بدلونونه ډیری وختونه اړین دي. په طبيعي توګه، پروسه پخپله دردناک او ناخوښه وي.

زه به ستاسو پروژې ته د کتابتون اضافه کولو لپاره د ټیکنالوژۍ توضیحاتو او لارښوونو ته ژور نه ځم؛ پدې موضوع کې یو څو مقالې لیکل شوي دي:

برسېره پردې، د ګټورو لارښوونو په اړه لا دمخه یوه غوره مقاله وه:

Советы

زه غواړم خپلې مشورې او نظرونه شریک کړم، کوم چې د مهاجرت د ستونزو د حل لپاره د خولې، وینې او درد له لارې پیدا شوي.

1. مخکې له دې چې کار پیل کړئ، تاسو باید ځان د غوره تمریناتو برخې سره آشنا کړئ سایټ Liquibase

هلته ساده مګر خورا مهم شیان بیان شوي، پرته له دې چې د کتابتون کارول ستاسو ژوند پیچلی کولی شي. د مثال په توګه، د بدلونونو اداره کولو لپاره غیر منظم چلند به ژر یا وروسته د ګډوډۍ او مات شوي مهاجرت لامل شي. که تاسو په ورته وخت کې د ډیټابیس جوړښت او د خدماتو منطق ته متقابل انحصار بدلونونه راوباسئ ، نو ډیر احتمال شتون لري چې دا به د سور ازموینې یا مات شوي چاپیریال لامل شي. سربیره پردې، په رسمي ویب پاڼه کې د Liquibase کارولو سپارښتنې د اصلي مهاجرت سکریپټونو سره د رول بیک سکریپټونو پراختیا او ازموینې په اړه یوه ماده لري. ښه، په مقاله کې https://habr.com/ru/post/178665/ د مهاجرت او د رول بیک میکانیزم په اړه د کوډ مثالونه شتون لري.

2. که تاسو د مهاجرت وسیلو کارول پیل کړئ، د ډیټابیس جوړښت کې د لاسي سمونونو اجازه مه ورکوئ

لکه څنګه چې ویل کیږي: "یو ځل پرسیل، تل پرسیل." که ستاسو د غوښتنلیک اساس د Liquibase لخوا اداره شي، کوم لاسي بدلونونه سمدلاسه د متضاد حالت لامل کیږي، او په بدلونونو کې د باور کچه صفر کیږي. احتمالي خطرونو کې د ډیټابیس په بیا رغولو کې څو ساعته لګول شامل دي؛ په بدترین حالت کې، یو مړ سرور. که تاسو په خپل ټیم ​​​​کې د "زاړه ښوونځي" DBA معمار لرئ ، په صبر او فکر سره هغه ته تشریح کړئ چې څومره بد شیان به وي که چیرې هغه په ​​ساده ډول د مشروط SQL پراختیا کونکي څخه د خپل تفاهم سره سم ډیټابیس ترمیم کړي.

3. که چیرې بدلونونه دمخه ذخیره کې اچول شوي وي، د ترمیم څخه ډډه وکړئ

که چیرې بل پراختیا کونکي یو پل جوړ کړي او یو بدلون سیټ پلي کړي ، کوم چې وروسته به ترمیم شي ، نو هغه به خامخا تاسو ته د مهربان کلمې سره په یاد ولري کله چې هغه د غوښتنلیک پیل کولو پرمهال غلطي ترلاسه کړي. که چیرې د بدلون سیټ ایډیټ کول په یو ډول پراختیا کې لیک شي ، نو تاسو باید د هاټ فکسونو سلیپري سلیپ تعقیب کړئ. د ستونزې جوهر د هش سموم لخوا د بدلونونو تایید پورې اړه لري - د Liquibase اصلي میکانیزم. کله چې د changeset کوډ ایډیټ کړئ، د هش اندازه بدلیږي. د بدلونونو ایډیټ کول یوازې هغه وخت ممکن دي چې د معلوماتو له لاسه ورکولو پرته له سکریچ څخه ټول ډیټابیس ځای په ځای کول ممکن وي. په دې حالت کې، د SQL یا XML کوډ بیاکتنه کولی شي، برعکس، ژوند اسانه کړي او مهاجرتونه د لوستلو وړ کړي. یو مثال به یو حالت وي چیرې چې د غوښتنلیک په پیل کې، د سرچینې ډیټابیس سکیما په ټیم کې موافقه شوې وه.

4. که امکان ولري د ډیټابیس بیک اپ تصدیق کړئ

دلته، زه فکر کوم، هر څه روښانه دي. که ناڅاپه مهاجرت ناکام شو، هرڅه بیرته راستانه کیدی شي. Liquibase د بدلونونو بیرته راګرځولو لپاره وسیله لري، مګر د رول بیک سکریپټونه هم پخپله د پراختیا کونکي لخوا لیکل شوي، او دوی کولی شي د اصلي بدلونونو سکریپټونو په څیر د ورته احتمال سره ستونزې ولري. دا پدې مانا ده چې دا په هر حالت کې د بیک اپ سره خوندي لوبې کول ګټور دي.

5. که امکان ولري په پراختیا کې ثابت ډیټابیس بیک اپ وکاروئ

که دا د تړونونو او محرمیت سره مخالفت ونلري، په ډیټابیس کې هیڅ شخصي معلومات شتون نلري، او دا دومره وزن نلري لکه دوه لمرونه - مخکې له دې چې دا په ژوندی مهاجرت سرورونو کې وکاروي، تاسو کولی شئ وګورئ چې دا به د پراختیا کونکي ماشین کې څنګه کار کوي او محاسبه کړي. د مهاجرت په جریان کې د احتمالي ستونزو نږدې 100٪.

6. په ټیم کې د نورو پراختیا کونکو سره اړیکه ونیسئ

په ښه تنظیم شوي پرمختیایي پروسې کې، په ټیم کې هرڅوک پوهیږي چې څوک څه کوي. په واقعیت کې، دا اکثرا قضیه نده، له همدې امله، که تاسو د خپلې دندې د یوې برخې په توګه د ډیټابیس جوړښت کې بدلونونه چمتو کوئ، نو دا مشوره ورکول کیږي چې د دې په اړه ټول ټیم ​​​​ته خبر ورکړئ. که څوک په موازي ډول بدلونونه راولي، تاسو باید په احتیاط سره تنظیم کړئ. دا د کار پای ته رسولو وروسته د همکارانو سره د خبرو اترو ارزښت لري، نه یوازې په پیل کې. د بدلونونو سره ډیری احتمالي ستونزې د کوډ بیاکتنې مرحله کې حل کیدی شي.

7. د هغه څه په اړه فکر وکړئ چې تاسو یې کوئ!

دا به د ځان څرګند مشورې په څیر بریښي چې په هر حالت کې پلي کیږي. په هرصورت، د ډیری ستونزو مخه نیول کیدی شي که چیرې پراختیا کونکي یو ځل بیا تحلیل کړي چې هغه څه کوي او څه اغیزه کولی شي. د مهاجرت سره کار کول تل اضافي پاملرنې او دقت ته اړتیا لري.

جالونه

راځئ چې اوس هغه عادي جالونه وګورو چې تاسو پکې راوتلی شئ که تاسو پورته مشورې تعقیب نه کړئ ، او په حقیقت کې تاسو باید څه وکړئ؟

وضعیت 1: دوه پراختیا کونکي هڅه کوي په ورته وخت کې نوي بدلونونه اضافه کړي

د Liquibase په کارولو سره په پښو کې د ځان د ډزو کولو څخه څنګه مخنیوی وکړئ
واسیا او پیټیا غواړي د بدلون 4 نسخه رامینځته کړي ، پرته لدې چې د یو بل په اړه پوه شي. دوی د ډیټابیس جوړښت کې بدلونونه رامینځته کړل او د مختلف بدلونونو فایلونو سره یې د پلټ غوښتنه خپره کړه. د عمل لاندې میکانیزم وړاندیز شوی:

څنګه پریکړه وکړو

  1. په هرصورت، همکاران باید په هغه ترتیب سره موافق وي چې د دوی بدلونونه باید پرمخ ولاړ شي، د بیلګې په توګه، پیټین باید لومړی پلي شي.
  2. یو څوک باید دویمه برخه په ځان کې اضافه کړي او د 5 نسخه سره د Vasya's changeset په نښه کړي. دا د چیری پک یا یو پاک انضمام له لارې ترسره کیدی شي.
  3. د بدلونونو وروسته، تاسو باید حتما د ترسره شویو اقداماتو اعتبار وګورئ.
    په حقیقت کې، د Liquibase میکانیزمونه به تاسو ته اجازه درکړي چې په ذخیره کې دوه نسخه 4 بدلونونه ولرئ، نو تاسو کولی شئ هرڅه پریږدئ لکه څنګه چې دي. دا دی، تاسو به په ساده ډول د مختلفو نومونو سره 4 نسخه کې دوه بدلونونه ولرئ. د دې طریقې سره، دا وروسته د ډیټابیس نسخو نیویګیټ کول خورا ستونزمن کیږي.

برسېره پردې، Liquibase، لکه د هوبیټس کور، ډیری رازونه ساتي. یو له دوی څخه د validCheckSum کیلي ده، کوم چې په 1.7 نسخه کې ښکاره شوی او تاسو ته اجازه درکوي د یو ځانګړي بدلون سیټ لپاره د اعتبار وړ هش ارزښت مشخص کړئ، پرته له دې چې په ډیټابیس کې زیرمه شوي وي. اسناد https://www.liquibase.org/documentation/changeset.html لاندې وايي:

یو چیکسم اضافه کړئ چې د دې بدلون سیټ لپاره د اعتبار وړ ګڼل کیږي، پرته له دې چې په ډیټابیس کې ذخیره شوي وي. په ابتدايي توګه کارول کیږي کله چې تاسو د بدلون سیټ بدلولو ته اړتیا لرئ او نه غواړئ چې غلطۍ په ډیټابیسونو کې واچول شي په کوم کې چې دا دمخه پرمخ تللی (نه وړاندیز شوی کړنلاره)

هو، هو، دا کړنلاره سپارښتنه نه کیږي. مګر ځینې وختونه یو پیاوړی رڼا جادوګر هم د تیاره تخنیکونو ماسټر کوي

2 حالت: مهاجرت چې په معلوماتو پورې اړه لري

د Liquibase په کارولو سره په پښو کې د ځان د ډزو کولو څخه څنګه مخنیوی وکړئ

راځئ فرض کړو چې تاسو د ژوندی سرورونو څخه د ډیټابیس بیک اپ کارولو وړتیا نلرئ. پیټیا یو بدلون رامینځته کړ، په محلي توګه یې ازموینه وکړه او په بشپړ باور سره چې هغه سم دی، پراختیا کونکي ته یې د پلټ غوښتنه وکړه. یوازې په دې حالت کې، د پروژې مشر روښانه کړه چې آیا پیټیا دا چک کړی، او بیا یې اضافه کړی. مګر په پرمختیایي سرور کې ګمارل راټیټ شول.

په حقیقت کې، دا ممکنه ده، او هیڅوک له دې څخه خوندي نه دي. دا پیښیږي که چیرې د میز جوړښت کې بدلونونه په یو ډول د ډیټابیس ځانګړي معلوماتو سره تړلي وي. په ښکاره ډول، که چیرې د پیټیا ډیټابیس یوازې د ازموینې ډیټا څخه ډک وي، نو دا ممکن د ټولو ستونزو قضیې پوښښ نکړي. د مثال په توګه، کله چې یو جدول ړنګول، دا معلومه شوه چې په نورو جدولونو کې د بهرني کیلي لخوا ریکارډونه شتون لري چې د حذف شوي ریکارډونو سره تړاو لري. یا کله چې د کالم ډول بدل کړئ، دا معلومه شوه چې د معلوماتو 100٪ نوي ډول ته نشي بدلیدلی.

څنګه پریکړه وکړو

  • ځانګړي سکریپټونه ولیکئ چې د مهاجرت سره یو ځل کارول کیږي او ډاټا په مناسب شکل کې راوړي. دا د مهاجرت پلي کولو وروسته نوي جوړښتونو ته د معلوماتو لیږدولو ستونزې حل کولو عمومي لاره ده ، مګر ورته یو څه دمخه پلي کیدی شي ، په ځانګړي قضیو کې. دا لاره، البته، تل شتون نلري، ځکه چې په ژوندی سرورونو کې د معلوماتو ایډیټ کول خطرناک او حتی ویجاړونکي کیدی شي.
  • بله ستونزمنه لاره د موجوده بدلونونو ترمیم کول دي. مشکل دا دی چې ټول ډیټابیسونه چیرې چې دا دمخه په خپل موجوده فارم کې پلي شوي باید بیرته وساتل شي. دا خورا ممکنه ده چې د پس منظر ټول ټیم ​​به اړ شي چې په محلي توګه ډیټابیس له سکریچ څخه راوباسي.
  • او ترټولو نړیواله لاره د ډیټا سره ستونزه د پراختیا کونکي چاپیریال ته لیږدول دي ، ورته حالت رامینځته کول او مات شوي ته یو نوی بدلون اضافه کول ، کوم چې به ستونزه له مینځه ویسي.
    د Liquibase په کارولو سره په پښو کې د ځان د ډزو کولو څخه څنګه مخنیوی وکړئ

په عموم کې، څومره چې ډیټابیس د تولید سرور ډیټابیس سره په جوړښت کې ورته وي، د مهاجرت سره ستونزې به لږ چانس وي. او البته، مخکې لدې چې تاسو ذخیره کولو ته بدلون واستوئ، تاسو باید څو ځله فکر وکړئ چې ایا دا به څه مات کړي.

وضعیت 3. Liquibase وروسته له دې چې تولید ته لاړ شي کارول پیل کیږي

فرض کړئ چې د ټیم مشر له پیټیا څخه وغوښتل چې په پروژه کې Liquibase شامل کړي، مګر پروژه لا دمخه په تولید کې ده او د ډیټابیس موجود جوړښت شتون لري.

په دې اساس، ستونزه دا ده چې په هر نوي سرور یا پراختیا کونکي ماشینونو کې، دا میزونه باید له سکریچ څخه جوړ شي، او موجوده چاپیریال باید په ثابت حالت کې پاتې شي، د نوي بدلونونو منلو ته چمتو وي.

څنګه پریکړه وکړو

څو لارې هم شته:

  • لومړی او خورا څرګند دی چې یو جلا سکریپټ ولري چې باید په لاسي ډول پلي شي کله چې د نوي چاپیریال پیل کول.
  • دوهم لږ څرګند دی ، د Liquibase مهاجرت ولرئ چې په بل Liquibase شرایطو کې دی ، او پلي یې کړئ. تاسو کولی شئ دلته د Liquibase شرایطو په اړه نور ولولئ: https://www.liquibase.org/documentation/contexts.html. په عموم کې، دا یو په زړه پورې میکانیزم دی چې په بریالیتوب سره کارول کیدی شي، د بیلګې په توګه، د ازموینې لپاره.
  • دریمه لاره د څو مرحلو څخه جوړه ده. لومړی، د موجوده میزونو لپاره باید مهاجرت رامنځته شي. بیا دا باید په یو څه چاپیریال کې پلي شي او پدې توګه د هغې د هش مقدار به ترلاسه شي. بل ګام زموږ په غیر خالي سرور کې د Liquibase خالي جدولونو پیل کول دي ، او د بدلون سیټونو کارولو تاریخ سره په جدول کې ، تاسو کولی شئ په لاسي ډول د "لکه څنګه چې پلي شوي" بدلون سیټ په ډیټابیس کې دمخه موجود بدلونونو سره ثبت کړئ. . په دې توګه، په موجوده سرور کې، د تاریخ شمیره به د 2 نسخه څخه پیل شي، او ټول نوي چاپیریال به ورته چلند وکړي.
    د Liquibase په کارولو سره په پښو کې د ځان د ډزو کولو څخه څنګه مخنیوی وکړئ

وضعیت 4. مهاجرتونه ډیریږي او د بشپړولو لپاره وخت نلري

د خدماتو پراختیا په پیل کې، د یوې قاعدې په توګه، Liquibase د بهرني انحصار په توګه کارول کیږي، او ټول مهاجرتونه پروسس کیږي کله چې غوښتنلیک پیل شي. په هرصورت، د وخت په تیریدو سره، تاسو ممکن په لاندې قضیو کې ټکر وکړئ:

  • مهاجرتونه خورا لوی کیږي او بشپړیدو لپاره ډیر وخت نیسي.
  • په ویشل شوي چاپیریال کې مهاجرت ته اړتیا شتون لري، د بیلګې په توګه، په یو وخت کې د ډیری ډیټابیس سرور مثالونو کې.
    په دې حالت کې، د ډیر وخت لپاره د مهاجرت غوښتنه کول به د وخت پای ته ورسیږي کله چې غوښتنلیک پیل شي. برسیره پردې، د هر غوښتنلیک مثال ته جلا جلا مهاجرت پلي کول ممکن د مختلف سرورونو د همغږي کیدو لامل شي.

څنګه پریکړه وکړو

په داسې حاالتو کې، ستاسو پروژه لا دمخه لویه ده، شاید حتی یو بالغ، او Liquibase د جلا بهرنۍ وسیلې په توګه عمل پیل کوي. حقیقت دا دی چې Liquibase د کتابتون په توګه په جار فایل کې تالیف شوی، او کولی شي د یوې پروژې دننه یا په خپلواکه توګه د انحصار په توګه کار وکړي.

په واحد حالت کې، تاسو کولی شئ د مهاجرت پلي کول خپل CI/CD چاپیریال ته یا ستاسو د سیسټم مدیرانو او د ګمارنې متخصصینو قوي اوږو ته پریږدئ. د دې کولو لپاره تاسو به د Liquibase کمانډ لاین ته اړتیا ولرئ https://www.liquibase.org/documentation/command_line.html. په دې حالت کې، دا ممکنه ده چې غوښتنلیک پیل کړئ وروسته له دې چې ټول اړین مهاجرتونه ترسره شي.

پایلې

په حقیقت کې، د ډیټابیس مهاجرتونو سره کار کولو په وخت کې ډیری نور زیانونه کیدی شي، او ډیری یې تخلیقي چلند ته اړتیا لري. دا مهمه ده چې پوه شئ چې که تاسو وسیله په سمه توګه وکاروئ ، نو د دې ډیری زیانونو مخه نیول کیدی شي. په ځانګړې توګه، ما باید د ټولو لیست شویو ستونزو سره په مختلفو بڼو معامله وکړه، او ځینې یې زما د غلطیو پایله وه. ډیری وختونه دا واقع کیږي، البته، د نه پاملرنې له امله، مګر ځینې وختونه د وسیلې کارولو لپاره د جرمي ناتوانۍ له امله.

سرچینه: www.habr.com

Add a comment