Usporedba i izbor sustava za migraciju podataka

Usporedba i izbor sustava za migraciju podataka

Usporedba i izbor sustava za migraciju podataka

Podatkovni model ima tendenciju promjena tijekom procesa razvoja iu nekom trenutku više ne odgovara bazi podataka. Naravno, baza se može obrisati, a zatim će ORM kreirati novu verziju koja će odgovarati modelu, ali će taj postupak dovesti do gubitka postojećih podataka. Dakle, funkcija migracijskog sustava je osigurati da se, kao rezultat promjene sheme, sinkronizira s modelom podataka u aplikaciji bez gubitka postojećih podataka.

U ovom članku željeli bismo pogledati različite alate za upravljanje migracijama baza podataka. Nadamo se da će ova recenzija biti korisna programerima koji se suočavaju sa sličnim izborom.

Zadatak

Naša tvrtka trenutno aktivno razvija novu generaciju proizvoda – Docs Security Suite (DSS). Poslužiteljski dio je napisan u .Net Core, a Entity Framework Core se koristi kao DBMS. Prilikom dizajniranja aplikacije koristimo se pristupom Code First.

Model domene aplikacije izrađuje nekoliko programera istovremeno - svaki je odgovoran za svoj logički dio sustava.

Prethodna generacija DSS-a koristila je klasične Entity Framework Migrations (EF 6) kao sustav upravljanja migracijama. Međutim, nagomilale su se neke pritužbe protiv njega, a glavna je bila da EF-u nedostaje razuman pristup rješavanju sukoba verzija. Ta nas činjenica još uvijek uznemiruje kada ispravljamo greške u sklopu podrške, pa smo odlučili razmotriti alternativne mogućnosti.

Kao rezultat rasprave formirani su sljedeći zahtjevi za sustav upravljanja migracijama:

  1. Podrška za razne DBMS-ove. Potrebni su MS SQL Server, PostgreSQL, Oracle, ali potencijalno je moguće koristiti i druge
  2. Rad s ORM-om. U početku je bilo planirano koristiti EF Core, ali u fazi dizajna bili smo spremni razmotriti druge ORM-ove
  3. Automatsko generiranje migracija. Uzimajući u obzir razvoj Code Firsta, želio bih izbjeći potrebu za "rukopisnim" migracijama
  4. Sukobi verzija. U distribuiranom razvojnom okruženju, prilikom spajanja, EF Core može patiti od sukoba. To postaje značajan problem jer različite dijelove aplikacije stvaraju različiti programeri, pa morate potrošiti puno vremena na svaki
  5. Napredna dokumentacija i podrška. Ovdje, čini nam se, objašnjenje nije potrebno
  6. Besplatno. Kriterij je uvjetan, budući da sustavi nisu jako skupi ili skupi, ali idealni u praktičnosti, također smo bili spremni razmotriti

Kao rezultat malog istraživanja, pronađene su sljedeće opcije koje su poželjne za razmatranje:

  1. EF Core Migracije
  2. DBup
  3. Okrugla kućaE
  4. ThinkingHome.Migrator
  5. Fluent Migrator

A sada malo više detalja

Usporedba i izbor sustava za migraciju podataka
EntityFramework Core Migracije

Naravno, ovo je bila prva i glavna opcija za odabir. Izvorni instrument koji radi iz kutije bez ikakvog petljanja s tamburinom. Velika količina dokumentacije, službene i ne baš, jednostavnost itd. Međutim, pritužbe na klasični EF također su relevantne za EF Core.

Stoga su istaknute prednosti za EF Core:

  • Microsoftova podrška, dokumentacija, uključujući i na ruskom, ogromna zajednica
  • Automatsko generiranje migracija na temelju CodeFirsta
  • U usporedbi s EF 6, EF Core više ne pohranjuje snimku baze podataka. Kada radite s EF Core u Code Firstu, više nije potrebno implementirati bazu podataka
  • Budući da plešemo od Code Firsta, moguće je provesti jednu migraciju na sve potrebne pružatelje pristupa podacima
  • Što se tiče pružatelja usluga, podržan je PostgreSQL, podržan je Oracle, itd., itd., pa čak i MS SQL Server 

A također i nedostaci:

  • Rješavanje sukoba ostalo je na istoj razini. Potrebno je sekvencirati migracije i ažurirati snimke baze podataka
  • Ovisnost o modelima na kojima se generiraju migracije

DbUp

Usporedba i izbor sustava za migraciju podataka
dbup.github.io

DbUp je .NET biblioteka koju instalira NuGet i pomaže u unosu promjena u SQL Server. Prati koje su skripte promjena već izvršene i pokreće one koje su potrebne za ažuriranje baze podataka. Knjižnica je izrasla iz projekta open source blogging engine-a na ASP.NET-u i postoji pod licencom MIT-a, a kod je na GitHubu. Migracije su opisane pomoću T-SQL-a.

Koje su prednosti:

  • Podrška za veliki broj DBMS (MS SQL Server, PstgreSQL, MySQL)
  • Budući da su skripte napisane u T-SQL-u, izgledaju prilično jednostavne
  • Konflikti se također rješavaju pomoću SQL-a

A mane:

  • Uz svu raznolikost podržanih DBMS-ova, Oracle nije jedan od njih
  • Ne komunicira s ORM-om
  • Ručno pisanje T-SQL skripti nije ono čemu smo težili
  • Dokumentacija i zajednica su tako-tako, iako u smislu pisanja SQL skripti možda nisu potrebni.

Okrugla kućaE

Usporedba i izbor sustava za migraciju podataka
github.com/chucknorris/roundhouse

Ovaj alat za upravljanje migracijom, distribuiran pod licencom Apache 2.0, kao i prethodni, radi na T-SQL sustavu migracije. Očigledno, programeri su prioritet dali rješavanju tehničkih problema u vezi s podrškom za DBMS, umjesto stvaranja udobnog procesa razvoja.

Pros:

  • Podržava potrebne DBMS (uključujući Oracle)

Cons:

  • Oracle (kao i Access koji nam je nebitan) nije podržan na .NET Coreu, samo na .NET Full Frameworku
  • Ne radi s ORM-om
  • Postoji još manje dokumentacije nego prethodni alat
  • Opet – migracije se pišu skriptama

ThinkingHome.Migrator

Usporedba i izbor sustava za migraciju podataka

Alat za migraciju sheme baze podataka s verzijama na platformu .NET Core, distribuiran pod licencom MIT-a. Sam programer pisao je o njegovoj posljednjoj verziji prije gotovo godinu dana.

Pros:

  • Dizajnirano za .NET Core
  • Implementiran razgranati niz migracija
  • Implementirano bilježenje migracije

Cons:

  • Zadnji put ažurirano prije godinu dana. Navodno projekt nije podržan
  • Ne podržava Oracle (članak navodi da je to zbog nedostatka stabilne implementacije za .NET Core - ali to je bilo prije godinu dana)
  • Nema automatskog generiranja migracija

Sve u svemu, projekt izgleda obećavajuće, pogotovo ako se bude razvijao, ali odluku smo trebali donijeti ovdje i sada.

Fluent Migrator

Usporedba i izbor sustava za migraciju podataka
github.com/fluentmigrator/fluentmigrator

Najpopularniji alat za migraciju s velikom vojskom obožavatelja. Distribuira se pod licencom Apache 2.0. Kao što je navedeno u opisu, to je okvir za migraciju za .NET, sličan Ruby on Rails Migrations. Promjene sheme baze podataka opisane su u C# klasama.

Ovdje postoje prednosti:

  • Podrška za potrebne DBMS
  • Podrška za .NET Core
  • Velika razvijena zajednica
  • Konflikti između migracija rješavaju se sekvencijalno—naveden je redoslijed izvršavanja migracija. Osim toga, ako dođe do sukoba oko jednog entiteta, prilikom spajanja koda, on se rješava na isti način kao i u ostatku koda
  • Postoje profili koji se pokreću nakon uspješne migracije. I mogu nositi servisne funkcije.Zadnje ažuriranje bilo je prije mjesec dana, odnosno projekt je živ

Što se tiče minusa, evo ih:

  • Nema automatskog generiranja migracija
  • Nema veze s EF modelima
  • Nema snimaka baze podataka

Što je bio naš izbor?

Usporedba i izbor sustava za migraciju podataka

Burne rasprave vodile su se oko dva parametra - automatskog generiranja migracija i razumnog rješavanja sukoba. Drugi faktori bili su mnogo manje zastrašujući. Kao rezultat toga, na temelju rezultata rasprave, tim je odlučio koristiti Fluent Migrator u novom projektu. Jer će rješavanje sukoba u budućnosti donijeti mnogo više koristi.

Zaključci

Naravno, nema savršenih alata. Stoga smo morali dati prioritet našim "željama" da bismo napravili izbor. Međutim, za druge timove i druge zadatke, drugi čimbenici mogu biti odlučujući. Nadamo se da će vam ovaj članak pomoći da napravite izbor.

Izvor: www.habr.com

Dodajte komentar