Giunsa nga dili pusilon ang imong kaugalingon sa tiil gamit ang Liquibase

Wala pa gayud mahitabo kaniadto, ug ania na usab kita!

Sa among sunod nga proyekto, nakahukom kami nga gamiton ang Liquibase gikan sa sinugdanan aron malikayan ang mga problema sa umaabot. Ingon sa nahibal-an, dili tanan nga mga batan-ong miyembro sa team nahibal-an kung giunsa kini paggamit sa husto. Naghimo ako usa ka internal nga workshop, nga pagkahuman nakahukom ako nga himuon nga usa ka artikulo.

Ang artikulo naglakip sa mapuslanon nga mga tip ug usa ka paghulagway sa tulo ka labing klaro nga mga lit-ag nga mahimo nimong mahulog kung nagtrabaho kauban ang mga gamit sa paglalin sa database sa relational, labi na ang Liquibase. Gidisenyo alang sa mga developer sa Java sa Junior ug Middle nga lebel; alang sa mas eksperyensiyado nga mga developer mahimo kini nga interes alang sa pag-istruktura ug pagsubli kung unsa ang lagmit nahibal-an na.

Giunsa nga dili pusilon ang imong kaugalingon sa tiil gamit ang Liquibase

Ang Liquibase ug Flyway mao ang nag-unang mga teknolohiya nga nakigkompetensya alang sa pagsulbad sa mga problema sa pagkontrol sa bersyon sa mga relational nga istruktura sa kalibutan sa Java. Ang una hingpit nga libre, sa praktis kini kanunay nga gipili alang sa paggamit, mao nga ang Liquibase gipili ingon bayani sa publikasyon. Bisan pa, ang pipila sa mga praktis nga gihulagway mahimong unibersal, depende sa imong arkitektura sa aplikasyon.

Ang mga paglalin sa relational nga mga istruktura usa ka pinugos nga paagi sa pag-atubang sa huyang nga pagka-flexible sa relational data stores. Sa panahon sa OOP fashion, ang estilo sa pagtrabaho sa mga database nagpasabot nga atong ihulagway ang schema sa makausa ug dili na kini hikapon pag-usab. Apan ang tinuod mao ang kanunay nga ang mga butang mausab, ug ang mga pagbag-o sa istruktura sa lamesa gikinahanglan kanunay. Siyempre, ang proseso mismo mahimong masakit ug dili maayo.

Dili na ako molalom sa paghulagway sa teknolohiya ug mga instruksyon sa pagdugang og library sa imong proyekto; ubay-ubay nga mga artikulo ang nasulat bahin niini nga hilisgutan:

Dugang pa, adunay na usa ka maayo kaayo nga artikulo sa hilisgutan sa mapuslanon nga mga tip:

Mga tip

Gusto nakong ipaambit ang akong tambag ug komento, nga natawo pinaagi sa singot, dugo ug kasakit sa pagsulbad sa mga problema sa paglalin.

1. Sa dili pa magsugod sa trabaho, kinahanglan nimo nga pamilyar ang imong kaugalingon sa seksyon sa labing kaayo nga mga gawi sa site Liquibase

Didto ang yano apan hinungdanon kaayo nga mga butang gihulagway, kung wala ang paggamit sa librarya mahimong komplikado ang imong kinabuhi. Pananglitan, ang usa ka dili istruktura nga pamaagi sa pagdumala sa mga changeset sa madugay o sa madali mosangpot sa kalibog ug nabungkag nga mga paglalin. Kung dili nimo ilunsad ang mga pagbag-o nga nagsalig sa usag usa sa istruktura sa database ug lohika sa serbisyo sa parehas nga oras, adunay usa ka taas nga posibilidad nga kini modala sa pula nga mga pagsulay o usa ka guba nga palibot. Dugang pa, ang mga rekomendasyon sa paggamit sa Liquibase sa opisyal nga website naglangkob sa usa ka clause mahitungod sa pagpalambo ug pagsulay sa rollback scripts uban sa mga nag-unang migration scripts. Aw, sa artikulo https://habr.com/ru/post/178665/ Adunay mga pananglitan sa code bahin sa mga paglalin ug ang mekanismo sa rollback.

2. Kung magsugod ka sa paggamit sa mga galamiton sa paglalin, ayaw tugoti ang mga manwal nga pagtul-id sa istruktura sa database

Sama sa giingon sa panultihon: "Once Persil, always Persil." Kung ang sukaranan sa imong aplikasyon magsugod nga madumala sa Liquibase, ang bisan unsang mga pagbag-o sa manwal dayon mosangpot sa usa ka dili managsama nga kahimtang, ug ang lebel sa pagsalig sa mga pagbag-o mahimong zero. Ang mga potensyal nga peligro naglakip sa daghang oras nga gigugol sa pagpasig-uli sa database; sa labing grabe nga senaryo sa kaso, usa ka patay nga server. Kung ikaw adunay usa ka "daan nga eskwelahan" nga DBA Architect sa imong team, mapailubon ug mahunahunaon nga ipasabut kaniya kung unsa ang dili maayo nga mga butang kung iya lang i-edit ang database sumala sa iyang kaugalingon nga pagsabut gikan sa usa ka conditional SQL Developer.

3. Kung ang changeset naduso na sa repository, likayi ang pag-edit

Kung ang lain nga developer naghimo ug usa ka pagbira ug nag-apply sa usa ka changeset, nga sa ulahi i-edit, siguradong mahinumduman ka niya sa usa ka mabination nga pulong kung makadawat siya usa ka sayup sa pagsugod sa aplikasyon. Kung ang pag-edit sa changeset sa usa ka paagi mogawas sa pag-uswag, kinahanglan nimo nga sundon ang madulas nga bakilid sa mga hotfix. Ang esensya sa problema nagsalig sa pag-validate sa mga pagbag-o pinaagi sa hash sum - ang panguna nga mekanismo sa Liquibase. Kung gi-edit ang changeset code, ang kantidad sa hash mausab. Ang pag-edit sa mga changeset posible lamang kung posible nga i-deploy ang tibuok database gikan sa scratch nga dili mawala ang data. Sa kini nga kaso, ang pag-refactor sa SQL o XML code mahimo, sa sukwahi, makapasayon ​​sa kinabuhi ug makahimo sa mga paglalin nga mas mabasa. Usa ka pananglitan mao ang usa ka sitwasyon diin, sa pagsugod sa aplikasyon, ang schema sa source database gikasabutan sulod sa team.

4. Pag-verify sa mga backup sa database kung mahimo

Dinhi, sa akong hunahuna, ang tanan klaro. Kung sa kalit ang paglalin wala molampos, ang tanan mahimong ibalik. Ang Liquibase adunay himan alang sa pag-rollback sa mga pagbag-o, apan ang rollback nga mga script gisulat usab sa developer mismo, ug sila mahimong adunay mga problema sa sama nga posibilidad sa mga script sa main changeset. Kini nagpasabot nga kini mapuslanon sa pagdula niini luwas uban sa backups sa bisan unsa nga kaso.

5. Gamita ang napamatud-an nga mga backup sa database sa pagpalambo, kon mahimo

Kung dili kini supak sa mga kontrata ug pagkapribado, wala’y personal nga datos sa database, ug dili kini motimbang sama sa duha ka adlaw - sa wala pa kini gamiton sa mga live migration server, mahimo nimong susihon kung giunsa kini molihok sa makina sa developer ug makalkulo hapit 100% sa mga potensyal nga problema sa panahon sa paglalin.

6. Pakigkomunikar sa ubang mga developers sa team

Sa usa ka maayo nga pagkahan-ay nga proseso sa pag-uswag, ang tanan sa team nahibal-an kung kinsa ang nagbuhat kung unsa. Sa tinuud, kasagaran dili kini ang kaso, busa, kung nag-andam ka mga pagbag-o sa istruktura sa database isip bahin sa imong buluhaton, gisugyot nga dugang nga ipahibalo ang tibuuk nga grupo bahin niini. Kung adunay usa nga nagbag-o nga parehas, kinahanglan nimo nga organisahon pag-ayo. Angayan nga makigsulti sa mga kauban pagkahuman sa trabaho, dili lang sa pagsugod. Daghang potensyal nga mga problema sa mga changeset mahimong masulbad sa yugto sa pagsusi sa code.

7. Hunahunaa ang imong gibuhat!

Morag klaro kini sa kaugalingon nga tambag nga magamit sa bisan unsang kahimtang. Bisan pa, daghang mga problema ang malikayan kung gisusi pag-usab sa developer kung unsa ang iyang gibuhat ug kung unsa ang maapektuhan niini. Ang pagtrabaho kauban ang mga paglalin kanunay nanginahanglan dugang nga atensyon ug katukma.

Tigum

Atong tan-awon karon ang kasagaran nga mga lit-ag nga mahimo nimong mahulog kung dili nimo sundon ang tambag sa ibabaw, ug unsa, eksakto, ang kinahanglan nimong buhaton?

Sitwasyon 1: Duha ka mga developer ang naningkamot sa pagdugang sa bag-ong mga changeset sa samang higayon

Giunsa nga dili pusilon ang imong kaugalingon sa tiil gamit ang Liquibase
Gusto ni Vasya ug Petya nga maghimo usa ka changeset nga bersyon 4, nga wala nahibal-an bahin sa usag usa. Naghimo sila mga pagbag-o sa istruktura sa database ug nag-isyu sa usa ka hangyo sa pagbitad nga adunay lainlaing mga file sa changeset. Ang mosunod nga mekanismo sa aksyon gisugyot:

Unsaon pagdesisyon

  1. Sa usa ka paagi, ang mga kauban kinahanglan magkauyon sa pagkasunud-sunod kung diin kinahanglan moadto ang ilang mga pagbag-o, pananglitan, kinahanglan una nga i-apply ang Petin.
  2. Kinahanglan nga adunay usa nga magdugang sa ikaduha sa ilang kaugalingon ug markahan ang changeset ni Vasya nga adunay bersyon 5. Mahimo kini pinaagi sa Cherry Pick o usa ka hapsay nga paghiusa.
  3. Pagkahuman sa mga pagbag-o, kinahanglan nimo nga susihon ang kabalido sa mga aksyon nga gihimo.
    Sa tinuud, ang mga mekanismo sa Liquibase magtugot kanimo nga adunay duha ka bersyon 4 nga mga pagbag-o sa repositoryo, aron mahimo nimong biyaan ang tanan nga ingon. Kana mao, aduna ka'y ​​duha ka kausaban sa bersyon 4 nga adunay lain-laing mga ngalan. Uban niini nga pamaagi, kini sa ulahi nahimong lisud kaayo sa pag-navigate sa mga bersyon sa database.

Dugang pa, ang Liquibase, sama sa pinuy-anan sa mga hobbit, nagtipig daghang mga sekreto. Ang usa niini mao ang validCheckSum key, nga nagpakita sa bersyon 1.7 ug nagtugot kanimo sa pagtino sa usa ka balido nga hash value alang sa usa ka piho nga changeset, bisan unsa pa ang gitipigan sa database. Dokumentasyon https://www.liquibase.org/documentation/changeset.html nag-ingon ang mosunod:

Pagdugang og checksum nga giisip nga balido alang niini nga changeSet, bisan unsa pa ang gitipigan sa database. Gigamit sa panguna kung kinahanglan nimo nga usbon ang usa ka changeSet ug dili gusto ang mga sayup nga ihulog sa mga database diin kini nakadagan na (dili girekomenda nga pamaagi)

Oo, oo, kini nga pamaagi wala girekomenda. Apan usahay ang usa ka lig-on nga salamangkero sa kahayag hawod usab sa ngitngit nga mga teknik

Sitwasyon 2: Paglalin nga nagdepende sa datos

Giunsa nga dili pusilon ang imong kaugalingon sa tiil gamit ang Liquibase

Ibutang ta nga wala kay abilidad sa paggamit sa mga backup sa database gikan sa mga live server. Naghimo si Petya og changeset, gisulayan kini sa lokal ug, uban ang bug-os nga pagsalig nga husto siya, naghimo usa ka hangyo sa pagbitad sa developer. Sa kaso lang, giklaro sa pangulo sa proyekto kung gisusi ba kini ni Petya, ug gidugang kini. Apan ang pag-deploy sa development server nahulog.

Sa pagkatinuod, kini posible, ug walay usa nga dili makalikay niini. Mahitabo kini kung ang mga pagbag-o sa istruktura sa lamesa sa usa ka paagi nahigot sa piho nga datos gikan sa database. Dayag nga, kung ang database ni Petya napuno lamang sa mga datos sa pagsulay, nan kini mahimong dili maglakip sa tanan nga mga kaso sa problema. Pananglitan, kung gitangtang ang usa ka lamesa, kini nahimo nga adunay mga rekord sa ubang mga lamesa pinaagi sa Foreign Key nga adunay kalabotan sa mga rekord sa usa nga gitangtang. O kung gibag-o ang usa ka tipo sa kolum, nahimo nga dili 100% sa datos ang mahimong mabag-o sa bag-ong tipo.

Unsaon pagdesisyon

  • Pagsulat ug espesyal nga mga script nga gamiton kausa uban sa paglalin ug dad-a ang datos sa hustong porma. Kini usa ka kinatibuk-ang paagi aron masulbad ang problema sa pagbalhin sa datos ngadto sa bag-ong mga istruktura pagkahuman sa pag-apply sa mga paglalin, apan ang usa ka butang nga susama mahimong magamit kaniadto, sa mga espesyal nga kaso. Kini nga dalan, siyempre, dili kanunay magamit, tungod kay ang pag-edit sa datos sa mga live server mahimong peligroso ug makadaot pa.
  • Ang laing lisud nga paagi mao ang pag-edit sa kasamtangan nga changeset. Ang kalisud mao nga ang tanan nga mga database diin kini na-apply sa iyang kasamtangan nga porma kinahanglan nga ibalik. Posible nga ang tibuok backend team mapugos sa lokal nga pag-roll out sa database gikan sa wala.
  • Ug ang labing unibersal nga paagi mao ang pagbalhin sa problema sa datos sa palibot sa developer, paghimo pag-usab sa parehas nga kahimtang ug pagdugang usa ka bag-ong set sa pagbag-o, sa nabuak, nga makalikay sa problema.
    Giunsa nga dili pusilon ang imong kaugalingon sa tiil gamit ang Liquibase

Sa kinatibuk-an, ang labi nga ang database parehas sa komposisyon sa database sa produksiyon sa server, ang gamay nga higayon nga ang mga problema sa mga paglalin moadto sa layo. Ug, siyempre, sa dili ka pa magpadala usa ka changeset sa repository, kinahanglan nimo nga hunahunaon daghang beses kung kini makaguba sa bisan unsang butang.

Sitwasyon 3. Ang Liquibase nagsugod sa paggamit human kini maprodyus

Ibutang ta nga gihangyo sa team lead si Petya nga iapil ang Liquibase sa proyekto, apan ang proyekto anaa na sa produksyon ug adunay kasamtangan nga database structure.

Tungod niini, ang problema mao nga sa bisan unsang bag-ong mga server o mga makina sa developer, kini nga mga lamesa kinahanglan nga himuon pag-usab gikan sa wala, ug ang naglungtad nga palibot kinahanglan magpabilin sa usa ka makanunayon nga kahimtang, andam nga modawat sa mga bag-ong mga pagbag-o.

Unsaon pagdesisyon

Adunay usab daghang mga paagi:

  • Ang una ug labing klaro mao ang pagbaton og usa ka bulag nga script nga kinahanglan gamiton sa mano-mano sa pagsugod sa usa ka bag-ong palibot.
  • Ang ikaduha dili kaayo klaro, adunay Liquibase migration nga naa sa lain nga Liquibase Context, ug i-apply kini. Mahimo nimong mabasa ang dugang bahin sa Konteksto sa Liquibase dinhi: https://www.liquibase.org/documentation/contexts.html. Sa kinatibuk-an, kini usa ka makapaikag nga mekanismo nga mahimong malampuson nga magamit, pananglitan, alang sa pagsulay.
  • Ang ikatulo nga dalan naglangkob sa pipila ka mga lakang. Una, kinahanglan nga maghimo usa ka paglalin alang sa mga naa na nga mga lamesa. Unya kini kinahanglan nga magamit sa pipila ka palibot ug sa ingon ang hash sum makuha. Ang sunod nga lakang mao ang pagsugod sa walay sulod nga mga lamesa sa Liquibase sa among dili walay sulod nga server, ug sa lamesa nga adunay kasaysayan sa paggamit sa mga changeset, mahimo nimo nga mano-mano ang pagbutang sa usa ka rekord mahitungod sa "ingon nga gipadapat" nga changeset nga adunay mga kausaban nga anaa na sa database . Busa, sa usa ka kasamtangan nga server, ang kasaysayan countdown magsugod gikan sa bersyon 2, ug ang tanan nga mga bag-o nga mga palibot maggawi parehas.
    Giunsa nga dili pusilon ang imong kaugalingon sa tiil gamit ang Liquibase

Sitwasyon 4. Ang mga paglalin nahimong dako ug walay panahon sa pagkompleto

Sa sinugdanan sa pag-uswag sa serbisyo, ingon nga usa ka lagda, ang Liquibase gigamit ingon nga usa ka eksternal nga pagsalig, ug ang tanan nga mga paglalin giproseso kung ang aplikasyon magsugod. Bisan pa, sa paglabay sa panahon, mahimo kang mapandol sa mosunod nga mga kaso:

  • Ang mga paglalin nahimong dako ug dugay nga mahuman.
  • Adunay panginahanglan alang sa paglalin sa gipang-apod-apod nga mga palibot, pananglitan, sa daghang mga database server nga dungan.
    Sa kini nga kaso, ang pag-apply sa mga paglalin sa dugay nga panahon moresulta sa usa ka timeout kung magsugod ang aplikasyon. Dugang pa, ang pag-apply sa mga paglalin sa matag instance sa aplikasyon nga gilain mahimong moresulta sa lainlaing mga server nga wala ma-sync.

Unsaon pagdesisyon

Sa ingon nga mga kaso, ang imong proyekto dako na, tingali bisan usa ka hamtong, ug ang Liquibase nagsugod sa paglihok isip usa ka bulag nga himan sa gawas. Ang tinuod mao nga ang Liquibase isip usa ka librarya gihugpong ngadto sa usa ka jar file, ug mahimong magtrabaho isip dependency sulod sa usa ka proyekto o independente.

Sa standalone mode, mahimo nimong ibilin ang pagpatuman sa mga paglalin sa imong CI/CD nga palibot o sa lig-on nga mga abaga sa imong mga administrador sa sistema ug mga espesyalista sa pagdeploy. Aron mahimo kini kinahanglan nimo ang Liquibase command line https://www.liquibase.org/documentation/command_line.html. Sa kini nga mode, mahimo’g posible nga ilunsad ang aplikasyon pagkahuman nahimo ang tanan nga kinahanglan nga paglalin.

konklusyon

Sa tinuud, mahimo’g adunay daghang mga lit-ag sa pagtrabaho sa mga paglalin sa database, ug kadaghanan niini nanginahanglan usa ka mamugnaon nga pamaagi. Importante nga masabtan nga kon imong gamiton ang himan sa husto, kadaghanan niini nga mga lit-ag mahimong malikayan. Sa piho, kinahanglan nakong atubangon ang tanan nga nalista nga mga problema sa lain-laing mga porma, ug ang uban niini resulta sa akong mga sayop. Kasagaran kini mahitabo, siyempre, tungod sa kawalay pagtagad, apan usahay tungod sa kriminal nga kawalay katakus sa paggamit sa himan.

Source: www.habr.com

Idugang sa usa ka comment