د سکیما کیپر په کارولو سره ډیټابیس کې د سوداګرۍ منطق

د دې مقالې موخه د کتابتون مثال کارول دي سکیما ساتونکی وسیلې وښایاست چې کولی شي د PostgreSQL DBMS په کارولو سره د PHP پروژو کې د ډیټابیسونو رامینځته کولو پروسه د پام وړ ساده کړي.

د دې مقالې معلومات به لومړی د هغو پراختیا کونکو لپاره ګټور وي څوک چې غواړي د PostgreSQL وړتیاوو څخه ډیره ګټه پورته کړي، مګر په ډیټابیس کې د سوداګرۍ منطق ساتلو کې د ستونزو سره مخ دي.

دا مقاله به په ډیټابیس کې د سوداګرۍ منطق ذخیره کولو ګټې یا زیانونه بیان نکړي. داسې انګیرل کیږي چې انتخاب لا دمخه د لوستونکي لخوا ترسره شوی.

لاندې پوښتنې به په پام کې ونیول شي:

  1. په کوم شکل کې باید د ډیټابیس جوړښت ډمپ د نسخې کنټرول سیسټم کې زیرمه شي (له دې وروسته د VCS په نوم یادیږي)
  2. د ډمپ خوندي کولو وروسته د ډیټابیس جوړښت کې بدلونونه څنګه تعقیب کړئ
  3. د ډیټابیس جوړښت کې بدلونونه د شخړو او لوی مهاجرت فایلونو پرته نورو چاپیریالونو ته لیږدولو څرنګوالی
  4. د څو پراختیا کونکو لخوا په یوه پروژه کې د موازي کار پروسې تنظیم کولو څرنګوالی
  5. د تولید چاپیریال ته د ډیټابیس جوړښت کې نور بدلونونه په خوندي ډول ځای په ځای کولو څرنګوالی

    سکیماکیپر په ژبه لیکل شوي ذخیره شوي طرزالعملونو سره کار کولو لپاره ډیزاین شوی PL/pgSQL. د نورو ژبو سره ازموینه نه ده ترسره شوې، نو کارول ممکن دومره اغیزمن نه وي یا ممکن ممکن نه وي.

په VCS کې د ډیټابیس جوړښت ډمپ ذخیره کولو څرنګوالی

کړی سکیما ساتونکی فعالیت وړاندې کوي saveDump، کوم چې د ډیټابیس څخه د ټولو شیانو جوړښت د جلا متن فایلونو په توګه خوندي کوي. محصول یو لارښود دی چې د ډیټابیس جوړښت لري، په ګروپي فایلونو ویشل شوي چې په اسانۍ سره VCS ته اضافه کیدی شي.

راځئ چې د څو مثالونو په کارولو سره د ډیټابیس څخه فایلونو ته د شیانو بدلولو ته وګورو:

د څيز ډول
دا پلان
سرلیک
د فایل لپاره اړونده لاره

جدول
د عامه
حسابونو
./public/tables/accounts.txt

د ذخیره کولو طرزالعمل
د عامه
auth(hash bigint)
./public/functions/auth(int8).sql

پېژندنه
پرواز
تعرفې
./booking/views/tariffs.txt

د فایلونو مینځپانګه د یو ځانګړي ډیټابیس څیز جوړښت متني نمایش دی. د مثال په توګه، د ذخیره شوي پروسیجرونو لپاره، د فایل مینځپانګې به د ذخیره شوي طرزالعمل بشپړ تعریف وي، د بلاک سره پیل کیږي CREATE OR REPLACE FUNCTION.

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

د ترویج .sql د ذخیره شوي پروسې سرچینې کوډ سره د فایلونو لپاره، دا غوره شوی ترڅو IDE په اتوماتيک ډول د ډیټابیس سره د متقابل عمل لپاره وسایل چمتو کړي کله چې فایل خلاص شي.

د ډمپ خوندي کولو وروسته د ډیټابیس جوړښت کې بدلونونه څنګه تعقیب کړئ

په VCS کې د اوسني ډیټابیس جوړښت ډمپ خوندي کولو سره، موږ دا فرصت ترلاسه کوو چې وګورو چې ایا د ډمپ رامینځته کیدو وروسته د ډیټابیس جوړښت کې بدلونونه رامینځته شوي. په کتابتون کې سکیما ساتونکی د ډیټابیس جوړښت کې د بدلون موندلو لپاره، یو فنکشن چمتو شوی verifyDump، کوم چې د اړخیزو تاثیراتو پرته د توپیرونو په اړه معلومات بیرته راوړي.

د چک کولو بدیل لاره د فنکشن بیا زنګ وهل دي saveDumpد ورته لارښود مشخص کول، او د بدلونونو لپاره په VCS کې وګورئ. څرنګه چې د ډیټابیس ټول توکي په جلا فایلونو کې خوندي شوي، VCS به یوازې بدل شوي توکي وښيي.
د دې میتود اصلي زیان د بدلونونو لیدلو لپاره د فایلونو بیا لیکلو ته اړتیا ده.

د ډیټابیس جوړښت کې بدلونونه د شخړو او لوی مهاجرت فایلونو پرته نورو چاپیریالونو ته لیږدولو څرنګوالی

د فعالیت څخه مننه deployDump د ذخیره شوي پروسیجرونو سرچینې کوډ په سمه توګه د منظم غوښتنلیک سرچینې کوډ په څیر ایډیټ کیدی شي. تاسو کولی شئ د ذخیره شوي طرزالعمل کوډ کې نوي لینونه اضافه / حذف کړئ او سمدلاسه د نسخې کنټرول ته بدلونونه فشار ورکړئ ، یا د ډمپ ډایرکټر کې د اړوندو فایلونو رامینځته کولو / حذف کولو سره ذخیره شوي پروسیجرونه رامینځته کړئ / حذف کړئ.

د مثال په توګه، په سکیما کې د نوي ذخیره شوي طرزالعمل رامینځته کول public یوازې د توسیع سره یو نوی فایل جوړ کړئ .sql په لارښود کې public/functions، په دې کې د ذخیره شوي طرزالعمل سرچینه کوډ ځای په ځای کړئ ، په شمول د بلاک CREATE OR REPLACE FUNCTION، بیا فنکشن ته زنګ ووهئ deployDump. د ذخیره شوي طرزالعمل بدلول او حذف کول په ورته ډول پیښیږي. په دې توګه، کوډ دواړه VCS او ډیټابیس ته په ورته وخت کې ځي.

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

کله چې د نوي ذخیره شوي طرزالعمل رامینځته کول، په لاسي ډول د سم فایل نوم داخلولو ته اړتیا نشته. دا د فایل لپاره کافي ده چې توسیع ولري .sql. له زنګ وروسته deployDump د خطا متن به سم نوم ولري، کوم چې د فایل نوم بدلولو لپاره کارول کیدی شي.

deployDump تاسو ته اجازه درکوي د فنکشن پیرامیټرې بدل کړئ یا پرته له اضافي کړنو څخه بیرته راستنیدو ډول ، پداسې حال کې چې د کلاسیک چلند سره تاسو باید
لومړی اجرا کړئ DROP FUNCTION، او یوازې بیا CREATE OR REPLACE FUNCTION.

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

که تاسو د ذخیره شوي پروسیجرونو کې د بدلونونو د لیږد مسولیت لرئ سکیما ساتونکی، بیا د مهاجرت فایلونه باید په جوړښت کې د نورو بدلونونو لیږدولو لپاره وکارول شي. د مثال په توګه، د مهاجرت سره د کار کولو لپاره یو ښه کتابتون دی عقیده/مهاجرت.

مهاجرت باید د پیل کولو دمخه پلي شي deployDump. دا تاسو ته اجازه درکوي په جوړښت کې ټول بدلونونه رامینځته کړئ او ستونزمن حالتونه حل کړئ ترڅو په ذخیره شوي پروسیجرونو کې بدلونونه وروسته له ستونزو پرته لیږدول کیږي.

د مهاجرت سره کار کول به په لاندې برخو کې په تفصیل سره تشریح شي.

د څو پراختیا کونکو لخوا په یوه پروژه کې د موازي کار پروسې تنظیم کولو څرنګوالی

دا اړینه ده چې د ډیټابیس بشپړ پیل کولو لپاره سکریپټ رامینځته کړئ ، کوم چې د پراختیا کونکي لخوا به د هغه کاري ماشین کې پیل شي ، د ځایی ډیټابیس جوړښت په VCS کې خوندي شوي ډمپ سره سم راوړي. ترټولو آسانه لاره دا ده چې د محلي ډیټابیس پیل په 3 مرحلو ویشئ:

  1. د بنسټیز جوړښت سره یو فایل وارد کړئ چې ورته ویل کیږي base.sql
  2. د مهاجرت پلي کول
  3. ننګونې deployDump

base.sql د پیل ټکی دی چې په سر کې یې مهاجرت پلي کیږي او اجرا کیږي deployDumpدا دی base.sql + миграции + deployDump = актуальная структура БД. تاسو کولی شئ د یوټیلیټ په کارولو سره دا ډول فایل جوړ کړئ pg_dump. کارول base.sql په ځانګړې توګه کله چې له سکریچ څخه ډیټابیس پیل کړئ.

راځئ چې د بشپړ ډیټابیس پیل کولو لپاره سکریپټ ته زنګ ووهو refresh.sh. د کار جریان ممکن داسې ښکاري:

  1. پراختیا کونکی په خپل چاپیریال کې پیل کوي refresh.sh او اوسنی ډیټابیس جوړښت ترلاسه کوي
  2. پراختیا کونکی په لاس کې کار پیل کوي ، د نوي فعالیت اړتیاو پوره کولو لپاره محلي ډیټابیس بدلوي (ALTER TABLE ... ADD COLUMN وغيره)
  3. د دندې بشپړولو وروسته ، پراختیا کونکی فنکشن ته زنګ ووهي saveDumpد VCS په ډیټابیس کې د بدلونونو ژمن کول
  4. پرمخ وړونکي بیا پیل کول refresh.shبیا verifyDumpکوم چې اوس په مهاجرت کې د شاملولو لپاره د بدلونونو لیست ښیې
  5. پراختیا کونکی ټول جوړښت بدلونونه د مهاجرت فایل ته لیږدوي، بیا پرمخ ځي refresh.sh и verifyDump، او، که مهاجرت په سمه توګه ترتیب شوی وي، verifyDump د محلي ډیټابیس او خوندي شوي ډمپ ترمینځ به هیڅ توپیر ونه ښیې

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

راځئ چې د مثال په کارولو سره د شخړې وضعیت په پام کې ونیسو: یوه څانګه شتون لري پرمختیا، چې له هغې څخه دوه څانګې څانګې لري: ځانګړتیا1 и ځانګړتیا2، کوم چې سره هیڅ ډول ټکر نلري پرمختیا، مګر د یو بل سره شخړې لري. دنده دا ده چې دواړه څانګې یوځای شي پرمختیا. د دې قضیې لپاره، دا سپارښتنه کیږي چې لومړی د څانګو څخه یو یې یوځای کړئ پرمختیااو بیا یوځای شي پرمختیا پاتې څانګې ته، په پاتې څانګه کې د شخړو حل کول، او بیا وروستنۍ څانګه یوځای کول پرمختیا. د شخړو د حل مرحلې په جریان کې، تاسو ممکن په وروستي څانګه کې د مهاجرت فایل حل کړئ ترڅو دا د وروستي ډمپ سره سمون ولري، کوم چې د ادغام پایلې شاملې دي.

د تولید چاپیریال ته د ډیټابیس جوړښت کې نور بدلونونه په خوندي ډول ځای په ځای کولو څرنګوالی

په VCS کې د اوسني ډیټابیس جوړښت د ډمپ شتون څخه مننه ، دا ممکنه کیږي چې د اړتیا وړ جوړښت سره دقیق مطابقت لپاره د تولید ډیټابیس چیک کړئ. دا ډاډ ورکوي چې ټول بدلونونه چې پراختیا کونکي یې اراده لري په بریالیتوب سره د تولید بیس ته لیږدول شوي.

راهیسې DDL په PostgreSQL کې دی معامله، دا سپارښتنه کیږي چې د لاندې ځای پرځای کولو امر ته غاړه کیږدئ ، نو د غیر متوقع غلطی په صورت کې ، تاسو کولی شئ "بې درده" اجرا کړئ ROLLBACK:

  1. معامله پیل کړئ
  2. ټول مهاجرتونه په یوه معامله کې ترسره کړئ
  3. په ورته معامله کې، اجرا کول deployDump
  4. د لیږد بشپړولو پرته، اجرا کول verifyDump. که کومه تېروتنه نه وي، چلول COMMIT. که چیرې تېروتنې شتون ولري، چل کړئ ROLLBACK

دا مرحلې په اسانۍ سره د غوښتنلیک ګمارلو لپاره موجوده طریقو کې مدغم کیدی شي ، پشمول د صفر کم وخت.

پایلې

د پورته ذکر شوي میتودونو څخه مننه ، دا ممکنه ده چې د "PHP + PostgreSQL" پروژو څخه اعظمي فعالیت وخورئ ، پداسې حال کې چې د اصلي غوښتنلیک کوډ کې د سوداګرۍ ټول منطق پلي کولو په پرتله نسبتا لږ پرمختیا اسانتیا قرباني کول. سربیره پردې، د معلوماتو پروسس کول PL/pgSQL ډیری وختونه ډیر شفاف ښکاري او په پی ایچ پی کې لیکل شوي ورته فعالیت څخه لږ کوډ ته اړتیا لري.

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

Add a comment