Kif tevita li tispara lilek innifsek fis-sieq billi tuża Liquibase

Qatt ma ġara qabel, u hawn nerġgħu!

Fuq il-proġett li jmiss tagħna, iddeċidejna li nużaw Liquibase mill-bidu nett biex nevitaw problemi fil-futur. Kif jirriżulta, mhux il-membri żgħażagħ kollha tat-tim jafu kif jużawh b'mod korrett. Jien għamilt workshop intern, li mbagħad iddeċidejt li nbiddel f'artiklu.

L-artiklu jinkludi pariri utli u deskrizzjoni tat-tliet in-nases l-aktar ovvji li tista’ taqa’ fihom meta taħdem ma’ għodod ta’ migrazzjoni ta’ database relazzjonali, b’mod partikolari Liquibase. Iddisinjat għal żviluppaturi Java fil-livelli Junior u Nofsani; għal żviluppaturi aktar esperjenzati jista 'jkun ta' interess għall-istrutturar u r-repetizzjoni ta 'dak li x'aktarx huwa diġà magħruf.

Kif tevita li tispara lilek innifsek fis-sieq billi tuża Liquibase

Liquibase u Flyway huma t-teknoloġiji ewlenin li jikkompetu biex isolvu problemi ta 'kontroll tal-verżjoni ta' strutturi relazzjonali fid-dinja Java. L-ewwel wieħed huwa kompletament ħieles, fil-prattika huwa l-aktar spiss magħżul għall-użu, u huwa għalhekk li Liquibase intgħażlet bħala l-eroj tal-pubblikazzjoni. Madankollu, xi wħud mill-prattiki deskritti jistgħu jkunu universali, skont l-arkitettura tal-applikazzjoni tiegħek.

Migrazzjonijiet ta' strutturi relazzjonali huma mod sfurzat biex tittratta l-flessibbiltà dgħajfa tal-ħwienet tad-dejta relazzjonali. Fl-era tal-moda OOP, l-istil ta 'ħidma ma' databases kien ifisser li aħna se niddeskrivu l-iskema darba u ma nerġgħu nmissuha. Iżda r-realtà hija dejjem li l-affarijiet jinbidlu, u bidliet fl-istruttura tal-mejda huma meħtieġa spiss. Naturalment, il-proċess innifsu jista 'jkun bl-uġigħ u spjaċevoli.

Mhux se nidħol aktar fil-fond fid-deskrizzjoni tat-teknoloġija u l-istruzzjonijiet biex iżżid librerija mal-proġett tiegħek; inkitbu pjuttost ftit artikli dwar dan is-suġġett:

Barra minn hekk, diġà kien hemm artiklu eċċellenti dwar is-suġġett ta 'pariri utli:

Советы

Irrid naqsam il-pariri u l-kummenti tiegħi, li twieldu permezz tal-għaraq, id-demm u l-uġigħ tas-soluzzjoni tal-problemi bil-migrazzjoni.

1. Qabel ma tibda x-xogħol, għandek tiffamiljarizza ruħek mat-taqsima tal-aħjar prattiki fuq Online Liquibase

Hemm affarijiet sempliċi iżda importanti ħafna huma deskritti, li mingħajrhom l-użu tal-librerija jista 'jikkomplika ħajtek. Pereżempju, approċċ mhux strutturat għall-ġestjoni ta' settijiet ta' tibdil illum jew għada se jwassal għal konfużjoni u migrazzjonijiet miksura. Jekk ma tintroduċix bidliet reċiprokament dipendenti fl-istruttura tad-database u l-loġika tas-servizz fl-istess ħin, hemm probabbiltà kbira li dan iwassal għal testijiet ħomor jew ambjent imkisser. Barra minn hekk, ir-rakkomandazzjonijiet għall-użu ta' Liquibase fuq il-websajt uffiċjali fihom klawżola dwar l-iżvilupp u l-ittestjar ta' skripts ta' rollback flimkien mal-iskripts ewlenin tal-migrazzjoni. Ukoll, fl-artiklu https://habr.com/ru/post/178665/ Hemm eżempji ta' kodiċi dwar migrazzjonijiet u l-mekkaniżmu ta' rollback.

2. Jekk tibda tuża għodod ta 'migrazzjoni, tħallix korrezzjonijiet manwali fl-istruttura tad-database

Kif jgħid il-qawl: “Ladarba Persil, dejjem Persil.” Jekk il-bażi tal-applikazzjoni tiegħek tibda tiġi ġestita minn Liquibase, kwalunkwe tibdil manwali immedjatament iwassal għal stat inkonsistenti, u l-livell ta 'fiduċja fis-setts tal-bidliet isir żero. Ir-riskji potenzjali jinkludu bosta sigħat li ntefqu r-restawr tad-database; fl-agħar xenarju, server mejjet. Jekk għandek Perit DBA "skola l-qadima" fit-tim tiegħek, b'paċenzja u bil-ħsieb spjega lilu kemm se jkunu l-affarijiet ħżiena jekk sempliċement jeditja d-database skont il-fehim tiegħu stess minn Żviluppatur SQL kondizzjonali.

3. Jekk il-changeset diġà ġie mbuttat fir-repożitorju, evita l-editjar

Jekk żviluppatur ieħor għamel ġibda u applika sett ta' tibdil, li aktar tard jiġi editjat, żgur jiftakarek b'kelma tajba meta jirċievi żball meta jibda l-applikazzjoni. Jekk l-editjar tal-changeset b'xi mod joħroġ fl-iżvilupp, ser ikollok issegwi l-inklinazzjoni tiżloq ta 'hotfixes. L-essenza tal-problema tistrieħ fuq il-validazzjoni tal-bidliet b'somma hash - il-mekkaniżmu ewlieni ta 'Liquibase. Meta teditja l-kodiċi changeset, l-ammont tal-hash jinbidel. L-editjar tas-settijiet tal-bidliet huwa possibbli biss meta jkun possibbli li d-database kollha tiġi skjerata mill-bidu mingħajr ma tintilef id-dejta. F'dan il-każ, ir-refactoring tal-kodiċi SQL jew XML jista', għall-kuntrarju, jagħmel il-ħajja aktar faċli u jagħmel il-migrazzjoni aktar leġibbli. Eżempju jkun sitwazzjoni fejn, fil-bidu tal-applikazzjoni, l-iskema tad-database tas-sors ġiet miftiehma fi ħdan it-tim.

4. Ivverifika backups tad-database jekk possibbli

Hawnhekk, naħseb, kollox huwa ċar. Jekk f'daqqa waħda l-migrazzjoni ma rnexxietx, kollox jista 'jiġi rritornat lura. Liquibase għandha għodda biex tirreġġa' lura l-bidliet, iżda l-iskripts tar-rollback huma wkoll miktuba mill-iżviluppatur innifsu, u jista 'jkollhom problemi bl-istess probabbiltà bħall-iskripts tal-changeset prinċipali. Dan ifisser li huwa utli li tilgħab sikur b'backups fi kwalunkwe każ.

5. Uża backups tad-database ppruvati fl-iżvilupp, jekk possibbli

Jekk dan ma jikkontradixxix il-kuntratti u l-privatezza, m'hemm l-ebda data personali fid-database, u ma tiżen daqs żewġ suns - qabel ma tużaha fuq servers ta 'migrazzjoni ħajjin, tista' tiċċekkja kif se taħdem fuq il-magna tal-iżviluppatur u tikkalkula kważi 100% tal-problemi potenzjali matul il-migrazzjoni.

6. Ikkomunika ma 'żviluppaturi oħra fit-tim

Fi proċess ta 'żvilupp organizzat tajjeb, kulħadd fit-tim jaf min qed jagħmel xiex. Fir-realtà, ħafna drabi dan ma jkunx il-każ, għalhekk, jekk qed tipprepara bidliet fl-istruttura tad-database bħala parti mill-kompitu tiegħek, huwa rakkomandabbli li tgħarraf ukoll lit-tim kollu dwar dan. Jekk xi ħadd qed jagħmel bidliet b'mod parallel, għandek torganizza bir-reqqa. Ta’ min jikkomunika mal-kollegi wara li jispiċċa x-xogħol, mhux biss fil-bidu. Ħafna problemi potenzjali bil-changesets jistgħu jiġu solvuti fl-istadju tar-reviżjoni tal-kodiċi.

7. Aħseb dwar dak li qed tagħmel!

Jidher parir evidenti minnu nnifsu li japplika għal kwalunkwe sitwazzjoni. Madankollu, ħafna problemi setgħu ġew evitati kieku l-iżviluppatur kien analizza għal darb'oħra dak li kien qed jagħmel u dak li jista 'jaffettwa. Il-ħidma mal-migrazzjoni dejjem teħtieġ attenzjoni u preċiżjoni addizzjonali.

Nases

Ejja issa nħarsu lejn in-nases tipiċi li tista' taqa' fihom jekk ma ssegwix il-parir ta' hawn fuq, u x'għandek tagħmel, eżattament?

Sitwazzjoni 1: Żewġ żviluppaturi qed jippruvaw iżidu tibdiliet ġodda fl-istess ħin

Kif tevita li tispara lilek innifsek fis-sieq billi tuża Liquibase
Vasya u Petya jridu joħolqu verżjoni changeset 4, mingħajr ma jkunu jafu dwar xulxin. Huma għamlu bidliet fl-istruttura tad-database u ħarġu pull request b'fajls ta 'changeset differenti. Il-mekkaniżmu ta' azzjoni li ġej huwa propost:

Kif issolvi

  1. B'xi mod, il-kollegi jridu jaqblu dwar l-ordni li fiha għandhom imorru l-changesets tagħhom, pereżempju, Petin għandu jiġi applikat l-ewwel.
  2. Xi ħadd għandu jżid it-tieni wieħed għalih innifsu u jimmarka l-changeset ta 'Vasya bil-verżjoni 5. Dan jista' jsir permezz ta 'Chery Pick jew taħlita pulita.
  3. Wara l-bidliet, għandek definittivament tiċċekkja l-validità tal-azzjonijiet meħuda.
    Fil-fatt, il-mekkaniżmi Liquibase se jippermettu li jkollok żewġ settijiet ta 'bidliet tal-verżjoni 4 fir-repożitorju, sabiex tkun tista' tħalli kollox kif inhu. Jiġifieri, inti sempliċiment ikollok żewġ bidliet għall-verżjoni 4 b'ismijiet differenti. B'dan l-approċċ, aktar tard isir diffiċli ħafna li wieħed jinnaviga l-verżjonijiet tad-database.

Barra minn hekk, Liquibase, bħad-dar tal-hobbits, iżomm ħafna sigrieti. Waħda minnhom hija ċ-ċavetta validCheckSum, li dehret fil-verżjoni 1.7 u tippermettilek tispeċifika valur hash validu għal changeset speċifiku, irrispettivament minn dak maħżun fid-database. Dokumentazzjoni https://www.liquibase.org/documentation/changeset.html jgħid dan li ġej:

Żid somma ta' kontroll li hija kkunsidrata valida għal dan is-Set ta' tibdil, irrispettivament minn dak li jkun maħżun fid-database. Użat primarjament meta jkollok bżonn tibdel changeSet u ma tridx li l-iżbalji jintefgħu fuq databases li fuqhom diġà ħadet (mhux proċedura rakkomandata)

Iva, iva, din il-proċedura mhix rakkomandata. Imma xi kultant magician dawl qawwi wkoll kaptani tekniki dlam

Sitwazzjoni 2: Migrazzjoni li tiddependi fuq id-dejta

Kif tevita li tispara lilek innifsek fis-sieq billi tuża Liquibase

Ejja nassumu li m'għandekx il-ħila li tuża backups tad-databases minn servers ħajjin. Petya ħoloq sett ta' tibdil, ittestjah lokalment u, b'kunfidenza sħiħa li kellu raġun, għamel talba ta' ġibda lill-iżviluppatur. Fil-każ, il-mexxej tal-proġett iċċara jekk Petya kienx iċċekkjaha, u mbagħad żiedha. Iżda l-iskjerament fuq is-server ta 'żvilupp waqa'.

Fil-fatt, dan huwa possibbli, u ħadd ma huwa immuni minn dan. Dan jiġri jekk modifiki fl-istruttura tat-tabella huma b'xi mod marbuta ma 'dejta speċifika mid-database. Ovvjament, jekk id-database ta 'Petya timtela biss b'dejta tat-test, allura tista' ma tkoprix il-każijiet problematiċi kollha. Pereżempju, meta tħassar tabella, jirriżulta li hemm rekords f'tabelli oħra minn Ċavetta Barranija li huma relatati ma 'rekords f'dik li qed titħassar. Jew meta tbiddel tip ta 'kolonna, jirriżulta li mhux 100% tad-dejta tista' tiġi kkonvertita għat-tip ġdid.

Kif issolvi

  • Ikteb skripts speċjali li se jintużaw darba flimkien mal-migrazzjoni u ġib id-dejta fil-forma xierqa. Dan huwa mod ġenerali biex issolvi l-problema tat-trasferiment tad-dejta għal strutturi ġodda wara l-applikazzjoni tal-migrazzjoni, iżda xi ħaġa simili tista 'tiġi applikata qabel, f'każijiet speċjali. Din it-triq, ovvjament, mhix dejjem disponibbli, minħabba li l-editjar tad-dejta fuq servers ħajjin jista 'jkun perikoluż u saħansitra distruttiv.
  • Mod diffiċli ieħor huwa li teditja sett ta' tibdil eżistenti. Id-diffikultà hija li d-databases kollha fejn diġà ġiet applikata fil-forma eżistenti tagħha se jkollhom jiġu restawrati. Huwa pjuttost possibbli li t-tim backend kollu jkun sfurzat li jxerred id-database lokalment mill-bidu.
  • U l-aktar mod universali huwa li tittrasferixxi l-problema bid-dejta għall-ambjent tal-iżviluppatur, terġa 'tiġi mill-ġdid l-istess sitwazzjoni u żżid sett ta' tibdil ġdid, ma 'dak miksur, li jevita l-problema.
    Kif tevita li tispara lilek innifsek fis-sieq billi tuża Liquibase

B'mod ġenerali, aktar ma d-database tkun simili fil-kompożizzjoni għad-database tas-server tal-produzzjoni, inqas ċans li l-problemi bil-migrazzjoni jmorru 'l bogħod. U, ovvjament, qabel ma tibgħat changeset lir-repożitorju, għandek taħseb diversi drabi jekk hux se jkisser xi ħaġa.

Sitwazzjoni 3. Liquibase jibda jintuża wara li jidħol fil-produzzjoni

Ejja ngħidu li l-mexxej tat-tim talab lil Petya biex jinkludi lil Liquibase fil-proġett, iżda l-proġett diġà qiegħed fil-produzzjoni u hemm struttura ta 'database eżistenti.

Għaldaqstant, il-problema hija li fuq kwalunkwe servers jew magni tal-iżviluppaturi ġodda, dawn it-tabelli għandhom jiġu rikreati mill-bidu, u l-ambjent eżistenti għandu jibqa 'fi stat konsistenti, lest biex jaċċetta settijiet ta' tibdil ġodda.

Kif issolvi

Hemm ukoll diversi modi:

  • L-ewwel u l-aktar ovvju huwa li jkun hemm skript separat li għandu jiġi applikat manwalment meta jinizjalizza ambjent ġdid.
  • It-tieni huwa inqas ovvju, ikollu migrazzjoni Liquibase li tkun f'Kuntest Liquibase ieħor, u applikaha. Tista' taqra aktar dwar Liquibase Context hawn: https://www.liquibase.org/documentation/contexts.html. B'mod ġenerali, dan huwa mekkaniżmu interessanti li jista 'jintuża b'suċċess, pereżempju, għall-ittestjar.
  • It-tielet triq tikkonsisti f'diversi passi. L-ewwel, trid tinħoloq migrazzjoni għat-tabelli eżistenti. Imbagħad trid tiġi applikata għal xi ambjent u b'hekk tinkiseb is-somma tal-hash tagħha. Il-pass li jmiss huwa li jinizjalizza tabelli Liquibase vojta fuq is-server mhux vojt tagħna, u fit-tabella bl-istorja tal-użu ta 'changesets, tista' tpoġġi manwalment rekord dwar is-changeset "bħallikieku applikat" b'bidliet diġà eżistenti fid-database. . Għalhekk, fuq server eżistenti, il-countdown tal-istorja se jibda mill-verżjoni 2, u l-ambjenti ġodda kollha se jġibu ruħhom b'mod identiku.
    Kif tevita li tispara lilek innifsek fis-sieq billi tuża Liquibase

Sitwazzjoni 4. Il-migrazzjonijiet isiru enormi u m'għandhomx ħin biex jitlestew

Fil-bidu tal-iżvilupp tas-servizz, bħala regola, Liquibase jintuża bħala dipendenza esterna, u l-migrazzjoni kollha jiġu pproċessati meta tibda l-applikazzjoni. Madankollu, maż-żmien, tista’ tfixkel il-każijiet li ġejjin:

  • Il-migrazzjonijiet isiru enormi u jieħdu ħafna żmien biex jitlestew.
  • Hemm bżonn ta' migrazzjoni f'ambjenti distribwiti, pereżempju, fuq diversi istanzi ta' server ta' database simultanjament.
    F'dan il-każ, l-applikazzjoni ta' migrazzjonijiet għal żmien twil wisq tirriżulta f'timeout meta tibda l-applikazzjoni. Barra minn hekk, l-applikazzjoni ta' migrazzjonijiet għal kull istanza ta' applikazzjoni separatament tista' tirriżulta f'servers differenti li ma jkunux sinkronizzati.

Kif issolvi

F'każijiet bħal dawn, il-proġett tiegħek huwa diġà kbir, forsi anke adult, u Liquibase jibda jaġixxi bħala għodda esterna separata. Il-fatt hu li Liquibase bħala librerija hija miġbura f'fajl vażett, u tista 'taħdem bħala dipendenza fi ħdan proġett jew b'mod indipendenti.

Fil-modalità waħedha, tista 'tħalli l-implimentazzjoni tal-migrazzjoni għall-ambjent CI/CD tiegħek jew fuq l-ispallejn b'saħħithom tal-amministraturi tas-sistema tiegħek u speċjalisti tal-iskjerament. Biex tagħmel dan ser ikollok bżonn il-linja tal-kmand Liquibase https://www.liquibase.org/documentation/command_line.html. F'dan il-mod, isir possibbli li titnieda l-applikazzjoni wara li jkunu twettqu l-migrazzjoni kollha meħtieġa.

Output

Fil-fatt, jista 'jkun hemm ħafna aktar nases meta taħdem ma' migrazzjonijiet ta 'database, u ħafna minnhom jeħtieġu approċċ kreattiv. Huwa importanti li tifhem li jekk tuża l-għodda b'mod korrett, ħafna minn dawn in-nases jistgħu jiġu evitati. Speċifikament, kelli nittratta l-problemi kollha elenkati f'forom differenti, u xi wħud minnhom kienu r-riżultat tal-iżbalji tiegħi. L-aktar dan jiġri, ovvjament, minħabba nuqqas ta 'attenzjoni, iżda xi drabi minħabba inabbiltà kriminali li tuża l-għodda.

Sors: www.habr.com

Żid kumment