Imọye iṣowo ni ibi ipamọ data nipa lilo SchemaKeeper

Idi ti nkan yii ni lati lo apẹẹrẹ ti ile-ikawe kan schema-olutọju ṣe afihan awọn irinṣẹ ti o le ṣe irọrun ilana ti idagbasoke awọn data data laarin awọn iṣẹ akanṣe PHP ni lilo PostgreSQL DBMS.

Alaye lati inu nkan yii yoo, ni akọkọ, jẹ iwulo fun awọn olupilẹṣẹ ti o fẹ lati ṣe pupọ julọ ti awọn agbara PostgreSQL, ṣugbọn o dojuko awọn iṣoro mimu iṣaro iṣowo ti a gbe sinu ibi ipamọ data.

Nkan yii kii yoo ṣe apejuwe awọn anfani tabi awọn aila-nfani ti titoju ọgbọn iṣowo ni ibi ipamọ data. O ti ro pe yiyan ti tẹlẹ ti ṣe nipasẹ oluka.

Awọn ibeere wọnyi yoo ṣe ayẹwo:

  1. Ninu iru fọọmu wo ni o yẹ ki idalẹnu ipilẹ data wa ni ipamọ sinu eto iṣakoso ẹya kan (lẹhinna tọka si VCS)
  2. Bii o ṣe le tọpa awọn ayipada ninu igbekalẹ data lẹhin fifipamọ idalẹnu kan
  3. Bii o ṣe le gbe awọn ayipada ninu igbekalẹ data si awọn agbegbe miiran laisi awọn ija ati awọn faili ijira nla
  4. Bii o ṣe le ṣeto ilana ti iṣẹ afiwera lori iṣẹ akanṣe nipasẹ ọpọlọpọ awọn olupilẹṣẹ
  5. Bii o ṣe le mu awọn ayipada diẹ sii lailewu ni ipilẹ data si agbegbe iṣelọpọ kan

    Olutọju Iṣeto apẹrẹ fun ṣiṣẹ pẹlu awọn ilana ti o ti fipamọ ti a kọ sinu ede PL/pgSQL. Idanwo pẹlu awọn ede miiran ko ti ṣe, nitorina lilo le ma munadoko tabi o le ma ṣee ṣe.

Bii o ṣe le tọju idalẹnu ipilẹ data ni VCS

ìkàwé schema-olutọju pese iṣẹ kan saveDump, eyiti o fipamọ eto gbogbo nkan lati ibi ipamọ data gẹgẹbi awọn faili ọrọ lọtọ. Ijade naa jẹ ilana ti o ni eto data data ninu, ti o pin si awọn faili akojọpọ ti o le ni irọrun ṣafikun si VCS.

Jẹ ki a wo iyipada awọn nkan lati ibi ipamọ data sinu awọn faili ni lilo awọn apẹẹrẹ pupọ:

Iru nkan
Ero
Akọle
Ojulumo ona lati faili

Tabili
àkọsílẹ
àpamọ
./public/tables/accounts.txt

Ilana ti o ti fipamọ
àkọsílẹ
auth(hash bigint)
./public/functions/auth(int8).sql

Ifihan
fowo si
owo-ori
./booking/views/tariffs.txt

Awọn akoonu ti awọn faili jẹ aṣoju ọrọ ti eto ti ohun elo data kan pato. Fun apẹẹrẹ, fun awọn ilana ti o fipamọ, awọn akoonu ti faili naa yoo jẹ asọye ni kikun ti ilana ti o fipamọ, bẹrẹ pẹlu bulọki. CREATE OR REPLACE FUNCTION.

Gẹgẹbi a ti le rii lati tabili loke, ọna si faili naa tọju alaye nipa iru, eto ati orukọ nkan naa. Ọna yii jẹ ki o rọrun lati lilö kiri nipasẹ idalenu ati atunyẹwo koodu ti awọn ayipada ninu aaye data.

Imugboroosi .sql fun awọn faili pẹlu koodu orisun ilana ti o fipamọ, eyi ni a yan ki IDE laifọwọyi pese awọn irinṣẹ fun ibaraenisepo pẹlu ibi ipamọ data nigbati faili ba ṣii.

Bii o ṣe le tọpa awọn ayipada ninu igbekalẹ data lẹhin fifipamọ idalẹnu kan

Nipa fifipamọ idalẹnu ti igbekalẹ data lọwọlọwọ ni VCS, a ni aye lati ṣayẹwo boya awọn ayipada ti ṣe si eto data lẹhin ti a ti ṣẹda idalẹnu naa. Ni ìkàwé schema-olutọju lati wa awọn ayipada ninu ipilẹ data, iṣẹ kan ti pese verifyDump, eyi ti o da alaye pada nipa awọn iyatọ laisi awọn ipa ẹgbẹ.

Ọna miiran lati ṣayẹwo ni lati pe iṣẹ naa lẹẹkansi saveDump, ti n ṣalaye itọsọna kanna, ati ṣayẹwo ni VCS fun awọn ayipada. Niwọn bi gbogbo awọn nkan lati ibi ipamọ data ti wa ni ipamọ ni awọn faili lọtọ, VCS yoo ṣafihan awọn ohun ti o yipada nikan.
Alailanfani akọkọ ti ọna yii ni iwulo lati kọ awọn faili kọ lati le rii awọn ayipada.

Bii o ṣe le gbe awọn ayipada ninu igbekalẹ data si awọn agbegbe miiran laisi awọn ija ati awọn faili ijira nla

Ṣeun si iṣẹ naa deployDump Awọn koodu orisun ti awọn ilana ipamọ le ṣe atunṣe ni ọna kanna gẹgẹbi koodu orisun ohun elo deede. O le ṣafikun / paarẹ awọn laini titun ni koodu ilana ti o fipamọ ati tẹ awọn ayipada lẹsẹkẹsẹ si iṣakoso ẹya, tabi ṣẹda / paarẹ awọn ilana ti o fipamọ nipa ṣiṣẹda / piparẹ awọn faili ti o baamu ni ilana idalẹnu.

Fun apẹẹrẹ, lati ṣẹda ilana tuntun ti o fipamọ sinu ero kan public kan ṣẹda faili tuntun pẹlu itẹsiwaju .sql ninu liana public/functions, gbe koodu orisun ti ilana ti a fipamọ sinu rẹ, pẹlu Àkọsílẹ CREATE OR REPLACE FUNCTION, lẹhinna pe iṣẹ naa deployDump. Iyipada ati piparẹ ilana ti o fipamọ waye ni ọna kanna. Nitorinaa, koodu naa lọ sinu mejeeji VCS ati data data ni akoko kanna.

Ti aṣiṣe kan ba han ninu koodu orisun ti eyikeyi ilana ti o fipamọ, tabi iyatọ laarin awọn orukọ faili ati ilana ti o fipamọ, lẹhinna deployDump yoo kuna, han ọrọ aṣiṣe. Aiṣedeede awọn ilana ti o fipamọ laarin idalẹnu ati aaye data lọwọlọwọ ko ṣee ṣe nigba lilo deployDump.

Nigbati o ba ṣẹda ilana titun ti o fipamọ, ko si iwulo lati tẹ orukọ faili to pe pẹlu ọwọ. O to fun faili lati ni itẹsiwaju .sql. Lẹhin ipe deployDump ọrọ aṣiṣe yoo ni orukọ ti o pe, eyiti o le ṣee lo lati tunrukọ faili naa.

deployDump gba ọ laaye lati yi awọn aye ti iṣẹ kan pada tabi iru ipadabọ laisi awọn iṣe afikun, lakoko ti ọna kilasika iwọ yoo ni lati
ṣiṣẹ akọkọ DROP FUNCTION, ati lẹhinna nikan CREATE OR REPLACE FUNCTION.

Laanu, awọn ipo kan wa nibiti deployDump ko le ṣe awọn ayipada laifọwọyi. Fun apẹẹrẹ, ti iṣẹ okunfa ti o ba lo nipasẹ o kere ju ọkan ti nfa ti yọ kuro. Iru awọn ipo bẹẹ jẹ ipinnu pẹlu ọwọ nipa lilo awọn faili iṣiwa.

Ti o ba ni iduro fun gbigbe awọn ayipada si awọn ilana ti o fipamọ schema-olutọju, lẹhinna awọn faili iṣiwa gbọdọ ṣee lo lati gbe awọn ayipada miiran ninu eto naa. Fun apẹẹrẹ, ile-ikawe to dara fun ṣiṣẹ pẹlu awọn iṣikiri jẹ ẹkọ / migrations.

Awọn iṣiwa gbọdọ wa ni loo ṣaaju ifilọlẹ deployDump. Eyi n gba ọ laaye lati ṣe gbogbo awọn ayipada si eto ati yanju awọn ipo iṣoro ki awọn ayipada ninu awọn ilana ti o fipamọ ni a gbe siwaju laisi awọn iṣoro.

Ṣiṣẹ pẹlu awọn iṣiwa yoo jẹ apejuwe ni awọn alaye diẹ sii ni awọn apakan atẹle.

Bii o ṣe le ṣeto ilana ti iṣẹ afiwera lori iṣẹ akanṣe nipasẹ ọpọlọpọ awọn olupilẹṣẹ

O jẹ dandan lati ṣẹda iwe afọwọkọ kan fun ipilẹṣẹ pipe ti ibi ipamọ data, eyiti olupilẹṣẹ yoo ṣe ifilọlẹ lori ẹrọ iṣẹ rẹ, ti o mu eto data agbegbe wa ni ibamu pẹlu idalẹnu ti o fipamọ ni VCS. Ọna to rọọrun ni lati pin ibẹrẹ ipilẹ data agbegbe si awọn igbesẹ mẹta:

  1. Gbe faili wọle pẹlu eto ipilẹ ti yoo pe fun apẹẹrẹ. base.sql
  2. Nbere Awọn aṣikiri
  3. Pe deployDump

base.sql jẹ aaye ibẹrẹ ti o wa lori oke eyiti a lo awọn iṣipopada ati ṣiṣe deployDump, eyini ni base.sql + миграции + deployDump = актуальная структура БД. O le ṣẹda iru faili kan nipa lilo ohun elo pg_dump. Lo base.sql iyasọtọ nigbati ipilẹṣẹ data lati ibere.

Jẹ ki ká pe awọn akosile fun pipe database ibẹrẹ refresh.sh. Ilana iṣẹ le dabi eyi:

  1. Olùgbéejáde ṣe ifilọlẹ ni agbegbe rẹ refresh.sh ati ki o gba awọn ti isiyi database be
  2. Olùgbéejáde bẹrẹ iṣẹ lori iṣẹ-ṣiṣe ti o wa ni ọwọ, ti n ṣatunṣe data data agbegbe lati pade awọn iwulo ti iṣẹ-ṣiṣe tuntun (ALTER TABLE ... ADD COLUMN ati be be lo)
  3. Lẹhin ti pari iṣẹ-ṣiṣe naa, olupilẹṣẹ n pe iṣẹ naa saveDumplati ṣe awọn ayipada ti a ṣe si ibi ipamọ data ni VCS
  4. Atunbẹrẹ Olùgbéejáde refresh.shlẹhinna verifyDumpeyiti o ṣe afihan atokọ ti awọn ayipada lati ni ninu ijira naa
  5. Olùgbéejáde n gbe gbogbo awọn iyipada igbekalẹ si faili ijira, nṣiṣẹ lẹẹkansi refresh.sh и verifyDump, ati, ti o ba ti iṣikiri ti wa ni akopọ ti o tọ, verifyDump kii yoo ṣe afihan awọn iyatọ laarin aaye data agbegbe ati idalẹnu ti o fipamọ

Ilana ti a ṣalaye loke wa ni ibamu pẹlu awọn ipilẹ gitflow. Ẹka kọọkan ti o wa ninu VCS yoo ni ẹya tirẹ ti idalẹnu, ati nigbati o ba dapọ awọn ẹka, awọn idalenu yoo dapọ. Ni ọpọlọpọ igba, ko si awọn igbese afikun nilo lati ṣe lẹhin iṣọpọ, ṣugbọn ti o ba ṣe awọn ayipada lori awọn ẹka oriṣiriṣi, fun apẹẹrẹ si tabili kanna, ija le dide.

Jẹ ki a wo ipo rogbodiyan nipa lilo apẹẹrẹ: ẹka kan wa se agbekale, lati eyiti awọn ẹka meji: ẹya1 и ẹya2, ti ko ni ija pẹlu se agbekale, sugbon ni rogbodiyan pẹlu kọọkan miiran. Iṣẹ-ṣiṣe ni lati dapọ awọn ẹka mejeeji sinu se agbekale. Fun idi eyi, o niyanju lati kọkọ dapọ ọkan ninu awọn ẹka sinu se agbekaleati lẹhinna dapọ se agbekale si ẹka ti o ku, ipinnu awọn ija ni ẹka ti o ku, ati lẹhinna dapọ ẹka ti o kẹhin sinu se agbekale. Lakoko ipele ipinnu rogbodiyan, o le ni lati ṣatunṣe faili iṣiwa ni ẹka ti o kẹhin ki o baamu idalẹnu ikẹhin, eyiti o pẹlu awọn abajade ti awọn akojọpọ.

Bii o ṣe le mu awọn ayipada diẹ sii lailewu ni ipilẹ data si agbegbe iṣelọpọ kan

Ṣeun si wiwa idalẹnu ti ipilẹ data lọwọlọwọ ni VCS, o ṣee ṣe lati ṣayẹwo ibi ipamọ data iṣelọpọ fun ibamu deede pẹlu eto ti o nilo. Eyi ni idaniloju pe gbogbo awọn ayipada ti awọn olupilẹṣẹ pinnu ni a gbejade ni aṣeyọri si ipilẹ iṣelọpọ.

Bi DDL ni PostgreSQL ni idunadura, o gba ọ niyanju lati faramọ aṣẹ imuṣiṣẹ atẹle, nitorinaa, ni ọran ti aṣiṣe airotẹlẹ, o le ṣiṣẹ “laisi irora” ROLLBACK:

  1. Bẹrẹ idunadura
  2. Ṣe gbogbo awọn ijira ni idunadura kan
  3. Ni idunadura kanna, ṣiṣẹ deployDump
  4. Laisi ipari idunadura naa, ṣiṣẹ verifyDump. Ti ko ba si awọn aṣiṣe, ṣiṣe COMMIT. Ti awọn aṣiṣe ba wa, ṣiṣe ROLLBACK

Awọn igbesẹ wọnyi le ni irọrun sinu awọn isunmọ ti o wa si imuṣiṣẹ ohun elo, pẹlu akoko-isalẹ odo.

ipari

Ṣeun si awọn ọna ti a ṣalaye loke, o ṣee ṣe lati fun pọ iṣẹ ṣiṣe ti o pọju ninu awọn iṣẹ akanṣe “PHP + PostgreSQL”, lakoko ti o rubọ irọrun idagbasoke idagbasoke diẹ ni akawe si imuse gbogbo ọgbọn iṣowo ni koodu ohun elo akọkọ. Jubẹlọ, data processing ni PL/pgSQL nigbagbogbo dabi sihin diẹ sii ati pe o nilo koodu ti o kere ju iṣẹ ṣiṣe kanna ti a kọ sinu PHP.

orisun: www.habr.com

Fi ọrọìwòye kun