Poređenje i izbor sistema za migraciju podataka

Poređenje i izbor sistema za migraciju podataka

Poređenje i izbor sistema za migraciju podataka

Model podataka ima tendenciju da se menja tokom procesa razvoja i u nekom trenutku prestaje da odgovara bazi podataka. Naravno, baza podataka se može obrisati i tada će ORM kreirati novu verziju koja će odgovarati modelu, ali ova procedura će dovesti do gubitka postojećih podataka. Dakle, funkcija sistema migracije je osigurati da, kao rezultat promjene šeme, bude sinkroniziran s modelom podataka u aplikaciji bez gubitka postojećih podataka.

U ovom članku želimo razmotriti različite alate za upravljanje migracijama baze podataka. Nadamo se da će ova recenzija biti korisna za programere koji su suočeni sa sličnim izborom.

Cilj

Naša kompanija trenutno aktivno razvija sljedeću generaciju proizvoda - Docs Security Suite (DSS). Serverski dio je napisan u .Net Core, a Entity Framework Core se koristi kao DBMS, respektivno. Prilikom dizajniranja aplikacije koristimo pristup Code First.

Model domene aplikacije kreira nekoliko programera u isto vrijeme - svaki je odgovoran za svoj logički dio sistema.

Prethodna generacija DSS-a koristila je klasične migracije okvira entiteta (EF 6) kao sistem upravljanja migracijama. Međutim, protiv njega su se nakupile neke pritužbe, od kojih je glavna bila da EF-u nedostaje razuman pristup rješavanju sukoba verzija. Ova činjenica nas i dalje uznemirava kada se ispravljaju greške u sklopu podrške, pa je odlučeno da se razmotri alternativna opcija.

Kao rezultat diskusije formirani su sljedeći zahtjevi za sistem upravljanja migracijama:

  1. Podrška za razne DBMS. Obavezni MS SQL Server, PostgreSQL, Oracle, ali je potencijalno moguće koristiti i druge
  2. Rad sa ORM-om U početku je trebalo da se koristi EF Core, ali u fazi projektovanja, drugi ORM-ovi su bili spremni za razmatranje
  3. Automatsko generiranje migracija. S obzirom na razvoj Code First-a, želio bih izbjeći potrebu za migracijama „slikanja olovkama“.
  4. Sukobi verzija. U distribuiranom razvojnom okruženju, kada se spaja, EF Core može pasti na konflikte. Ovo postaje značajan problem jer različite dijelove aplikacije kreiraju različiti programeri, tako da morate potrošiti dosta vremena na svaki
  5. Izrađena dokumentacija i podrška. Ovdje, čini nam se, nije potrebno nikakvo objašnjenje.
  6. Besplatno. Kriterijum je uslovljen, budući da nisu baš skupi sistemi ili skupi, ali idealni po praktičnosti, takođe smo bili spremni da razmotrimo

Kao rezultat male studije, pronađene su sljedeće opcije koje se smatraju poželjnim za razmatranje:

  1. EF Core Migracije
  2. DBup
  3. RoundhouseE
  4. ThinkingHome.Migrator
  5. Fluent Migrator

A sada još malo

Poređenje i izbor sistema za migraciju podataka
EntityFramework Core Migracije

Naravno, ovo je bila prva i glavna opcija izbora. Izvorni instrument koji radi iz kutije bez ikakvog plesanja tambure. Velika količina dokumentacije, službene i ne baš, jednostavnosti itd. Međutim, tvrdnje iznesene protiv klasičnog EF-a su prilično relevantne i za EF Core.

Dakle, prednosti su istaknute za EF Core:

  • Microsoft podrška, dokumentacija, uključujući i na ruskom, ogromna zajednica
  • Automatsko generiranje migracija na osnovu CodeFirsta
  • U poređenju sa EF 6, EF Core više ne pohranjuje snimak baze podataka. Postavljanje baze podataka više nije potrebno kada radite s EF Core u Code First
  • Budući da plešemo od Code First-a, moguće je izvršiti jednu migraciju na sve potrebne provajdere pristupa podacima
  • Što se tiče provajdera, on podržava PostgreSQL, Oracle, itd, itd., pa čak i MS SQL Server 

I takođe nedostaci:

  • Rješavanje sukoba ostaje isto. Potrebno je izgraditi niz migracija i ažurirati snimke baze podataka
  • Ovisnost o modelima na osnovu kojih se generiraju migracije

DbUp

Poređenje i izbor sistema za migraciju podataka
dbup.github.io

DbUp je .NET biblioteka koju instalira NuGet i koja pomaže u guranju promjena na SQL Server. Prati koje su skripte promjene već izvršene i pokreće one potrebne za ažuriranje baze podataka. Biblioteka je izrasla iz open source projekta za blogovanje na ASP.NET-u i postoji pod MIT licencom, a kod se nalazi na GitHubu. Migracije su opisane korištenjem T-SQL-a.

Koje su prednosti ovdje:

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

I minusi:

  • Uz svu raznolikost podržanih DBMS-a, Oracle nije jedan od njih
  • Ne stupa u interakciju s ORM-om
  • Pisanje skripti u T-SQL-u sa “ručicama” nije ono čemu smo težili
  • Dokumentacija i zajednica je tako-tako, iako u smislu pisanja SQL skripti, možda neće biti potrebni.

RoundhouseE

Poređenje i izbor sistema za migraciju podataka
github.com/chucknorris/roundhouse

Ovaj alat za upravljanje migracijama, distribuiran pod licencom Apache 2.0, kao i prethodni, radi na T-SQL platformi za migracije. Očigledno, programeri su se fokusirali na rješavanje tehničkih problema u smislu podrške DBMS-u, umjesto na kreiranje udobnog procesa razvoja.

Pros:

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

Cons:

  • Oracle (kao i Access, koji je za nas nebitan) nije podržan na .NET Core, samo na .NET Full Framework-u
  • Ne radi sa ORM-om
  • Čak i manje dokumentacije od prethodnog alata
  • Opet - migracije se pišu skriptama

ThinkingHome.Migrator

Poređenje i izbor sistema za migraciju podataka

Alat za verzionisanu migraciju šeme baze podataka na .NET Core platformu, distribuiran pod MIT licencom. Sam programer je pisao o njegovoj najnovijoj verziji prije skoro godinu dana.

Pros:

  • Prilagođeno za .NET Core
  • Implementiran niz grananja migracija
  • Implementirano evidentiranje migracije

Cons:

  • Posljednje ažuriranje je bilo prije godinu dana. Očigledno da projekat nije podržan
  • Ne podržava Oracle (članak navodi da je to zbog nedostatka stabilne implementacije za .NET Core - ali to je prije godinu dana)
  • Nedostaje automatsko generiranje migracija

Generalno, projekat izgleda obećavajuće, pogotovo ako se razvio, ali smo morali da donesemo odluku ovde i sada.

Fluent Migrator

Poređenje i izbor sistema za migraciju podataka
github.com/fluentmigrator/fluentmigrator

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

Ima tu pluseva:

  • Podrška za potreban DBMS
  • Podrška za .NET Core
  • Velika razvijena zajednica
  • Sukobi migracije se rješavaju uzastopno - specificira se redoslijed migracije. 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 je bilo prije mjesec dana, odnosno projekt je živ

Što se tiče minusa, evo:

  • Nedostaje automatsko generiranje migracija
  • Nedostaje komunikacija sa EF modelima
  • Nema db snimaka

Šta je bio naš izbor?

Poređenje i izbor sistema za migraciju podataka

Najžešća debata vrtela se oko dva parametra - automatskog generisanja migracija i razumnog rješavanja sukoba. Drugi faktori su uplašili mnogo manje. Kao rezultat toga, na osnovu rezultata diskusije, tim je odlučio da koristi Fluent Migrator u novom projektu. Za rješavanje sukoba u budućnosti će donijeti mnogo veći broj pluseva.

nalazi

Naravno, ne postoje savršeni alati. Tako da smo morali da odredimo prioritet na našoj "listi želja" da bismo napravili izbor. Međutim, za druge timove i druge zadatke, drugi faktori mogu biti odlučujući. Nadamo se da će vam ovaj članak pomoći da napravite svoj izbor.

izvor: www.habr.com

Dodajte komentar