Datu migrācijas sistēmu salÄ«dzināŔana un izvēle

Datu migrācijas sistēmu salÄ«dzināŔana un izvēle

Datu migrācijas sistēmu salÄ«dzināŔana un izvēle

Datu modelis izstrādes procesā mēdz mainÄ«ties, un kādā brÄ«dÄ« tas vairs neatbilst datu bāzei. Protams, datu bāzi var izdzēst, un tad ORM izveidos jaunu versiju, kas atbilst modelim, taču Ŕī procedÅ«ra novedÄ«s pie esoÅ”o datu zaudÄ“Å”anas. Tādējādi migrācijas sistēmas funkcija ir nodroÅ”ināt, ka shēmas maiņas rezultātā tā tiek sinhronizēta ar datu modeli aplikācijā, nezaudējot esoÅ”os datus.

Å ajā rakstā mēs vēlamies apskatÄ«t dažādus datu bāzes migrācijas pārvaldÄ«bas rÄ«kus. Mēs ceram, ka Å”is pārskats bÅ«s noderÄ«gs izstrādātājiem, kuri saskaras ar lÄ«dzÄ«gu izvēli.

Uzdevums

MÅ«su uzņēmums Å”obrÄ«d aktÄ«vi izstrādā nākamās paaudzes produktu ā€“ Docs Security Suite (DSS). Servera daļa ir rakstÄ«ta .Net Core, un Entity Framework Core tiek izmantots kā DBVS. Izstrādājot lietojumprogrammu, mēs izmantojam Code First pieeju.

Lietojumprogrammas domēna modeli vienlaikus veido vairāki izstrādātāji ā€“ katrs atbild par savu loÄ£isko sistēmas daļu.

IepriekŔējā DSS paaudze kā migrācijas pārvaldÄ«bas sistēmu izmantoja klasisko Entity Framework Migrations (EF 6). Tomēr pret to ir sakrājuŔās dažas sÅ«dzÄ«bas, no kurām galvenā ir par to, ka EF trÅ«kst saprātÄ«gas pieejas versiju konfliktu risināŔanā. Å is fakts joprojām mÅ«s satrauc, labojot kļūdas atbalsta ietvaros, tāpēc mēs nolēmām apsvērt alternatÄ«vas iespējas.

Diskusijas rezultātā tika izveidotas Ŕādas prasÄ«bas migrācijas pārvaldÄ«bas sistēmai:

  1. Atbalsts dažādām DBVS. NepiecieÅ”amas MS SQL Server, PostgreSQL, Oracle, taču potenciāli iespējams izmantot arÄ« citas
  2. Darbs ar ORM. Sākotnēji bija plānots izmantot EF Core, taču projektÄ“Å”anas stadijā bijām gatavi apsvērt arÄ« citus ORM.
  3. Automātiska migrāciju Ä£enerÄ“Å”ana. Ņemot vērā Code First attÄ«stÄ«bu, es vēlētos izvairÄ«ties no nepiecieÅ”amÄ«bas migrēt ar roku
  4. Versiju konflikti. Sadalītā izstrādes vidē, apvienojot, EF Core var ciest no konfliktiem. Tā kļūst par būtisku problēmu, jo dažādas lietojumprogrammas daļas veido dažādi izstrādātāji, tāpēc katrai ir jāpavada daudz laika.
  5. Uzlabota dokumentācija un atbalsts. Šeit, mums Ŕķiet, nekāds skaidrojums nav vajadzīgs
  6. Bezmaksas. Kritērijs ir nosacīts, jo sistēmas nav ļoti dārgas vai dārgas, bet ideālas ērtības, mēs arī bijām gatavi apsvērt

Nelielas izpētes rezultātā tika atrastas un vēlamas apsvērt Ŕādas iespējas:

  1. EF galvenās migrācijas
  2. DBup
  3. RoundhouseE
  4. ThinkingHome.Migrator
  5. Brīvs migrators

Un tagad nedaudz sīkāk

Datu migrācijas sistēmu salÄ«dzināŔana un izvēle
EntityFramework pamatmigrācijas

Protams, Ŕī bija pirmā un galvenā izvēle. Vietējais instruments, kas darbojas jau no kastes, nesteidzoties ar tamburÄ«nu. Liels daudzums dokumentācijas, oficiāla un ne tik, vienkārŔība utt. Tomēr sÅ«dzÄ«bas par klasisko EF ir diezgan aktuālas arÄ« EF Core.

Tādējādi tiek izceltas EF Core priekÅ”rocÄ«bas:

  • Microsoft atbalsts, dokumentācija, arÄ« krievu valodā, milzÄ«ga kopiena
  • Automātiska migrāciju Ä£enerÄ“Å”ana, pamatojoties uz CodeFirst
  • SalÄ«dzinot ar EF 6, EF Core vairs nesaglabā datu bāzes momentuzņēmumu. Strādājot ar EF Core programmā Code First, vairs nav nepiecieÅ”ams izvietot datubāzi
  • Tā kā mēs dejojam no Code First, ir iespējams veikt vienu migrāciju uz visiem nepiecieÅ”amajiem datu piekļuves nodroÅ”inātājiem
  • AttiecÄ«bā uz pakalpojumu sniedzējiem tiek atbalstÄ«ts PostgreSQL, tiek atbalstÄ«ts Oracle utt., utt., un pat MS SQL Server ļŠ

Un arī trūkumi:

  • Konfliktu risināŔana palika tajā paŔā lÄ«menÄ«. Ir nepiecieÅ”ams secÄ«gi veikt migrācijas un atjaunināt datu bāzes momentuzņēmumus
  • AtkarÄ«ba no modeļiem, uz kuriem tiek Ä£enerētas migrācijas

DbUp

Datu migrācijas sistēmu salÄ«dzināŔana un izvēle
dbup.github.io

DbUp ir .NET bibliotēka, ko instalē NuGet un kas palÄ«dz virzÄ«t izmaiņas uz SQL Server. Tā seko lÄ«dzi, kuri izmaiņu skripti jau ir izpildÄ«ti, un palaiž tos, kas nepiecieÅ”ami datu bāzes atjaunināŔanai. Bibliotēka izauga no projekta ASP.NET atvērtā koda emuāru veidoÅ”anas programmai, un tā pastāv saskaņā ar MIT licenci, un kods atrodas vietnē GitHub. Migrācijas ir aprakstÄ«tas, izmantojot T-SQL.

Kādas ir priekŔrocības:

  • Atbalsts lielam skaitam DBVS (MS SQL Server, PstgreSQL, MySQL)
  • Tā kā skripti ir rakstÄ«ti T-SQL, tie izskatās diezgan vienkārÅ”i
  • ArÄ« konflikti tiek risināti, izmantojot SQL

Un mīnusi:

  • Ar visu atbalstÄ«to DBVS Oracle nav viena no tām
  • Nesadarbojas ar ORM
  • T-SQL skriptu rakstÄ«Å”ana ar roku nav tas, uz ko mēs vēlējāmies
  • Dokumentācija un kopiena ir tik un tā, lai gan SQL skriptu rakstÄ«Å”anas ziņā tie var nebÅ«t nepiecieÅ”ami.

RoundhouseE

Datu migrācijas sistēmu salÄ«dzināŔana un izvēle
github.com/chucknorris/roundhouse

Å is migrācijas pārvaldÄ«bas rÄ«ks, kas tiek izplatÄ«ts saskaņā ar Apache 2.0 licenci, tāpat kā iepriekŔējais, darbojas T-SQL migrācijas dzinējā. AcÄ«mredzot izstrādātāji par prioritāti izvirzÄ«ja tehnisko problēmu risināŔanu saistÄ«bā ar DBVS atbalstu, nevis ērta izstrādes procesa izveidi.

Plusi:

  • Atbalsta nepiecieÅ”amo DBVS (ieskaitot Oracle)

MÄ«nusi:

  • Oracle (kā arÄ« Access, kas mums nav svarÄ«ga) netiek atbalstÄ«ta .NET Core, tikai .NET Full Framework.
  • Nedarbojas ar ORM
  • Ir vēl mazāk dokumentācijas nekā iepriekŔējā rÄ«kā
  • Atkal ā€“ migrācijas raksta skripti

ThinkingHome.Migrator

Datu migrācijas sistēmu salÄ«dzināŔana un izvēle

RÄ«ks versijas datu bāzes shēmas migrÄ“Å”anai uz .NET Core platformu, izplatÄ«ts saskaņā ar MIT licenci. Pats izstrādātājs par tās jaunāko versiju rakstÄ«ja gandrÄ«z pirms gada.

Plusi:

  • Paredzēts .NET Core
  • Ieviesta sazarotā migrāciju secÄ«ba
  • Ieviesta migrācijas reÄ£istrÄ“Å”ana

MÄ«nusi:

  • Pēdējo reizi atjaunināts pirms gada. AcÄ«mredzot projekts nav atbalstÄ«ts
  • Oracle neatbalsta (rakstā teikts, ka tas ir tāpēc, ka .NET Core nav stabilas ievieÅ”anas, bet tas ir pirms gada)
  • Nav automātiskas migrācijas Ä£enerÄ“Å”anas

Kopumā projekts izskatās daudzsoloÅ”s, it Ä«paÅ”i, ja tas attÄ«stÄ«tos, taču mums bija jāpieņem lēmums Å”eit un tagad.

Brīvs migrators

Datu migrācijas sistēmu salÄ«dzināŔana un izvēle
github.com/fluentmigrator/fluentmigrator

Populārākais migrācijas rīks ar lielu fanu armiju. Izplatīts saskaņā ar Apache 2.0 licenci. Kā norādīts aprakstā, tas ir .NET migrācijas ietvars, kas ir līdzīgs Ruby on Rails Migrations. Izmaiņas datu bāzes shēmā ir aprakstītas C# klasēs.

Šeit ir priekŔrocības:

  • NepiecieÅ”amo DBVS atbalsts
  • .NET Core atbalsts
  • Liela attÄ«stÄ«ta kopiena
  • Konflikti starp migrācijām tiek risināti secÄ«gi ā€” tiek norādÄ«ta migrāciju izpildes secÄ«ba. Turklāt, ja konflikts rodas ap vienu entÄ«tiju, apvienojot kodu, tas tiek atrisināts tāpat kā pārējā kodā
  • Ir profili, kas tiek izpildÄ«ti pēc veiksmÄ«gas migrācijas. Un tie var veikt servisa funkcijas.Pēdējais atjauninājums bija pirms mēneÅ”a, tas ir, projekts ir dzÄ«vs

Runājot par mīnusiem, tie ir:

  • Nav automātiskas migrācijas Ä£enerÄ“Å”anas
  • Nav savienojuma ar EF modeļiem
  • Nav datu bāzes momentuzņēmumu

Kāda bija mūsu izvēle?

Datu migrācijas sistēmu salÄ«dzināŔana un izvēle

Karstās debates risinājās ap diviem parametriem ā€“ automātisku migrāciju Ä£enerÄ“Å”anu un saprātÄ«gu konfliktu risināŔanu. Citi faktori bija daudz mazāk biedējoÅ”i. Rezultātā, pamatojoties uz diskusijas rezultātiem, komanda nolēma jaunajā projektā izmantot Fluent Migrator. Jo konfliktu risināŔana nākotnē dos daudz lielāku labumu.

Atzinumi

Protams, ideālu rÄ«ku nav. Tāpēc mums bija jāpieŔķir prioritāte mÅ«su "vēlÄ«bām", lai izdarÄ«tu izvēli. Tomēr citām komandām un citiem uzdevumiem citi faktori var bÅ«t izŔķiroÅ”i. Mēs ceram, ka Å”is raksts palÄ«dzēs jums izdarÄ«t izvēli.

Avots: www.habr.com

Pievieno komentāru