Meriv çawa bi karanîna Liquibase xwe di lingê xwe de gulebaran neke

Berê qet carî nebû, û em dîsa diçin!

Li ser projeya xweya din, me biryar da ku ji destpêkê ve Liquibase bikar bînin da ku di pêşerojê de ji pirsgirêkan dûr nekevin. Wekî ku diqewime, ne hemî endamên tîmê ciwan dizanin ka meriv wê çawa rast bikar bîne. Min atolyeyek navxweyî pêk anî, paşê min biryar da ku ez veguherim gotarek.

Di gotarê de serişteyên bikêr û danasîna sê xefikên herî diyar ên ku hûn dikarin têkevinê dema ku bi amûrên koçberiya databasa têkildar re dixebitin, bi taybetî Liquibase vedihewîne. Ji bo pêşdebirên Java-yê di astên Junior û Navîn de hatî sêwirandin ji bo pêşdebirên bi tecrûbetir ew dibe ku ji bo avadankirin û dubarekirina tiştê ku bi îhtîmalek berê tê zanîn balkêş be.

Meriv çawa bi karanîna Liquibase xwe di lingê xwe de gulebaran neke

Liquibase û Flyway teknolojiyên pêşbaziyê yên sereke ne ji bo çareserkirina pirsgirêkên kontrolkirina guhertoya strukturên pêwendiyê li cîhana Java. Ya yekem bi tevahî belaş e, di pratîkê de ew pir caran ji bo karanîna tê hilbijartin, ji ber vê yekê Liquibase wekî lehengê weşanê hate hilbijartin. Lêbelê, hin pratîkên ku têne diyar kirin dibe ku gerdûnî bin, li gorî mîmariya serîlêdana we ve girêdayî ye.

Koçberiyên strukturên pêwendiyê rêyek neçar e ku meriv bi nermbûna qels a dikanên daneya têkildar re mijûl bibe. Di serdema moda OOP-ê de, şêwaza xebata bi databasan re tê vê wateyê ku em ê şemayê carek diyar bikin û careke din dest nedin wê. Lê rastî her gav ev e ku tişt diguhezin, û guhertinên di avahiya tabloyê de pir caran hewce ne. Bi xwezayî, pêvajo bixwe dikare bi êş û ne xweş be.

Ez ê neçim nav danasîna teknolojiyê û rêwerzên ji bo zêdekirina pirtûkxaneyek li ser projeya we çend gotar li ser vê mijarê hatine nivîsandin;

Wekî din, jixwe gotarek hêja li ser mijara serişteyên kêrhatî hebû:

Tiştên

Dixwazim şîret û şîroveyên xwe yên ku bi xwîn, xwîn û êşa çareserkirina pirsgirêkên bi koçberiyê re çêbûne, parve bikim.

1. Berî ku hûn dest bi xebatê bikin, divê hûn xwe bi beşa pratîkên çêtirîn li ser nas bikin malperê Liquibase

Hene tiştên hêsan lê pir girîng têne vegotin, bêyî ku karanîna pirtûkxaneyê dikare jiyana we tevlihev bike. Mînakî, nêzîkatiyek nesazkirî ji bo birêvebirina guhertinan dê zû an dereng bibe sedema tevlihevî û koçberiyên şikestî. Ger hûn di heman demê de guhertinên bi hev ve girêdayî li avahiya databasê û mantiqa karûbarê dernexin, îhtîmalek mezin heye ku ev bibe sedema ceribandinên sor an jîngehek şikestî. Wekî din, pêşnîyarên ji bo karanîna Liquibase li ser malpera fermî bendek di derbarê pêşkeftin û ceribandina nivîsarên vegerê de digel nivîsarên koçberiyê yên sereke hene. Belê, di gotarê de https://habr.com/ru/post/178665/ Di derbarê koçberan û mekanîzmaya vegerê de mînakên kodê hene.

2. Ger hûn dest bi karanîna amûrên koçberiyê bikin, di avahiya databasê de rê nedin serrastkirinên bi destan

Wekî ku tê gotin: "Carek Persîl, her dem Persil." Ger bingeha serîlêdana we dest pê dike ku ji hêla Liquibase ve were rêvebirin, her guhartinên destan tavilê dibe sedema rewşek nehevgirtî, û asta pêbaweriyê di guheztinan de sifir dibe. Metirsiyên potansiyel di nav senaryoya herî xirab de, serverek mirî, çend demjimêran ji nûvekirina databasê re vedihewîne. Ger di tîmê we de Mîmarek DBA ya "dibistana kevn" heye, bi sebir û bi fikir jê re rave bikin ka dê çiqas xirab bibin heke ew bi tenê databasê li gorî têgihîştina xwe ji Pêşvebirek SQL-ya şertî biguherîne.

3. Heke guhertoya berê di depoyê de hatibe avêtin, ji guherandinê dûr bixin

Ger pêşdebirek din vekişînek çêkir û guheztinek bi kar anî, ku paşê dê were sererast kirin, ew ê bê guman gava ku dest bi serîlêdanê bike xeletiyek werdigire, bi peyvek dilovan we bi bîr bîne. Ger guheztina guheztinê bi rengekî di pêşkeftinê de derbikeve, hûn ê neçar bin ku li dû hêlînên guheztinan bişopînin. Esasê pirsgirêkê li ser pejirandina guheztinan ji hêla hash sum - mekanîzmaya bingehîn a Liquibase ve girêdayî ye. Dema ku koda guheztinê diguhezîne, mîqdara hash diguhere. Guhertinên guheztinê tenê dema ku gengaz be ku hemî databasê ji sifirê ve bê wendakirina daneyê were bicîh kirin gengaz e. Di vê rewşê de, vesazkirina koda SQL an XML dikare, berevajî, jiyanê hêsantir bike û koçberan bêtir bixwînin. Nimûnek dê rewşek be ku, di destpêka serîlêdanê de, şemaya databasa çavkaniyê di nav tîmê de lihevhatin.

4. Heke gengaz be paşvekêşên databasê verast bikin

Li vir, ez difikirim, her tişt zelal e. Ger ji nişka ve koçberî bi ser neket, her tişt dikare vegere. Liquibase amûrek ji bo paşvexistina guhertinan heye, lê nivîsarên paşdexistinê jî ji hêla pêşdebirker bixwe ve têne nivîsandin, û ew dikarin bi heman îhtîmala ku nivîsarên guheztina bingehîn re pirsgirêk hebin. Ev tê vê wateyê ku di her rewşê de bikêrhatî ye ku meriv wê bi hilanînê re ewle lîst.

5. Heke gengaz be, di pêşkeftinê de paşvekêşên databasê yên îsbatkirî bikar bînin

Ger ev ne dijberî peyman û nepenîtiyê nebe, di databasê de daneyên kesane tune, û ew bi qasî du tav giran nabe - berî ku wê li ser serverên koçberiya zindî bikar bînin, hûn dikarin kontrol bikin ka ew ê çawa li ser makîneya pêşdebiran bixebite û hesab bike. hema hema 100% pirsgirêkên potansiyel ên di dema koçberiyê de.

6. Bi pêşdebirên din ên tîmê re têkilî daynin

Di pêvajoyek pêşkeftinê ya birêkûpêk de, her kesê tîmê dizane kî çi dike. Di rastiyê de, ev pir caran ne wusa ye, ji ber vê yekê, heke hûn guheztinên strukturên databasê wekî beşek ji peywira xwe amade dikin, tê pêşniyar kirin ku hûn di derheqê vê yekê de tevahiya tîmê agahdar bikin. Ger kesek di paralel de guhertinan çêdike, divê hûn bi baldarî rêxistin bikin. Hêja ye ku piştî qedandina xebatê, ne tenê di destpêkê de, bi hevkaran re têkilî daynin. Gelek pirsgirêkên potansiyel ên bi guhertinan re dikarin di qonaxa vekolîna kodê de werin çareser kirin.

7. Bifikirin ka hûn çi dikin!

Ew ê wekî şîretek xweser xuya dike ku ji her rewşê re derbas dibe. Lêbelê, heke pêşdebir careke din analîz bike ka ew çi dike û ew dikare bandorê li çi bike, dikaribû ji gelek pirsgirêkan dûr bihata. Karkirina bi koçberan re her gav baldarî û rastbûna zêde hewce dike.

Xefik

Ka em naha li xefikên tîpîk ên ku hûn dikarin têkevinê binêrin ger hûn şîreta jorîn bişopînin, û bi rastî, divê hûn çi bikin?

Rewş 1: Du pêşdebiran hewl didin ku di heman demê de guhertinên nû lê zêde bikin

Meriv çawa bi karanîna Liquibase xwe di lingê xwe de gulebaran neke
Vasya û Petya dixwazin guhertoyek 4-ya guheztinê biafirînin, bêyî ku hevûdu bizanibin. Wan di strukturên databasê de guheztin çêkirin û bi pelên guheztinê yên cihêreng daxwazek kişandinê derxistin. Mekanîzmaya çalakiyê ya jêrîn tê pêşniyar kirin:

Çawa biryarê bide

  1. Bi rengekî, pêdivî ye ku hevkar li ser rêza ku guheztinên wan diçin li hev bikin, mînakî, Petin divê pêşî were sepandin.
  2. Divê kes ya duyemîn li xwe zêde bike û guhertoya Vasya bi guhertoya 5-ê nîşan bide. Ev dikare bi rêya Kiraz Pick an jî bi tevhevkirinek paqij were kirin.
  3. Piştî guhertinan, divê hûn bê guman rastdariya çalakiyên hatine kirin kontrol bikin.
    Di rastiyê de, mekanîzmayên Liquibase dê bihêle ku hûn du guhertinên guhertoya 4-ê di depoyê de hebin, ji ber vê yekê hûn dikarin her tiştî wekî xwe bihêlin. Ango, hûn ê tenê du guhertoyên guhertoya 4-ê bi navên cûda hebin. Bi vê nêzîkatiyê, paşê pir dijwar dibe ku guhertoyên databasê bigerin.

Wekî din, Liquibase, mîna mala hobbitan, gelek razan digire. Yek ji wan mifteya validCheckSum e, ku di guhertoya 1.7 de xuya bû û dihêle hûn ji bo guheztinek taybetî nirxek hash-a derbasdar diyar bikin, bêyî ku di databasê de çi tê hilanîn. Documentation https://www.liquibase.org/documentation/changeset.html wiha dibêje:

Berhevokek kontrolê ya ku ji bo vê guheztinê derbasdar tê hesibandin, bêyî ku di databasê de hatî hilanîn, lê zêde bike. Di serî de dema ku hûn hewce ne ku mîhengek guheztinê biguhezînin tê bikar anîn û hûn naxwazin xeletî li ser databasên ku ew jixwe li ser hatine xebitandin werin avêtin (ne prosedurek pêşniyar kirin)

Erê, erê, ev prosedur nayê pêşniyar kirin. Lê carinan sêrbazek ronahiyê ya bihêz di teknîkên tarî de jî pispor e

Rewş 2: Koçberiya ku bi daneyan ve girêdayî ye

Meriv çawa bi karanîna Liquibase xwe di lingê xwe de gulebaran neke

Ka em bihesibînin ku hûn ne xwediyê şiyana ku hûn paşvekêşana databasê ji pêşkêşkerên zindî bikar bînin. Petya guhertoyek afirand, ew li herêmî ceriband û, bi pêbaweriya tam ku ew rast bû, daxwazek vekişînê ji pêşdebir re kir. Tenê di rewşê de, rêberê projeyê zelal kir ka Petya ew kontrol kiriye, û dûv re lê zêde kir. Lê bicihkirina li ser servera pêşkeftinê ket.

Bi rastî, ev gengaz e, û tu kes ji vê yekê bêpar nîne. Ev diqewime ger guheztinên strukturên tabloyê bi rengekî bi daneyên taybetî yên databasê ve girêdayî bin. Eşkere ye, heke databasa Petya tenê bi daneyên ceribandinê dagirtî be, wê hingê dibe ku ew hemî dozên pirsgirêkê venegire. Mînakî, dema ku tabloyek jê bibe, derdikeve holê ku di tabloyên din de ji hêla Key Biyanî ve tomar hene ku bi tomarên di tabloya ku tê jêbirin ve girêdayî ne. An jî dema ku celebek stûnê diguhezîne, derdikeve holê ku ne ji% 100-ê daneyan dikare were veguheztina celebek nû.

Çawa biryarê bide

  • Skrîptên taybetî yên ku dê bi koçkirinê re carekê werin bikar anîn binivîsin û daneyan bi forma rast bixin. Ev rêgezek gelemperî ye ku pirsgirêka veguheztina daneyan li strukturên nû piştî serîlêdana koçberan çareser bike, lê tiştek wusa dikare berî, di rewşên taybetî de, were sepandin. Ev rê, bê guman, her gav ne berdest e, ji ber ku guherandina daneyan li ser serverên zindî dikare xeternak û tewra wêranker be.
  • Rêyek din a dijwar ev e ku meriv guheztinek heyî biguherîne. Zehmetî ev e ku hemî databasên ku ew berê di forma xweya heyî de hatî sepandin dê bêne nûve kirin. Pir mimkun e ku tevahiya tîmê paşîn neçar bimîne ku bi herêmî databasê ji sifirê derxîne.
  • Û awayê herî gerdûnî ev e ku pirsgirêkê bi daneyan re veguhezîne hawîrdora pêşdebiran, heman rewşê ji nû ve biafirîne û guheztinek nû li ya şikestî zêde bike, ku dê pirsgirêkê derxe.
    Meriv çawa bi karanîna Liquibase xwe di lingê xwe de gulebaran neke

Bi gelemperî, her ku databas di berhevokê de bi databasa servera hilberînê re dişibin hev, şansê kêmbûna pirsgirêkên bi koçberan re dê pir dûr biçin. Û, bê guman, berî ku hûn guheztinek bişînin depoyê, divê hûn çend caran bifikirin ka ew ê tiştek bişkîne.

Rewş 3. Liquibase piştî ku derbasî hilberînê dibe dest bi kar dike

Bifikirin ku serokê tîmê ji Petya xwest ku Liquibase bikeve projeyê, lê proje jixwe di hilberînê de ye û avahiyek databasê ya heyî heye.

Li gorî vê yekê, pirsgirêk ev e ku li ser her serverek nû an makîneyên pêşdebiran, divê ev tablo ji nû ve werin afirandin, û hawîrdora heyî divê di rewşek domdar de bimîne, amade ye ku guhartinên nû qebûl bike.

Çawa biryarê bide

Gelek rê jî hene:

  • Ya yekem û ya herî eşkere ev e ku meriv xwedan skrîptek veqetandî ye ku divê dema destpêkirina jîngehek nû bi destan were sepandin.
  • Ya duyemîn kêmtir eşkere ye, xwedî koçek Liquibase ya ku di çarçoveyek din a Liquibase de ye, û wê bicîh bînin. Hûn dikarin li ser Liquibase Context bêtir bixwînin vir: https://www.liquibase.org/documentation/contexts.html. Bi gelemperî, ev mekanîzmayek balkêş e ku dikare bi serfirazî were bikar anîn, mînakî, ji bo ceribandinê.
  • Rêya sêyemîn ji çend gavan pêk tê. Pêşîn, divê ji bo tabloyên heyî koçberiyek were afirandin. Dûv re pêdivî ye ku ew li hin hawîrdorê were sepandin û bi vî rengî jimareya wê ya hash were bidestxistin. Pêngava paşîn ev e ku hûn tabloyên Liquibase yên vala li ser servera meya ne-vala bidin destpêkirin, û di tabloya bi dîroka karanîna guheztinê de, hûn dikarin bi destan tomarek li ser guheztina "wek ku were sepandin" bi guheztinên ku berê di databasê de hene bixin. Bi vî rengî, li ser serverek heyî, hejmartina dîrokê dê ji guhertoya 2-ê dest pê bike, û hemî hawîrdorên nû dê bi heman rengî tevbigerin.
    Meriv çawa bi karanîna Liquibase xwe di lingê xwe de gulebaran neke

Rewş 4. Koçberî mezin dibin û wexta temamkirinê nemaye

Di destpêka pêşkeftina karûbarê de, bi gelemperî, Liquibase wekî pêwendiyek derveyî tête bikar anîn, û dema ku serîlêdanê dest pê dike hemî koçberî têne pêvajoyê. Lêbelê, bi demê re, hûn dikarin rewşên jêrîn biqewimin:

  • Koçberî mezin dibin û ji bo temamkirina wan demek dirêj digire.
  • Pêdiviya koçberiyê li hawîrdorên belavkirî heye, mînakî, li ser çend nimûneyên servera databasê bi hevdemî.
    Di vê rewşê de, sepandina koçberan ji bo pir dirêj dê di dema destpêkirina serîlêdanê de bibe encamê. Wekî din, sepandina koçberan ji bo her mînakek serîlêdanê ji hev cuda dibe ku bibe sedem ku serverên cûda ji hevdeng bin.

Çawa biryarê bide

Di rewşên weha de, projeya we jixwe mezin e, belkî tewra mezinek e, û Liquibase dest pê dike ku wekî amûrek derveyî veqetandî tevbigere. Rastî ev e ku Liquibase wekî pirtûkxaneyek di pelek jar de tête berhev kirin, û dikare di nav projeyek an serbixwe de wekî pêwendiyek bixebite.

Di moda serbixwe de, hûn dikarin pêkanîna koçberan berbi hawîrdora CI/CD-ya xwe an jî ji milên bihêz ên rêvebirên pergala xwe û pisporên bicîhkirinê bihêlin. Ji bo vê yekê hûn ê hewceyê rêzika fermanê Liquibase bikin https://www.liquibase.org/documentation/command_line.html. Di vê modê de, piştî ku hemî koçên pêwîst hatin kirin, gengaz dibe ku serîlêdanê dest pê bike.

encamê

Di rastiyê de, dema ku bi koçên databasê re dixebitin dibe ku gelek xeletiyên din hebin, û gelek ji wan hewceyê nêzîkbûnek afirîner in. Girîng e ku hûn fêm bikin ku heke hûn amûrê rast bikar bînin, pir ji van xeletiyan dikarin werin dûr kirin. Bi taybetî, min neçar ma ku bi hemî pirsgirêkên navnîşkirî re bi awayên cihêreng mijûl bibim, û hin ji wan jî encama xeletiyên min bûn. Bi piranî ev diqewime, bê guman, ji ber bêhişbûnê, lê carinan ji ber nebûna sûc a karanîna amûrê.

Source: www.habr.com

Add a comment