Ki jan yo pa tire tèt ou nan pye a lè l sèvi avèk Liquibase

Li pa janm rive, e isit la li ye ankò!

Nan pwochen pwojè a, nou deside sèvi ak Liquibase depi nan konmansman an pou evite pwoblèm nan tan kap vini an. Kòm li te tounen soti, se pa tout jèn manm ekip yo konnen ki jan yo sèvi ak li kòrèkteman. Mwen te fè yon atelye entèn, ki Lè sa a, mwen deside tounen yon atik.

Atik sa a gen ladan konsèy itil ak deskripsyon twa nan enkonvenyans ki pi evidan ou ka tonbe nan lè w ap travay ak zouti migrasyon baz done relasyon, Liquibase an patikilye. Ki fèt pou devlopè Java nan nivo Junior ak Mwayen, pou devlopè ki gen plis eksperyans li ka enteresan pou estriktire ak repete sa ki gen plis chans deja konnen.

Ki jan yo pa tire tèt ou nan pye a lè l sèvi avèk Liquibase

Liquibase ak Flyway se teknoloji prensipal konpetisyon pou rezoud pwoblèm kontwòl vèsyon estrikti relasyon yo nan mond Java. Premye a se konplètman gratis, nan pratik li pi souvan chwazi pou itilize, ki se poukisa Liquibase te chwazi kòm ewo nan piblikasyon an. Sepandan, kèk nan pratik ki dekri yo ka jenerik, tou depann de achitekti aplikasyon w lan.

Migrasyon relasyon yo se yon fason fòse fè fas ak fleksibilite nan fèb nan magazen done relasyon yo. Nan epòk alamòd pou OOP, style travay ak baz done a te vle di ke nou ta dekri chema a yon fwa epi nou pa manyen li ankò. Men, reyalite a se toujou ke bagay yo chanje, ak chanjman nan estrikti a nan tab yo oblije byen souvan. Natirèlman, pwosesis la tèt li se douloure ak dezagreyab.

Mwen pa pral fouye nan deskripsyon teknoloji a ak enstriksyon pou ajoute bibliyotèk la nan pwojè ou a, yo te ekri ase atik sou sijè sa a:

Anplis de sa, te gen deja yon gwo atik sou sijè konsèy itil:

Советы

Mwen vle pataje konsèy mwen ak kòmantè, ki te fèt nan swe, san ak doulè nan rezoud pwoblèm ak migrasyon.

1. Anvan ou kòmanse, ou ta dwe li seksyon an pi bon pratik sou Online Liquibase

Gen bagay ki senp men trè enpòtan yo dekri, san yo pa itilize bibliyotèk la ka konplike lavi ou. Pou egzanp, yon apwòch ki pa estriktirèl nan jesyon chanjman pral pi bonè oswa pita mennen nan konfizyon ak migrasyon kase. Si ou pa woule chanjman mityèlman depandan nan estrikti baz done a ak lojik sèvis yo an menm tan an, Lè sa a, gen yon gwo pwobabilite ke sa a pral mennen nan tès wouj oswa yon anviwònman kase. Anplis de sa, rekòmandasyon yo pou itilize Liquibase sou sit entènèt ofisyèl la gen yon paragraf sou devlopman ak verifikasyon scripts rollback ansanm ak scripts migrasyon prensipal yo. Oke, nan atik la https://habr.com/ru/post/178665/ gen egzanp kòd ki gen rapò ak migrasyon ak mekanis rollback la.

2. Si ou te kòmanse sèvi ak zouti migrasyon, pa pèmèt koreksyon manyèl nan estrikti baz done a

Jan pawòl la di: "Yon fwa pèsil, toujou pèsil." Si zouti Liquibase te kòmanse jere baz aplikasyon w lan, nenpòt chanjman manyèl imedyatman mennen nan yon eta enkonsistan, epi nivo konfyans chanjman an vin zewo. Risk potansyèl - plizyè èdtan pase sou restorasyon baz done a, nan pi move senaryo a - yon sèvè mouri. Si ou gen yon "fin vye granmoun lekòl" DBA Architect nan ekip ou a, avèk pasyans ak reflechi eksplike l 'ki jan bagay sa yo pral move si li jis edite baz done a nan pwòp fason li soti nan kondisyonèl SQL Developer la.

3. Si changeset la te deja pouse nan repozitwa a, evite koreksyon

Si yon lòt pwomotè rale epi aplike yon chanjman ki pral modifye pita, li pral definitivman sonje ou ak yon mo janti lè li resevwa yon erè lè aplikasyon an kòmanse. Si modifye chanjman an yon jan kanmenm koule nan devlopman, w ap oblije desann pant la glise nan korije. Sans nan pwoblèm nan repoze sou validation nan chanjman pa sòm hash - mekanis prensipal la nan Liquibase. Lè modifye kòd chanjman an, sòm hash la chanje. Editing changesets posib sèlman lè li posib pou deplwaye baz done a tout antye de grafouyen san pèdi done. Nan ka sa a, refactoring SQL oswa XML kòd ka, okontrè, fè lavi pi fasil, fè migrasyon plis lizib. Yon egzanp ta dwe yon sitiyasyon kote, nan kòmansman aplikasyon an, yo te dakò sou chema baz done sous la nan ekip la.

4. Fè verifye sovgad baz done si sa posib

Isit la, mwen panse, tout bagay klè. Si toudenkou migrasyon an te fèt san siksè, tout bagay ka retounen tounen. Liquibase gen yon zouti rollback, men scripts rollback yo ekri tou pa pwomotè a li menm, epi yo ka gen pwoblèm ak menm pwobabilite ak nan scripts chanjman prensipal yo. Sa vle di ke jwe li an sekirite ak sovgad se itil nan nenpòt ka.

5. Sèvi ak sovgad baz done verifye nan devlopman si sa posib

Si sa a pa kontredi kontra ak vi prive, pa gen okenn done pèsonèl nan baz done a, epi li pa peze tankou de solèy - anvan ou aplike li sou sèvè migrasyon ap viv, ou ka tcheke kijan li fonksyone sou machin pwomotè a epi kalkile prèske 100% pwoblèm potansyèl pandan migrasyon an.

6. Chat ak lòt devlopè nan ekip la

Nan yon pwosesis devlopman ki byen òganize, tout moun nan ekip la konnen ki moun k ap fè sa. An reyalite, sa a se souvan pa ka a, Se poutèt sa, si w ap prepare chanjman nan estrikti nan baz done kòm yon pati nan travay ou, li se rekòmande Anplis de sa notifye tout ekip la sou sa. Si yon moun ap fè chanjman an paralèl, ou ta dwe òganize ak anpil atansyon. Li vo kominike ak kòlèg li yo menm nan fen travay la, pa sèlman nan kòmansman an. Anpil pwoblèm potansyèl ak chanjman yo ka rezoud nan etap revizyon kòd la.

7. Panse sa w ap fè!

Konsèy ki sanble aklè pou nenpòt sitiyasyon. Sepandan, anpil pwoblèm yo te kapab evite si pwomotè a te yon lòt fwa ankò analize sa li te fè ak sa li ta ka afekte. Travay ak migrasyon toujou mande plis atansyon ak presizyon.

Pyèj

Ann gade kounye a nan pyèj tipik ke ou ka tonbe nan si ou pa swiv konsèy ki anwo yo, e ki sa, an reyalite, ta dwe fè?

Sitiyasyon 1. De devlopè yo ap eseye ajoute nouvo chanjman an menm tan an

Ki jan yo pa tire tèt ou nan pye a lè l sèvi avèk Liquibase
Vasya ak Petya vle kreye yon chanjman vèsyon 4 san yo pa konnen youn sou lòt. Yo te fè chanjman nan estrikti baz done a, ak woule soti yon demann rale, ak diferan dosye chanjman. Mekanis sa yo pwopoze anba a:

Ki jan yo rezoud

  1. Yon jan kanmenm, kòlèg yo dwe dakò sou lòd nan ki chanjman yo ta dwe ale, an n di Petin ta dwe aplike an premye.
  2. Yon moun ta dwe vide lòt la epi make setset Vasya a ak vèsyon 5. Sa a ka fè atravè Cherry Pick oswa yon fizyon pwòp.
  3. Apre chanjman yo, asire w ke ou tcheke validite aksyon yo pran.
    An reyalite, mekanis Liquibase yo pral pèmèt ou gen de vèsyon 4 chanjman nan repozitwa a, kidonk, ou ka kite tout bagay jan li ye. Sa vle di, ou pral tou senpleman gen de revizyon nan vèsyon 4 ak non diferan. Avèk apwòch sa a, vèsyon baz done vin trè difisil pou navige pita.

Anplis de sa, Liquibase, tankou kay obi, kenbe yon anpil nan sekrè. Youn nan yo se kle validCheckSum, ki te parèt depi vèsyon 1.7 epi ki pèmèt ou presize yon valè hash valab pou yon chanjman espesifik, kèlkeswa sa ki estoke nan baz done a. Dokimantasyon https://www.liquibase.org/documentation/changeset.html di sa ki annapre yo:

Ajoute yon sòm chèk ki konsidere kòm valab pou ChangeSet sa a, kèlkeswa sa ki estoke nan baz done a. Itilize prensipalman lè ou bezwen chanje yon ChangeSet epi ou pa vle erè jete sou baz done kote li te deja kouri (pa yon pwosedi rekòmande)

Wi, sa pa rekòmande. Men pafwa yon majisyen limyè fò tou metrize teknik nwa.

Ka 2: Done-kondwi migrasyon

Ki jan yo pa tire tèt ou nan pye a lè l sèvi avèk Liquibase

Ann di ou pa ka sèvi ak sovgad baz done ki soti nan sèvè ap viv yo. Petya te kreye yon chanjman, teste li lokalman, epi ak tout konfyans ke li te dwat, te fè yon demann rale bay pwomotè a. Jis nan ka, lidè pwojè a klarifye si Petya tcheke li, ak Lè sa a, vide l 'nan. Men, deplwaman an sou sèvè devlopman an te tonbe.

An reyalite, sa a se posib, epi pa gen moun ki iminize kont sa a. Sa rive si modifikasyon nan estrikti tab la yo yon jan kanmenm mare nan done espesifik ki soti nan baz done a. Li evidan, si baz done Petya a plen ak done tès sèlman, Lè sa a, li ka pa kouvri tout ka pwoblèm. Pou egzanp, lè w ap efase yon tab, li sanble ke gen dosye nan lòt tab pa Kle Etranje ki asosye ak dosye nan youn nan yo te efase. Oswa lè w chanje kalite kolòn nan, li sanble ke pa 100% nan done yo ka konvèti nan nouvo kalite a.

Ki jan yo rezoud

  • Ekri script espesyal ki pral aplike yon fwa ansanm ak migrasyon an epi pote done yo nan fòm apwopriye a. Sa a se yon fason jeneral yo rezoud pwoblèm nan transfere done nan nouvo estrikti apre yo fin aplike migrasyon, men yon bagay ki sanble ka aplike anvan, nan ka espesyal. Chemen sa a, nan kou, pa toujou disponib, paske koreksyon done sou sèvè ap viv yo ka danjere e menm fatal.
  • Yon lòt fason difisil se modifye yon chanjman ki egziste deja. Difikilte a se ke tout baz done yo kote li te deja aplike nan fòm ki egziste deja yo pral dwe retabli. Li se byen posib ke tout ekip backend la pral fòse lokalman woule baz done a nan grate.
  • Ak fason ki pi inivèsèl se transfere pwoblèm nan done nan anviwònman pwomotè a, rkree menm sitiyasyon an epi ajoute yon nouvo chanjman, nan yon sèl kase, ki pral kontoune pwoblèm nan.
    Ki jan yo pa tire tèt ou nan pye a lè l sèvi avèk Liquibase

An jeneral, plis baz done a sanble nan konpozisyon ak baz done sèvè pwodiksyon an, mwens chans pou pwoblèm ak migrasyon yo ale lwen. Epi, nan kou, anvan ou voye chanjman an nan repozitwa a, ou ta dwe panse plizyè fwa si li pral kraze yon bagay.

Sitiyasyon 3. Liquibase kòmanse itilize apre li antre nan pwodiksyon an

Sipoze lidè ekip la mande Petya pou mete Liquibase nan pwojè a, men pwojè a deja an pwodiksyon e gen yon estrikti baz done ki deja egziste.

An konsekans, pwoblèm nan se ke sou nenpòt nouvo sèvè oswa machin devlopè, done yo tab yo dwe rkree nan grafouyen, ak anviwònman an ki deja egziste dwe rete nan yon eta ki konsistan, yo te pare yo aksepte nouvo chanjman.

Ki jan yo rezoud

Genyen tou plizyè fason:

  • Premye a ak pi evidan se gen yon script separe ki dwe aplike manyèlman lè inisyalize yon nouvo anviwònman.
  • Dezyèm lan, mwens evidan, se gen yon migrasyon Liquibase ki nan yon Kontèks Liquibase diferan epi aplike li. Ou ka li plis sou Liquibase Context isit la: https://www.liquibase.org/documentation/contexts.html. An jeneral, sa a se yon mekanis enteresan ki ka aplike avèk siksè, pou egzanp, pou fè tès.
  • Twazyèm chemen an konsiste de plizyè etap. Premyèman, yo dwe kreye yon migrasyon pou tab ki egziste deja yo. Lè sa a, li dwe aplike sou kèk anviwònman epi konsa sòm hash li yo pral jwenn. Pwochen etap la se inisyalize tab Liquibase vid sou sèvè ki pa vid nou an, epi ou ka manyèlman mete yon dosye chanjman "tankou si aplike" ak chanjman ki deja nan baz done a nan tablo a ak istwa a nan aplikasyon chanjman. Kidonk, sou yon sèvè ki deja egziste, istwa a ap kòmanse soti nan vèsyon 2, ak tout nouvo anviwònman yo ap konpòte yo menm jan an.
    Ki jan yo pa tire tèt ou nan pye a lè l sèvi avèk Liquibase

Senaryo 4: Migrasyon yo vin gwo epi yo pa ka kenbe

Nan kòmansman devlopman sèvis, kòm yon règ, Liquibase yo itilize kòm yon depandans ekstèn, ak tout migrasyon yo trete lè aplikasyon an kòmanse. Sepandan, apre yon sèten tan, ou ka bite sou ka sa yo:

  • Migrasyon yo vin gwo e yo pran anpil tan pou yo fini.
  • Gen yon bezwen imigre nan anviwònman distribye, pou egzanp, sou plizyè ka nan serveurs baz done an menm tan.
    Nan ka sa a, aplike migrasyon pou twò lontan sa pral lakòz yon delè lè aplikasyon an kòmanse. Epitou, aplike migrasyon sou yon baz aplikasyon pou egzanp ka lakòz diferan serveurs yo nan yon eta de senkronizasyon.

Ki jan yo rezoud

Nan ka sa yo, pwojè ou a deja gwo, petèt menm yon adilt, ak Liquibase kòmanse aji kòm yon zouti ekstèn separe. Reyalite a se ke Liquibase, kòm yon bibliyotèk, reyini nan yon dosye bokal, epi li ka travay kòm yon depandans nan pwojè a, osi byen ke otonòm.

Offline, ou ka kite aplikasyon migrasyon yo nan anviwònman CI/CD ou oswa sou zepòl solid administratè/deplwayè sistèm ou yo. Pou fè sa, ou bezwen liy lòd Liquibase https://www.liquibase.org/documentation/command_line.html. Nan mòd sa a, li vin posib pou lanse aplikasyon an apre tout migrasyon ki nesesè yo te konplete.

Sòti

An reyalite, gen anpil plis enkonvenyans lè w ap travay ak migrasyon baz done, e anpil nan yo mande pou yon apwòch kreyatif. Li enpòtan pou w konprann ke si ou itilize zouti a kòrèkteman, Lè sa a, pi fò nan pyèj sa yo ka evite. Espesyalman, mwen te oblije fè fas a tout pwoblèm ki nan lis nan diferan fòm, ak kèk nan yo te rezilta nan jambs mwen. Fondamantalman, sa rive, nan kou, akòz inatansyon, men pafwa - akòz enkapasite a kriminèl yo sèvi ak zouti a.

Sous: www.habr.com

Add nouvo kòmantè