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:
- Atbalsts dažÄdÄm DBVS. NepiecieÅ”amas MS SQL Server, PostgreSQL, Oracle, taÄu potenciÄli iespÄjams izmantot arÄ« citas
- 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.
- 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
- 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.
- Uzlabota dokumentÄcija un atbalsts. Å eit, mums Ŕķiet, nekÄds skaidrojums nav vajadzÄ«gs
- 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:
- EF galvenÄs migrÄcijas
- DBup
- RoundhouseE
- ThinkingHome.Migrator
- Brīvs migrators
Un tagad nedaudz sÄ«kÄk
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
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
Å 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
RÄ«ks versijas datu bÄzes shÄmas migrÄÅ”anai uz .NET Core platformu, izplatÄ«ts saskaÅÄ ar MIT licenci.
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
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?
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