اسڪيما ڪيپر استعمال ڪندي ڊيٽابيس ۾ ڪاروباري منطق

هن مضمون جو مقصد هڪ لائبريري جو مثال استعمال ڪرڻ آهي اسڪيم سنڀاليندڙ ڏيکاريو اوزار جيڪي PHP پروجيڪٽس ۾ پوسٽ گري ايس ايس ايل ڊي بي ايم ايس استعمال ڪندي ڊيٽابيس ٺاهڻ جي عمل کي خاص طور تي آسان بڻائي سگھن ٿا.

هن آرٽيڪل مان معلومات، سڀ کان پهرين، ڊولپرز لاءِ ڪارائتو ثابت ٿينديون جيڪي PostgreSQL صلاحيتن جو تمام گهڻو استعمال ڪرڻ چاهين ٿا، پر ڊيٽابيس ۾ رکيل ڪاروباري منطق کي برقرار رکڻ ۾ مشڪلاتن کي منهن ڏئي رهيا آهن.

هي آرٽيڪل ڊيٽابيس ۾ ڪاروباري منطق کي محفوظ ڪرڻ جا فائدا يا نقصان بيان نه ڪندو. اهو فرض ڪيو ويو آهي ته چونڊ اڳ ۾ ئي پڙهندڙ طرفان ڪيو ويو آهي.

هيٺين سوالن تي غور ڪيو ويندو:

  1. ڪهڙي شڪل ۾ ڊيٽابيس جي جوڙجڪ ڊمپ کي هڪ نسخي ڪنٽرول سسٽم ۾ محفوظ ڪيو وڃي (هتي VCS طور حوالو ڏنو ويو آهي)
  2. ڊمپ کي بچائڻ کان پوء ڊيٽابيس جي جوڙجڪ ۾ تبديلين کي ڪيئن ٽريڪ ڪجي
  3. ڊيٽابيس جي جوڙجڪ ۾ تبديلين کي ڪيئن منتقل ڪيو وڃي ٻين ماحولن ۾ بغير تڪرار ۽ وڏي لڏپلاڻ واري فائلن جي
  4. ڪيترن ئي ڊولپرز پاران هڪ منصوبي تي متوازي ڪم جي عمل کي ڪيئن منظم ڪجي
  5. ڊيٽابيس جي ڍانچي ۾ وڌيڪ تبديلين کي ڪيئن محفوظ طور تي ترتيب ڏيڻ جي پيداوار ماحول ۾

    اسڪيم سنڀاليندڙ ٻولي ۾ لکيل ذخيرو ٿيل طريقيڪار سان ڪم ڪرڻ لاء ٺهيل PL/pgSQL. ٻين ٻولين سان جاچ نه ڪئي وئي آهي، تنهنڪري استعمال شايد اثرائتو نه هجي يا ممڪن نه هجي.

VCS ۾ ڊيٽابيس جي جوڙجڪ ڊمپ کي ڪيئن ذخيرو ڪجي

لائبريري اسڪيم سنڀاليندڙ فنڪشن مهيا ڪري ٿو saveDump، جيڪو ڊيٽابيس مان سڀني شين جي جوڙجڪ کي الڳ متن فائلن جي طور تي محفوظ ڪري ٿو. ٻاھر ھڪڙي ڊاريڪٽري آھي جنھن ۾ ڊيٽابيس جي جوڙجڪ آھي، گروپ ٿيل فائلن ۾ ورهايل آھي جيڪي آساني سان VCS ۾ شامل ڪري سگھجن ٿيون.

اچو ته ڪيترن ئي مثالن کي استعمال ڪندي ڊيٽابيس مان شيون فائلن ۾ تبديل ڪرڻ تي نظر رکون:

اعتراض جو قسم
هي منصوبو
ٽائيٽل
فائل ڏانهن لاڳاپيل رستو

جدول
عوامي
حساب ڪتاب
./public/tables/accounts.txt

ذخيرو ٿيل عمل
عوامي
تصنيف (هيش وڏو)
./public/functions/auth(int8).sql

تعارف
booking
محصول
./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. ڪم مڪمل ڪرڻ کان پوء، ڊولپر فنڪشن کي سڏي ٿو saveDumpVCS ۾ ڊيٽابيس ۾ ڪيل تبديلين کي انجام ڏيڻ لاء
  4. ڊولپر ٻيهر لانچ refresh.shپوءِ verifyDumpجيڪو هاڻي لڏپلاڻ ۾ شامل ڪرڻ لاءِ تبديلين جي فهرست ڏيکاري ٿو
  5. ڊولپر لڏپلاڻ واري فائل ۾ سڀني ساخت جي تبديلين کي منتقل ڪري ٿو، ٻيهر هلندو آهي refresh.sh и verifyDump، ۽، جيڪڏهن لڏپلاڻ صحيح طور تي مرتب ٿيل آهي، verifyDump مقامي ڊيٽابيس ۽ محفوظ ٿيل ڊمپ جي وچ ۾ ڪوبه فرق نه ڏيکاريندو

مٿي بيان ڪيل عمل گٽ فلو اصولن سان مطابقت رکي ٿو. VCS ۾ هر شاخ ڊمپ جي پنهنجي ورزن تي مشتمل هوندي، ۽ جڏهن شاخن کي ضم ڪيو ويندو، ڊمپ کي ضم ڪيو ويندو. اڪثر صورتن ۾، ضم ٿيڻ کان پوءِ ڪنهن به اضافي عمل جي ضرورت ناهي، پر جيڪڏهن مختلف شاخن ۾ تبديليون ڪيون ويون، مثال طور، هڪ ئي ٽيبل تي، تڪرار پيدا ٿي سگهي ٿو.

اچو ته هڪ مثال استعمال ڪندي تڪرار جي صورتحال تي غور ڪريو: اتي هڪ شاخ آهي ترقي ڪريوجنهن مان ٻه شاخون شاخون: مضمون1 и مضمون2جنهن سان ڪوبه تضاد نه هجي ترقي ڪريو، پر هڪ ٻئي سان تڪرار آهن. ڪم ٻنهي شاخن ۾ ضم ڪرڻ آهي ترقي ڪريو. هن معاملي لاء، ان کي پهرين شاخن مان هڪ کي ضم ڪرڻ جي صلاح ڏني آهي ترقي ڪريو۽ پوء ملايو ترقي ڪريو باقي شاخ ڏانهن، باقي شاخ ۾ تڪرار حل ڪرڻ، ۽ پوء آخري شاخ کي ضم ڪرڻ ترقي ڪريو. تڪرار جي حل واري مرحلي دوران، توهان کي آخري برانچ ۾ لڏپلاڻ واري فائل کي درست ڪرڻو پوندو ته جيئن اهو آخري ڊمپ سان ملائي، جنهن ۾ ضمير جا نتيجا شامل آهن.

ڊيٽابيس جي ڍانچي ۾ وڌيڪ تبديلين کي ڪيئن محفوظ طور تي ترتيب ڏيڻ جي پيداوار ماحول ۾

VCS ۾ موجوده ڊيٽابيس جي ڍانچي جي ڊمپ جي موجودگي جي مهرباني، اهو ممڪن آهي ته پيداوار جي ڊيٽابيس کي چيڪ ڪرڻ لاء گهربل جوڙجڪ سان صحيح تعميل لاء. انهي کي يقيني بڻائي ٿو ته سڀئي تبديليون جيڪي ڊولپرز جو ارادو ڪيو ويو ڪاميابي سان پيداوار جي بنياد تي منتقل ڪيو ويو.

کان ڊي ڊي ايل PostgreSQL ۾ آهي ٽرانزيڪشنل، اها سفارش ڪئي وئي آهي ته هيٺ ڏنل ڊيپلائيمينٽ آرڊر تي عمل ڪيو وڃي، انهي ڪري ته، اڻڄاتل غلطي جي صورت ۾، توهان "بغير درد" تي عمل ڪري سگهو ٿا ROLLBACK:

  1. ٽرانزيڪشن شروع ڪريو
  2. ھڪڙي ٽرانزيڪشن ۾ سڀني لڏپلاڻ کي انجام ڏيو
  3. ساڳئي ٽرانزيڪشن ۾، عمل ڪريو deployDump
  4. ٽرانزيڪشن کي مڪمل ڪرڻ کان سواء، عمل ڪرڻ verifyDump. جيڪڏهن ڪو غلطيون نه آهن، هلايو COMMIT. جيڪڏھن غلطيون آھن، ھلايو ROLLBACK

اهي مرحلا آسانيءَ سان ضم ٿي سگهن ٿا موجوده طريقن ۾ ايپليڪيشن جي ترتيب ڏيڻ لاءِ، بشمول صفر-ڊائون ٽائم.

ٿڪل

مٿي بيان ڪيل طريقن جي مهرباني، "PHP + PostgreSQL" منصوبن مان وڌ کان وڌ ڪارڪردگي کي نچوض ڪرڻ ممڪن آهي، جڏهن ته مکيه ايپليڪيشن ڪوڊ ۾ سڀني ڪاروباري منطق کي لاڳو ڪرڻ جي مقابلي ۾ نسبتا ٿوري ترقي جي سهولت کي قربان ڪرڻ. ان کان علاوه، ڊيٽا پروسيسنگ ۾ PL/pgSQL گهڻو ڪري وڌيڪ شفاف نظر اچي ٿو ۽ PHP ۾ لکيل ساڳئي ڪارڪردگي کان گهٽ ڪوڊ جي ضرورت آهي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو