JÀmförelse och val av datamigreringssystem

JÀmförelse och val av datamigreringssystem

JÀmförelse och val av datamigreringssystem

Datamodellen i utvecklingsprocessen har egenskapen att förÀndras, och vid en viss tidpunkt slutar den att motsvara databasen. Naturligtvis kan databasen tas bort, och dÄ kommer ORM att skapa en ny version som stÀmmer överens med modellen, men en sÄdan procedur skulle leda till förlust av befintliga data. DÀrför handlar migrationssystemets funktion om att, nÀr schemat Àndras, synkronisera det med datamodellen i applikationen utan att förlora befintliga data.

I denna artikel vill vi diskutera olika verktyg för att hantera databas-migrationer. Vi hoppas att denna översikt kommer att vara anvÀndbar för utvecklare som stÄr inför ett sÄdant val.

Uppgift

I vĂ„rt företag pĂ„gĂ„r just nu en aktiv utveckling av nĂ€sta generations produkt – Docs Security Suite (DSS). Serverdelen skrivs i .Net Core, och som databas anvĂ€nds dĂ€rmed Entity Framework Core. NĂ€r vi designar applikationen tillĂ€mpar vi ett Code First- tillvĂ€gagĂ„ngssĂ€tt.

DomĂ€nmodellen för applikationen skapas av flera utvecklare samtidigt – varje utvecklare ansvarar för sin logiska del av systemet.

I föregÄende generation av DSS anvÀndes klassiska Entity Framework Migrations (EF 6) som migrationshanteringssystem. Det har dock uppstÄtt vissa klagomÄl pÄ det, den frÀmsta Àr att EF saknar en rimlig metod för att hantera versionkonflikter. Denna punkt oroar oss fortfarande under buggfixering inom supporten, dÀrav beslutet att övervÀga alternativa alternativ.

Som resultat av diskussionen har följande krav formulerats för migrationshanteringssystemet:

  1. Stöd för olika databashanterare. Obligatoriskt MS SQL Server, PostgreSQL, Oracle, men potentiellt kan Àven andra anvÀndas.
  2. Arbeta med ORM. Initialt var det tÀnkt att anvÀnda EF Core, men under designfasen var vi öppna för att övervÀga andra ORM.
  3. Autogenerering av migrationer. Med tanke pÄ Code First-utveckling önskar vi undvika att "skriva manuellt" migrationer.
  4. Versionskonflikter. Under distribuerad utveckling kan EF Core krascha pÄ grund av konflikter vid sammanslagning. Detta blir ett betydande problem, eftersom olika delar av applikationen skapas av olika utvecklare, vilket gör att mycket tid gÄr förlorad pÄ varje.
  5. Utvecklad dokumentation och support. HÀr tror vi att förklaringar inte behövs.
  6. Kostnadsfrihet. Kriteriet Àr villkorligt, eftersom vi ocksÄ var beredda att övervÀga antingen inte sÄ dyra system eller dyra men perfekta i anvÀndarvÀnlighet.

Som ett resultat av en liten undersökning har följande alternativ identifierats och erkÀnns som önskvÀrda för övervÀgande:

  1. EF Core Migrationer
  2. DBup
  3. RoundhousE
  4. ThinkingHome.Migrator
  5. Fluent Migrator

Och nu lite mer i detalj

JÀmförelse och val av datamigreringssystem
EntityFramework Core Migrationer

Naturligtvis var detta det första och frÀmsta valet. Inbyggt verktyg som fungerar ur lÄdan utan nÄgra konstiga knep. En stor mÀngd dokumentation, bÄde officiell och inofficiell, enkelhet osv. Men de klagomÄl som riktades mot klassisk EF Àr fullt aktuella Àven för EF Core.

DÀrför finns följande fördelar med EF Core:

  • Microsoft stöd, dokumentation, Ă€ven pĂ„ svenska, ett enormt community.
  • Automatgenerering av migrationer baserat pĂ„ CodeFirst.
  • Till skillnad frĂ„n EF 6 lagras det inte lĂ€ngre en databasavbild i EF Core. NĂ€r man arbetar med EF Core Ă€r det nu inte nödvĂ€ndigt att implementera databasen i Code First.
  • Eftersom vi utgĂ„r frĂ„n Code First finns möjligheten att hantera en migration för alla nödvĂ€ndiga datatillgĂ„ngsleverantörer.
  • NĂ€r det gĂ€ller leverantörer stöds sĂ„vĂ€l PostgreSQL och Oracle som MS SQL Server ;)

Och hÀr Àr nackdelarna:

  • Konfliktlösningen Ă„terstĂ„r pĂ„ samma nivĂ„. Det Ă€r nödvĂ€ndigt att bygga en sekvens av migrationer och uppdatera databasavbilder.
  • Beroende av modellerna pĂ„ vilka migrationerna Ă€r baserade.

DbUp

JÀmförelse och val av datamigreringssystem
dbup.github.io

DbUp Àr ett .NET-bibliotek som installeras via NuGet och hjÀlper till att tillÀmpa Àndringar pÄ SQL Server. Det spÄrar vilka Àndringsskript som redan har körts och kör de som behövs för att uppdatera databasen. Biblioteket vÀxte fram ur ett open source-bloggmotorprojekt pÄ ASP.NET och finns under MIT-licensen, och koden ligger pÄ GitHub. Migrationer beskrivs med hjÀlp av T-SQL.

Vilka Àr fördelarna hÀr:

  • Stöd för ett stort antal databashanteringssystem (MS SQL Server, PostgreSQL, MySQL).
  • Eftersom skripten skrivs pĂ„ T-SQL Ă€r de ganska tydliga.
  • Konflikter löses ocksĂ„ med SQL.

Och nackdelarna:

  • Trots det stora utbudet av stödda databashanteringssystem ingĂ„r inte Oracle.
  • Det fungerar inte med ORM.
  • Att skriva skript i T-SQL "för hand" Ă€r inte vad vi strĂ€var efter.
  • Dokumentationen och communityn Ă€r sĂ„ dĂ€r, Ă€ven om de kanske inte behövs nĂ€r man skriver SQL-skript.

RoundhousE

JÀmförelse och val av datamigreringssystem
github.com/chucknorris/roundhouse

Detta migrationshanteringsverktyg, som distribueras under Apache 2.0-licensen, fungerar, precis som den föregÄende, med T-SQL migrationsmotorn. Utvecklarna tycks ha prioriterat lösningar pÄ tekniska problem som rör DB-stöd framför att skapa en smidig utvecklingsprocess.

Fördelar:

  • Stöder nödvĂ€ndiga databaser (inklusive Oracle)

Nackdelar:

  • Oracle (och den för oss irrelevanta Access) stöds inte pĂ„ .NET Core, endast pĂ„ .NET Full Framework.
  • Fungerar inte med ORM
  • Det finns Ă€nnu mindre dokumentation Ă€n för det föregĂ„ende verktyget.
  • Återigen - migrationer skrivs i skript.

ThinkingHome.Migrator

JÀmförelse och val av datamigreringssystem

Verktyg för versionsmigration av databasens schema för .NET Core-plattformen, distribueras under MIT-licensen. SjÀlv utvecklaren skrev om den senaste versionen nÀstan för ett Är sedan..

Fördelar:

  • Fokuserat pĂ„ .NET Core
  • En förgrenad sekvens av migrationer har implementerats.
  • Migrationer loggas.

Nackdelar:

  • Senaste uppdateringen var för ett Ă„r sedan. Projektet verkar inte stödjas.
  • Stöder inte Oracle (artikeln nĂ€mner att detta beror pĂ„ bristen pĂ„ en stabil implementation av .NET Core - men det var för ett Ă„r sedan).
  • Autogenerering av migrationer saknas.

I stort sett verkar projektet lovande, sÀrskilt om det skulle utvecklas, men vi behövde fatta beslut hÀr och nu.

Fluent Migrator

JÀmförelse och val av datamigreringssystem
github.com/fluentmigrator/fluentmigrator

Det mest populĂ€ra migrationsverktyget med en stor armĂ© av anhĂ€ngare. Distribueras under Apache 2.0-licensen. Enligt beskrivningen Ă€r det en migrationsplattform för .NET, liknande Ruby on Rails Migrations. Ändringar i databasens schema beskrivs i klasser pĂ„ C#.

Det finns fördelar hÀr:

  • Stöd för nödvĂ€ndiga databaser
  • Stöd för .NET Core
  • Ett stort och vĂ€letablerat community
  • Konflikter i migrationer löses sekventiellt - i migrationerna anges en utförandeordning. Dessutom, om det uppstĂ„r en konflikt kring en entitet, hanteras lösningen vid sammanslagning av koden pĂ„ samma sĂ€tt som i övrig kod.
  • Det finns profiler som körs efter att migrationen har genomförts framgĂ„ngsrikt och kan innehĂ„lla servicefunktioner. Senaste uppdateringen var för en mĂ„nad sedan, vilket innebĂ€r att projektet Ă€r aktivt.

Vad gÀller nackdelar finns det:

  • Autogenerering av migrationer saknas.
  • Saknar koppling till EF-modeller
  • Inga databasbilder

Vad blev vÄrt val?

JÀmförelse och val av datamigreringssystem

De het mest intensiva diskussionerna har handlat om tvĂ„ parametrar – automatisk migration och hantering av konflikter. Övriga faktorer oroade betydligt mindre. Efter diskussionen beslutade teamet att anvĂ€nda Fluent Migrator i det nya projektet. Att hantera konflikter kommer att ge mĂ„nga fler fördelar pĂ„ lĂ„ng sikt.

Slutsatser

SjÀlvklart finns det inga perfekta verktyg. Vi tvingades ocksÄ prioritera vÄra önskemÄl. Men för andra team och andra uppgifter kan andra faktorer vara avgörande. Vi hoppas att denna artikel hjÀlper dig att göra ditt val.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster