Logic sa negosyo sa database gamit ang SchemaKeeper

Ang katuyoan niini nga artikulo mao ang paggamit sa pananglitan sa usa ka librarya schema-keeper ipakita ang mga himan nga makapasayon ​​sa proseso sa pagpalambo sa mga database sulod sa mga proyekto sa PHP gamit ang PostgreSQL DBMS.

Ang impormasyon gikan sa kini nga artikulo, una sa tanan, mahimong mapuslanon sa mga nag-develop nga gusto nga mapahimuslan ang mga kapabilidad sa PostgreSQL, apan nag-atubang sa mga problema sa pagpadayon sa lohika sa negosyo nga gibutang sa database.

Kini nga artikulo dili maghubit sa mga bentaha o disbentaha sa pagtipig sa lohika sa negosyo sa usa ka database. Gituohan nga ang pagpili nahimo na sa magbabasa.

Ang mosunod nga mga pangutana pagatagdon:

  1. Sa unsa nga porma ang usa ka database structure dump itago sa usa ka version control system (gitawag dinhi nga VCS)
  2. Giunsa pagsubay ang mga pagbag-o sa istruktura sa database pagkahuman sa pagtipig sa usa ka dump
  3. Giunsa pagbalhin ang mga pagbag-o sa istruktura sa database sa ubang mga palibot nga wala’y mga panagbangi ug higanteng mga file sa paglalin
  4. Giunsa ang pag-organisar sa proseso sa parallel nga trabaho sa usa ka proyekto sa daghang mga developer
  5. Giunsa ang luwas nga pag-deploy sa daghang mga pagbag-o sa istruktura sa database sa usa ka palibot sa produksiyon

    SchemaKeeper gidisenyo alang sa pagtrabaho uban sa gitipigan nga mga pamaagi nga gisulat sa pinulongan PL/pgSQL. Ang pagsulay sa ubang mga pinulongan wala pa gihimo, mao nga ang paggamit mahimong dili ingon ka epektibo o dili mahimo.

Giunsa pagtipig ang usa ka dump sa istruktura sa database sa VCS

librarya schema-keeper naghatag ug function saveDump, nga nagtipig sa istruktura sa tanan nga mga butang gikan sa database isip bulag nga mga file sa teksto. Ang output usa ka direktoryo nga adunay sulud nga istruktura sa database, gibahin sa mga grupo nga mga file nga dali nga madugang sa VCS.

Atong tan-awon ang pag-convert sa mga butang gikan sa database ngadto sa mga file gamit ang daghang mga pananglitan:

Matang sa butang
Ang laraw
Titulo
Relatibong dalan sa file

lamesa
sa publiko
mga asoy
./public/tables/accounts.txt

Gitipigan nga pamaagi
sa publiko
auth(hash bigint)
./public/functions/auth(int8).sql

Pasiuna
pamalit og tiket
taripa
./booking/views/tariffs.txt

Ang mga sulud sa mga file usa ka representasyon sa teksto sa istruktura sa usa ka piho nga butang sa database. Pananglitan, alang sa gitipigan nga mga pamaagi, ang mga sulod sa file mao ang bug-os nga kahulugan sa gitipigan nga pamaagi, sugod sa block CREATE OR REPLACE FUNCTION.

Ingon sa makita gikan sa lamesa sa ibabaw, ang agianan sa file nagtipig kasayuran bahin sa tipo, laraw ug ngalan sa butang. Kini nga pamaagi nagpasayon ​​sa pag-navigate pinaagi sa dump ug code review sa mga kausaban sa database.

extension .sql alang sa mga file nga adunay gitipigan nga pamaagi nga source code, gipili kini aron ang IDE awtomatik nga maghatag mga himan alang sa pakigsulti sa database kung giablihan ang file.

Giunsa pagsubay ang mga pagbag-o sa istruktura sa database pagkahuman sa pagtipig sa usa ka dump

Pinaagi sa pag-save sa usa ka dump sa kasamtangan nga istruktura sa database sa VCS, nakuha namon ang higayon nga masusi kung ang mga pagbag-o gihimo sa istruktura sa database pagkahuman nahimo ang dump. Sa library schema-keeper aron mahibal-an ang mga pagbag-o sa istruktura sa database, usa ka function ang gihatag verifyDump, nga nagbalik sa kasayuran bahin sa mga kalainan nga wala’y epekto.

Usa ka alternatibong paagi sa pagsusi mao ang pagtawag pag-usab sa function saveDump, nagpiho sa parehas nga direktoryo, ug susiha ang VCS alang sa mga pagbag-o. Tungod kay ang tanan nga mga butang gikan sa database gitipigan sa bulag nga mga file, ang VCS magpakita lamang sa mga nabag-o nga butang.
Ang nag-unang disbentaha niini nga pamaagi mao ang panginahanglan sa pag-overwrite sa mga file aron makita ang mga pagbag-o.

Giunsa pagbalhin ang mga pagbag-o sa istruktura sa database sa ubang mga palibot nga wala’y mga panagbangi ug higanteng mga file sa paglalin

Salamat sa function deployDump Ang source code sa gitipigan nga mga pamaagi mahimong i-edit sa eksakto nga paagi sama sa regular nga source code sa aplikasyon. Mahimo nimong idugang/kuhaan ang mga bag-ong linya sa gitipigan nga code sa pamaagi ug iduso dayon ang mga pagbag-o sa pagkontrol sa bersyon, o paghimo/pagtangtang sa mga gitipig nga pamaagi pinaagi sa paghimo/pagtangtang sa katugbang nga mga file sa direktoryo sa dump.

Pananglitan, sa paghimo og bag-ong gitipigan nga pamaagi sa usa ka schema public paghimo lang usa ka bag-ong file nga adunay extension .sql sa direktoryo public/functions, ibutang ang source code sa gitipigan nga pamaagi niini, lakip ang block CREATE OR REPLACE FUNCTION, unya tawga ang function deployDump. Ang pagbag-o ug pagtangtang sa gitipigan nga pamaagi mahitabo sa parehas nga paagi. Sa ingon, ang code moadto sa VCS ug sa database sa parehas nga oras.

Kung adunay usa ka sayup nga makita sa source code sa bisan unsang gitipigan nga pamaagi, o usa ka kalainan tali sa mga ngalan sa file ug sa gitipigan nga pamaagi, nan deployDump mapakyas, nagpakita sa sayop nga teksto. Ang dili pagtugma sa gitipigan nga mga pamaagi tali sa dump ug sa kasamtangan nga database imposible kung gamiton deployDump.

Kung maghimo usa ka bag-ong gitipigan nga pamaagi, dili kinahanglan nga mano-mano ang pagsulod sa husto nga ngalan sa file. Igo na alang sa file nga adunay extension .sql. Human sa tawag deployDump ang sayop nga teksto maglangkob sa husto nga ngalan, nga magamit sa pagbag-o sa ngalan sa file.

deployDump Gitugotan ka nga usbon ang mga parameter sa usa ka function o tipo sa pagbalik nga wala’y dugang nga mga aksyon, samtang sa klasikal nga pamaagi kinahanglan nimo.
execute una DROP FUNCTION, ug unya ra CREATE OR REPLACE FUNCTION.

Ikasubo, adunay pipila ka mga sitwasyon diin deployDump dili awtomatik nga magamit ang mga pagbag-o. Pananglitan, kung ang usa ka trigger function nga gigamit sa labing menos usa ka trigger gikuha. Ang ingon nga mga sitwasyon gisulbad sa mano-mano gamit ang mga file sa paglalin.

Kung ikaw ang responsable sa pagbalhin sa mga pagbag-o sa gitipigan nga mga pamaagi schema-keeper, unya ang mga file sa paglalin kinahanglan gamiton aron mabalhin ang ubang mga pagbag-o sa istruktura. Pananglitan, ang usa ka maayo nga librarya alang sa pagtrabaho sa mga paglalin mao ang doktrina/paglalin.

Ang mga paglalin kinahanglang ipadapat sa dili pa ilunsad deployDump. Gitugotan ka niini sa paghimo sa tanan nga mga pagbag-o sa istruktura ug pagsulbad sa mga problema nga mga sitwasyon aron ang mga pagbag-o sa gitipigan nga mga pamaagi mabalhin nga wala’y mga problema.

Ang pagtrabaho sa mga paglalin ihulagway sa mas detalyado sa mosunod nga mga seksyon.

Giunsa ang pag-organisar sa proseso sa parallel nga trabaho sa usa ka proyekto sa daghang mga developer

Kini mao ang gikinahanglan nga sa paghimo sa usa ka script alang sa bug-os nga initialization sa database, nga gilansad sa developer sa iyang trabaho machine, nga nagdala sa istruktura sa lokal nga database ngadto sa uyon sa dump nga gitipigan sa VCS. Ang labing kadali nga paagi mao ang pagbahin sa pagsugod sa lokal nga database sa 3 nga mga lakang:

  1. Pag-import og file nga adunay sukaranan nga istruktura nga tawgon e.g. base.sql
  2. Pagpadapat sa mga Migrasyon
  3. Hagit deployDump

base.sql mao ang sinugdanan nga punto diin ang mga paglalin gipadapat ug gipatuman deployDump, nga mao base.sql + ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ + deployDump = Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ структура Π‘Π”. Makahimo ka sa ingon nga file gamit ang utility pg_dump. Gigamit base.sql eksklusibo kung gisugdan ang database gikan sa wala.

Tawgon nato ang script para sa kompletong database initialization refresh.sh. Ang workflow mahimong ingon niini:

  1. Ang developer naglansad sa iyang palibot refresh.sh ug makuha ang kasamtangan nga istruktura sa database
  2. Ang developer nagsugod sa pagtrabaho sa buluhaton sa kamot, pag-usab sa lokal nga database aron matubag ang mga panginahanglan sa bag-ong gamit (ALTER TABLE ... ADD COLUMN ug uban pa)
  3. Human makompleto ang buluhaton, ang developer nagtawag sa function saveDumpsa paghimo sa mga pagbag-o nga gihimo sa database sa VCS
  4. Pag-usab sa developer refresh.shunya verifyDumpnga karon nagpakita sa usa ka listahan sa mga kausaban nga ilakip sa paglalin
  5. Gibalhin sa developer ang tanan nga pagbag-o sa istruktura sa file sa paglalin, midagan pag-usab refresh.sh ΠΈ verifyDump, ug, kung ang paglalin gihugpong sa husto, verifyDump dili magpakita og mga kalainan tali sa lokal nga database ug sa naluwas nga dump

Ang proseso nga gihulagway sa ibabaw nahiuyon sa mga prinsipyo sa gitflow. Ang matag sanga sa VCS maglangkob sa kaugalingon nga bersyon sa dump, ug kung maghiusa sa mga sanga, ang mga dump mahiusa. Sa kadaghanan nga mga kaso, wala’y dugang nga aksyon nga kinahanglan buhaton pagkahuman sa usa ka panagsama, apan kung ang mga pagbag-o gihimo sa lainlaing mga sanga, pananglitan, sa parehas nga lamesa, mahimo’g motungha ang panagbangi.

Atong tagdon ang usa ka sitwasyon sa panagbangi gamit ang usa ka pananglitan: adunay usa ka sanga sa pagpalambo og, nga gikan niini duha ka sanga ang sanga: tampok1 ΠΈ tampok2, nga walay panagsumpaki sa sa pagpalambo og, apan adunay mga panagsumpaki sa usag usa. Ang tahas mao ang paghiusa sa duha ka sanga ngadto sa sa pagpalambo og. Alang niini nga kaso, girekomenda nga una nga iusa ang usa sa mga sanga sa pagpalambo ogug dayon maghiusa sa pagpalambo og ngadto sa nahibiling sanga, pagsulbad sa mga panagbangi sa nahibiling sanga, ug dayon paghiusa sa kataposang sanga ngadto sa sa pagpalambo og. Atol sa yugto sa pagsulbad sa panagbangi, mahimo nimong ayohon ang file sa pagbalhin sa katapusang sanga aron kini motakdo sa katapusang dump, nga naglakip sa mga resulta sa mga paghiusa.

Giunsa ang luwas nga pag-deploy sa daghang mga pagbag-o sa istruktura sa database sa usa ka palibot sa produksiyon

Salamat sa presensya sa usa ka dump sa kasamtangan nga istruktura sa database sa VCS, nahimong posible nga susihon ang database sa produksiyon alang sa eksaktong pagsunod sa gikinahanglan nga istruktura. Gisiguro niini nga ang tanan nga mga pagbag-o nga gituyo sa mga developer malampuson nga gibalhin sa base sa produksiyon.

sukad sa DDL sa PostgreSQL mao transactional, girekomenda nga sundon ang mosunud nga mando sa pag-deploy, aron, kung adunay wala damha nga sayup, mahimo nimo nga "walay sakit" nga ipatuman ROLLBACK:

  1. Pagsugod sa transaksyon
  2. Buhata ang tanan nga mga paglalin sa usa ka transaksyon
  3. Sa parehas nga transaksyon, ipatuman deployDump
  4. Kung dili makompleto ang transaksyon, ipatuman verifyDump. Kung walay mga sayup, pagdagan COMMIT. Kung adunay mga sayup, pagdagan ROLLBACK

Kini nga mga lakang dali nga ma-integrate sa kasamtangan nga mga pamaagi sa pag-deploy sa aplikasyon, lakip ang zero-downtime.

konklusyon

Salamat sa mga pamaagi nga gihulagway sa ibabaw, posible nga pug-on ang labing kataas nga pasundayag gikan sa mga "PHP + PostgreSQL" nga mga proyekto, samtang gisakripisyo ang medyo gamay nga kasayon ​​sa pag-uswag kung itandi sa pagpatuman sa tanan nga lohika sa negosyo sa panguna nga code sa aplikasyon. Dugang pa, ang pagproseso sa datos sa PL/pgSQL kasagaran tan-awon nga mas transparent ug nagkinahanglan og gamay nga code kay sa parehas nga gamit nga gisulat sa PHP.

Source: www.habr.com

Idugang sa usa ka comment