Jinsi ya kuepuka kujipiga risasi kwenye mguu kwa kutumia Liquibase

Haijawahi kutokea hapo awali, na hapa tunaenda tena!

Katika mradi wetu uliofuata, tuliamua kutumia Liquibase tangu mwanzo ili kuepuka matatizo katika siku zijazo. Kama inavyotokea, sio washiriki wote wa timu ya vijana wanajua jinsi ya kuitumia kwa usahihi. Nilifanya warsha ya ndani, ambayo niliamua kugeuka kuwa makala.

Nakala hiyo inajumuisha vidokezo muhimu na maelezo ya mitego mitatu dhahiri zaidi ambayo unaweza kuangukia unapofanya kazi na zana za uhamiaji za hifadhidata, haswa Liquibase. Iliyoundwa kwa ajili ya wasanidi programu wa Java katika viwango vya Vijana na vya Kati; kwa wasanidi walio na uzoefu zaidi inaweza kuwa ya manufaa kwa kuunda na kurudia kile ambacho kuna uwezekano kuwa tayari kinajulikana.

Jinsi ya kuepuka kujipiga risasi kwenye mguu kwa kutumia Liquibase

Liquibase na Flyway ndizo teknolojia kuu zinazoshindana za kutatua matatizo ya udhibiti wa matoleo ya miundo ya uhusiano katika ulimwengu wa Java. Ya kwanza ni bure kabisa, kwa mazoezi huchaguliwa mara nyingi kwa matumizi, ndiyo sababu Liquibase alichaguliwa kama shujaa wa uchapishaji. Walakini, baadhi ya mazoea yaliyoelezewa yanaweza kuwa ya ulimwengu wote, kulingana na usanifu wa programu yako.

Uhamaji wa miundo ya uhusiano ni njia ya kulazimishwa ya kukabiliana na unyumbufu dhaifu wa hifadhi za data za uhusiano. Katika enzi ya mtindo wa OOP, mtindo wa kufanya kazi na hifadhidata ulimaanisha kwamba tutaelezea schema mara moja na sio kuigusa tena. Lakini ukweli daima ni kwamba mambo hubadilika, na mabadiliko ya muundo wa meza yanahitajika mara nyingi kabisa. Kwa kawaida, mchakato yenyewe unaweza kuwa chungu na usio na furaha.

Sitaingia ndani zaidi katika maelezo ya teknolojia na maagizo ya kuongeza maktaba kwenye mradi wako; nakala kadhaa zimeandikwa juu ya mada hii:

Kwa kuongezea, tayari kulikuwa na nakala bora juu ya mada ya vidokezo muhimu:

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹

Ninataka kushiriki ushauri wangu na maoni, ambayo yalizaliwa kwa njia ya jasho, damu na maumivu ya kutatua matatizo na uhamiaji.

1. Kabla ya kuanza kazi, unapaswa kujijulisha na sehemu ya mbinu bora zaidi Online Liquibase

Huko mambo rahisi lakini muhimu sana yanaelezwa, bila ambayo kutumia maktaba kunaweza kutatiza maisha yako. Kwa mfano, mbinu isiyo na muundo ya kudhibiti vibadilishaji hivi karibuni itasababisha kuchanganyikiwa na uhamaji uliovunjika. Usipotoa mabadiliko yanayotegemeana kwa muundo wa hifadhidata na mantiki ya huduma kwa wakati mmoja, kuna uwezekano mkubwa kwamba hii itasababisha majaribio nyekundu au mazingira yaliyovunjika. Kwa kuongeza, mapendekezo ya kutumia Liquibase kwenye tovuti rasmi yana kifungu kuhusu maendeleo na majaribio ya hati za kurejesha pamoja na hati kuu za uhamiaji. Naam, katika makala https://habr.com/ru/post/178665/ Kuna mifano ya msimbo kuhusu uhamiaji na utaratibu wa kurejesha.

2. Ukianza kutumia zana za uhamiaji, usiruhusu masahihisho ya mwongozo katika muundo wa hifadhidata

Kama msemo unavyosema: "Mara moja Persil, daima Persil." Ikiwa msingi wa programu yako utaanza kusimamiwa na Liquibase, mabadiliko yoyote ya mwongozo mara moja husababisha hali ya kutofautiana, na kiwango cha uaminifu katika mabadiliko huwa sufuri. Hatari zinazowezekana ni pamoja na saa kadhaa zilizotumiwa kurejesha hifadhidata; katika hali mbaya zaidi, seva iliyokufa. Ikiwa una Msanifu wa DBA wa "shule ya zamani" kwenye timu yako, mweleze kwa subira na kwa uangalifu jinsi mambo yatakavyokuwa mabaya ikiwa atahariri tu hifadhidata kulingana na ufahamu wake mwenyewe kutoka kwa Msanidi wa SQL mwenye masharti.

3. Ikiwa kibadilishaji tayari kimesukumwa kwenye hifadhi, epuka kuhariri

Ikiwa msanidi programu mwingine alivuta na kutumia kibadilishaji, ambacho kitahaririwa baadaye, hakika atakukumbuka kwa neno la fadhili wakati anapokea hitilafu wakati wa kuanzisha programu. Ikiwa kuhariri kibadilishaji kwa njia fulani kutavuja katika ukuzaji, itabidi ufuate mteremko unaoteleza wa hotfixes. Kiini cha tatizo kinategemea uthibitishaji wa mabadiliko kwa jumla ya hash - utaratibu kuu wa Liquibase. Wakati wa kuhariri msimbo wa mabadiliko, kiasi cha heshi hubadilika. Kuhariri mabadiliko kunawezekana tu wakati inawezekana kupeleka hifadhidata yote kutoka mwanzo bila kupoteza data. Katika kesi hii, kurekebisha tena msimbo wa SQL au XML kunaweza, kinyume chake, kurahisisha maisha na kufanya uhamiaji kusomeka zaidi. Mfano unaweza kuwa hali ambapo, mwanzoni mwa maombi, schema ya hifadhidata ya chanzo ilikubaliwa ndani ya timu.

4. Kuwa na hifadhidata zilizothibitishwa ikiwezekana

Hapa, nadhani, kila kitu ni wazi. Ikiwa ghafla uhamiaji haukufanikiwa, kila kitu kinaweza kurudishwa. Liquibase ina zana ya kurudisha nyuma mabadiliko, lakini hati za kurudisha nyuma pia zimeandikwa na msanidi programu mwenyewe, na zinaweza kuwa na shida na uwezekano sawa na hati za kibadilishaji kikuu. Hii inamaanisha kuwa ni muhimu kuicheza salama na chelezo kwa hali yoyote.

5. Tumia chelezo za hifadhidata zilizothibitishwa katika ukuzaji, ikiwezekana

Ikiwa hii haipingani na mikataba na faragha, hakuna data ya kibinafsi kwenye hifadhidata, na haina uzito wa jua mbili - kabla ya kuitumia kwenye seva za uhamiaji wa moja kwa moja, unaweza kuangalia jinsi itafanya kazi kwenye mashine ya msanidi programu na kuhesabu. karibu 100% ya matatizo yanayowezekana wakati wa uhamiaji.

6. Wasiliana na watengenezaji wengine kwenye timu

Katika mchakato wa maendeleo uliopangwa vizuri, kila mtu kwenye timu anajua ni nani anafanya nini. Kwa kweli, hii sio kawaida, kwa hivyo, ikiwa unatayarisha mabadiliko kwenye muundo wa hifadhidata kama sehemu ya kazi yako, inashauriwa kuarifu timu nzima juu ya hili. Ikiwa mtu anafanya mabadiliko kwa sambamba, unapaswa kuandaa kwa makini. Inastahili kuwasiliana na wenzake baada ya kumaliza kazi, sio tu mwanzoni. Matatizo mengi yanayoweza kutokea na mabadiliko yanaweza kutatuliwa katika hatua ya ukaguzi wa kanuni.

7. Fikiri juu ya kile unachofanya!

Inaweza kuonekana kama ushauri unaojidhihirisha ambao unatumika kwa hali yoyote. Walakini, shida nyingi zingeweza kuepukwa ikiwa msanidi programu angechanganua tena kile alichokuwa akifanya na kile ambacho kingeweza kuathiri. Kufanya kazi na uhamiaji daima kunahitaji tahadhari ya ziada na usahihi.

Mitego

Hebu sasa tuangalie mitego ya kawaida ambayo unaweza kuanguka ikiwa hutafuata ushauri hapo juu, na nini, hasa, unapaswa kufanya?

Hali ya 1: Wasanidi programu wawili wanajaribu kuongeza mabadiliko mapya kwa wakati mmoja

Jinsi ya kuepuka kujipiga risasi kwenye mguu kwa kutumia Liquibase
Vasya na Petya wanataka kuunda toleo la 4 la mabadiliko, bila kujua kuhusu kila mmoja. Walifanya mabadiliko kwa muundo wa hifadhidata na wakatoa ombi la kuvuta na faili tofauti za mabadiliko. Utaratibu ufuatao wa hatua unapendekezwa:

Jinsi ya kuamua

  1. Kwa namna fulani, wenzake wanapaswa kukubaliana juu ya utaratibu ambao mabadiliko yao yanapaswa kwenda, kwa mfano, Petin inapaswa kutumika kwanza.
  2. Mtu anapaswa kujiongezea ya pili na kuweka alama kwenye kibadilishaji cha Vasya na toleo la 5. Hii inaweza kufanywa kupitia Cherry Pick au unganisho safi.
  3. Baada ya mabadiliko, hakika unapaswa kuangalia uhalali wa hatua zilizochukuliwa.
    Kwa kweli, mifumo ya Liquibase itakuruhusu kuwa na mabadiliko ya toleo la 4 kwenye ghala, kwa hivyo unaweza kuacha kila kitu kama kilivyo. Hiyo ni, utakuwa na mabadiliko mawili kwa toleo la 4 na majina tofauti. Kwa mbinu hii, baadaye inakuwa vigumu sana kuabiri matoleo ya hifadhidata.

Kwa kuongezea, Liquibase, kama nyumba ya hobbits, huhifadhi siri nyingi. Mmoja wao ni ufunguo halali waCheckSum, ambao ulionekana katika toleo la 1.7 na hukuruhusu kutaja thamani halali ya hashi kwa kibadilishaji maalum, bila kujali ni nini kilichohifadhiwa kwenye hifadhidata. Nyaraka https://www.liquibase.org/documentation/changeset.html anasema yafuatayo:

Ongeza hundi ambayo inachukuliwa kuwa halali kwa Seti hii ya mabadiliko, bila kujali ni nini kimehifadhiwa kwenye hifadhidata. Hutumika hasa wakati unahitaji kubadilishaSetSet na hutaki makosa kutupwa kwenye hifadhidata ambayo tayari imeendesha (sio utaratibu unaopendekezwa)

Ndiyo, ndiyo, utaratibu huu haupendekezi. Lakini wakati mwingine mchawi mkali wa mwanga pia ana ujuzi wa mbinu za giza

Hali ya 2: Uhamiaji ambao unategemea data

Jinsi ya kuepuka kujipiga risasi kwenye mguu kwa kutumia Liquibase

Wacha tufikirie kuwa huna uwezo wa kutumia hifadhidata kutoka kwa seva za moja kwa moja. Petya aliunda kibadilishaji, akajaribu ndani ya nchi na, kwa ujasiri kamili kwamba alikuwa sahihi, alitoa ombi la kuvuta kwa msanidi programu. Iwapo tu, kiongozi wa mradi alifafanua ikiwa Petya alikuwa ameikagua, na kisha akaiongeza. Lakini uwekaji kwenye seva ya ukuzaji ulipungua.

Kwa kweli, hii inawezekana, na hakuna mtu aliye na kinga kutoka kwa hili. Hii hutokea ikiwa marekebisho ya muundo wa jedwali yanahusishwa kwa namna fulani na data maalum kutoka kwa hifadhidata. Kwa wazi, ikiwa hifadhidata ya Petya imejaa data ya majaribio tu, basi haiwezi kufunika kesi zote za shida. Kwa mfano, wakati wa kufuta meza, inageuka kuwa kuna rekodi katika meza zingine na Ufunguo wa Kigeni ambazo zinahusiana na rekodi katika ile inayofutwa. Au wakati wa kubadilisha aina ya safu, zinageuka kuwa si 100% ya data inaweza kubadilishwa kwa aina mpya.

Jinsi ya kuamua

  • Andika maandishi maalum ambayo yatatumika mara moja pamoja na uhamishaji na ulete data katika fomu inayofaa. Hii ni njia ya jumla ya kutatua tatizo la kuhamisha data kwa miundo mpya baada ya kutumia uhamiaji, lakini kitu kama hicho kinaweza kutumika hapo awali, katika hali maalum. Njia hii, bila shaka, haipatikani kila wakati, kwa sababu data ya kuhariri kwenye seva za kuishi inaweza kuwa hatari na hata kuharibu.
  • Njia nyingine ngumu ni kuhariri kibadilishaji kilichopo. Ugumu ni kwamba hifadhidata zote ambazo tayari zimetumika katika fomu yake iliyopo italazimika kurejeshwa. Inawezekana kabisa kwamba timu nzima ya nyuma italazimika kusambaza hifadhidata ndani ya nchi kutoka mwanzo.
  • Na njia ya ulimwengu wote ni kuhamisha shida na data kwa mazingira ya msanidi programu, kuunda tena hali sawa na kuongeza kibadilishaji kipya, kwa ile iliyovunjika, ambayo itaepuka shida.
    Jinsi ya kuepuka kujipiga risasi kwenye mguu kwa kutumia Liquibase

Kwa ujumla, kadiri hifadhidata inavyofanana katika muundo wa hifadhidata ya seva ya uzalishaji, ndivyo uwezekano mdogo wa matatizo na uhamiaji kwenda mbali. Na, kwa kweli, kabla ya kutuma kibadilishaji kwenye hazina, unapaswa kufikiria mara kadhaa ikiwa itavunja chochote.

Hali 3. Liquibase huanza kutumika baada ya kuingia katika uzalishaji

Tuseme kiongozi wa timu aliuliza Petya kujumuisha Liquibase katika mradi huo, lakini mradi tayari uko katika uzalishaji na kuna muundo wa hifadhidata uliopo.

Ipasavyo, shida ni kwamba kwenye seva mpya au mashine za wasanidi programu, meza hizi lazima ziundwe upya kutoka mwanzo, na mazingira yaliyopo lazima yabaki katika hali thabiti, tayari kukubali mabadiliko mapya.

Jinsi ya kuamua

Pia kuna njia kadhaa:

  • Ya kwanza na dhahiri zaidi ni kuwa na hati tofauti ambayo lazima itumike kwa mikono wakati wa kuanzisha mazingira mapya.
  • Ya pili ni dhahiri kidogo, kuwa na uhamiaji wa Liquibase ambao uko katika Muktadha mwingine wa Liquibase, na uitumie. Unaweza kusoma zaidi juu ya Muktadha wa Liquibase hapa: https://www.liquibase.org/documentation/contexts.html. Kwa ujumla, hii ni utaratibu wa kuvutia ambao unaweza kutumika kwa mafanikio, kwa mfano, kwa kupima.
  • Njia ya tatu ina hatua kadhaa. Kwanza, uhamiaji lazima uundwe kwa meza zilizopo. Kisha lazima itumike kwa mazingira fulani na kwa hivyo jumla yake ya hashi itapatikana. Hatua inayofuata ni kuanzisha jedwali tupu za Liquibase kwenye seva yetu isiyo tupu, na katika jedwali lenye historia ya utumiaji wa vibadilishaji, unaweza kuweka rekodi mwenyewe kuhusu kibadilishaji cha "kama kinatumika" na mabadiliko ambayo tayari yapo kwenye hifadhidata. . Kwa hivyo, kwenye seva iliyopo, muda wa kuhesabu historia utaanza kutoka toleo la 2, na mazingira yote mapya yatatenda sawa.
    Jinsi ya kuepuka kujipiga risasi kwenye mguu kwa kutumia Liquibase

Hali 4. Uhamiaji unakuwa mkubwa na hawana muda wa kukamilisha

Mwanzoni mwa ukuzaji wa huduma, kama sheria, Liquibase hutumiwa kama utegemezi wa nje, na uhamiaji wote unashughulikiwa wakati programu inapoanza. Walakini, baada ya muda, unaweza kujikwaa katika kesi zifuatazo:

  • Uhamiaji unakuwa mkubwa na huchukua muda mrefu kukamilika.
  • Kuna haja ya uhamiaji katika mazingira yaliyosambazwa, kwa mfano, kwenye matukio kadhaa ya seva ya hifadhidata kwa wakati mmoja.
    Katika kesi hii, kutumia uhamishaji kwa muda mrefu sana kutasababisha kuisha wakati programu itaanza. Zaidi ya hayo, kutumia uhamishaji kwa kila tukio la programu kando kunaweza kusababisha seva tofauti kukosa kusawazishwa.

Jinsi ya kuamua

Katika hali kama hizi, mradi wako tayari ni mkubwa, labda hata mtu mzima, na Liquibase huanza kufanya kama zana tofauti ya nje. Ukweli ni kwamba Liquibase kama maktaba imeundwa kuwa faili ya jar, na inaweza kufanya kazi kama tegemezi ndani ya mradi au kwa kujitegemea.

Katika hali ya pekee, unaweza kuacha utekelezaji wa uhamishaji kwenye mazingira yako ya CI/CD au kwa mabega thabiti ya wasimamizi wa mfumo wako na wataalamu wa uwekaji. Ili kufanya hivyo, utahitaji mstari wa amri ya Liquibase https://www.liquibase.org/documentation/command_line.html. Katika hali hii, inawezekana kuzindua programu baada ya uhamiaji wote muhimu kufanywa.

Pato

Kwa kweli, kunaweza kuwa na mitego mingi zaidi wakati wa kufanya kazi na uhamishaji wa hifadhidata, na nyingi zinahitaji mbinu ya ubunifu. Ni muhimu kuelewa kwamba ikiwa unatumia chombo kwa usahihi, wengi wa vikwazo hivi vinaweza kuepukwa. Hasa, ilibidi nishughulikie matatizo yote yaliyoorodheshwa kwa njia tofauti, na baadhi yao yalikuwa matokeo ya makosa yangu. Mara nyingi hii hufanyika, kwa kweli, kwa sababu ya kutojali, lakini wakati mwingine kwa sababu ya kutokuwa na uwezo wa jinai kutumia zana.

Chanzo: mapenzi.com

Kuongeza maoni