Sammenligning og valg av datamigrasjonssystemer

Sammenligning og valg av datamigrasjonssystemer

Sammenligning og valg av datamigrasjonssystemer

Datamodellen har en tendens til å endre seg under utviklingsprosessen, og på et tidspunkt samsvarer den ikke lenger med databasen. Selvfølgelig kan databasen slettes, og da vil ORM lage en ny versjon som vil matche modellen, men denne prosedyren vil føre til tap av eksisterende data. Dermed er funksjonen til migreringssystemet å sikre at det, som følge av en skjemaendring, synkroniseres med datamodellen i applikasjonen uten å miste eksisterende data.

I denne artikkelen vil vi se på ulike verktøy for å administrere databasemigreringer. Vi håper denne anmeldelsen vil være nyttig for utviklere som står overfor et lignende valg.

Oppgave

Vårt firma utvikler for tiden aktivt neste generasjons produkt – Docs Security Suite (DSS). Serverdelen er skrevet i .Net Core, og Entity Framework Core brukes som DBMS. Når vi designer en applikasjon, bruker vi Code First-tilnærmingen.

Applikasjonsdomenemodellen lages av flere utviklere samtidig - hver er ansvarlig for sin egen logiske del av systemet.

Den forrige generasjonen av DSS brukte den klassiske Entity Framework Migrations (EF 6) som migrasjonsstyringssystem. Noen klager har imidlertid samlet seg mot det, den viktigste er at EF mangler en fornuftig tilnærming til å løse versjonskonflikter. Dette faktum opprører oss fortsatt når vi fikser feil som en del av støtten, så vi bestemte oss for å vurdere alternative alternativer.

Som et resultat av diskusjonen ble følgende krav til migrasjonsstyringssystemet dannet:

  1. Støtte for ulike DBMS-er. MS SQL Server, PostgreSQL, Oracle kreves, men det er potensielt mulig å bruke andre
  2. Jobber med ORM. Opprinnelig var det planlagt å bruke EF Core, men på designstadiet var vi klare til å vurdere andre ORMer
  3. Automatisk generering av migrasjoner. Med tanke på utviklingen av Code First, vil jeg unngå behovet for å "håndskrive" migrasjoner
  4. Versjonskonflikter. I et distribuert utviklingsmiljø, ved sammenslåing, kan EF Core lide av konflikter. Dette blir et betydelig problem fordi forskjellige deler av applikasjonen er laget av forskjellige utviklere, så du må bruke mye tid på hver
  5. Avansert dokumentasjon og støtte. Her ser det ut til at det ikke trengs noen forklaring
  6. Gratis. Kriteriet er betinget, siden systemer ikke er veldig dyre eller dyre, men ideelle i bekvemmelighet, var vi også klare til å vurdere

Som et resultat av litt forskning ble følgende alternativer funnet og funnet ønskelige for vurdering:

  1. EF Core Migrations
  2. DBup
  3. RoundhouseE
  4. ThinkingHome.Migrator
  5. Flytende migrator

Og nå litt mer detalj

Sammenligning og valg av datamigrasjonssystemer
EntityFramework Core Migrations

Naturligvis var dette det første og viktigste alternativet å velge. Et innfødt instrument som fungerer ut av esken uten å fikle med en tamburin. En stor mengde dokumentasjon, offisiell og ikke så, enkelhet, etc. Men klagene på klassisk EF er også ganske relevante for EF Core.

Dermed blir fordelene for EF Core fremhevet:

  • Microsoft-støtte, dokumentasjon, inkludert på russisk, stort fellesskap
  • Autogenerering av migrasjoner basert på CodeFirst
  • Sammenlignet med EF 6, lagrer ikke lenger EF Core et øyeblikksbilde av databasen. Når du arbeider med EF Core i Code First, er det ikke lenger nødvendig å distribuere en database
  • Siden vi danser fra Code First, er det mulig å gjennomføre én migrering til alle nødvendige datatilgangsleverandører
  • Når det gjelder leverandører, støttes PostgreSQL, Oracle støttes, etc., etc., og til og med MS SQL Server 

Og også ulempene:

  • Konfliktløsning holdt seg på samme nivå. Det er nødvendig å sekvensere migrasjoner og oppdatere øyeblikksbilder av databasen
  • Avhengighet av modellene som migreringene genereres på

DbUp

Sammenligning og valg av datamigrasjonssystemer
dbup.github.io

DbUp er et .NET-bibliotek som er installert av NuGet og hjelper til med å pushe endringer til SQL Server. Den holder styr på hvilke endringsskript som allerede er utført og kjører de som er nødvendige for å oppdatere databasen. Biblioteket vokste ut av et prosjekt for en åpen kildekode blogging-motor på ASP.NET og eksisterer under en MIT-lisens, og koden er på GitHub. Migreringer er beskrevet ved hjelp av T-SQL.

Hva er fordelene:

  • Støtte for et stort antall DBMS (MS SQL Server, PstgreSQL, MySQL)
  • Siden skriptene er skrevet i T-SQL, ser de ganske enkle ut
  • Konflikter løses også ved hjelp av SQL

Og ulempene:

  • Med alle de forskjellige støttede DBMS-er, er ikke Oracle en av dem
  • Samhandler ikke med ORM
  • Å skrive T-SQL-skript for hånd er ikke det vi siktet til
  • Dokumentasjonen og fellesskapet er ujevne, selv om de kanskje ikke er nødvendige når det gjelder å skrive SQL-skript.

RoundhouseE

Sammenligning og valg av datamigrasjonssystemer
github.com/chucknorris/roundhouse

Dette migreringsadministrasjonsverktøyet, distribuert under Apache 2.0-lisensen, som den forrige, kjører på T-SQL-migreringsmotoren. Tilsynelatende prioriterte utviklerne å løse tekniske problemer angående DBMS-støtte, fremfor å lage en komfortabel utviklingsprosess.

Pros:

  • Støtter nødvendig DBMS (inkludert Oracle)

Cons:

  • Oracle (samt Access, som er irrelevant for oss) støttes ikke på .NET Core, kun på .NET Full Framework
  • Fungerer ikke med ORM
  • Det er enda mindre dokumentasjon enn det forrige verktøyet
  • Igjen – migreringer er skrevet av skript

ThinkingHome.Migrator

Sammenligning og valg av datamigrasjonssystemer

Et verktøy for versjonert databaseskjemamigrering til .NET Core-plattformen, distribuert under MIT-lisensen. Utvikleren skrev selv om den nyeste versjonen for snart ett år siden.

Pros:

  • Designet for .NET Core
  • Implementerte en forgrenende sekvens av migrasjoner
  • Implementerte migrasjonslogging

Cons:

  • Sist oppdatert for et år siden. Prosjektet er tydeligvis ikke støttet
  • Støttes ikke av Oracle (artikkelen sier at dette skyldes mangelen på en stabil implementering for .NET Core - men dette er et år siden)
  • Ingen automatisk generering av migrasjoner

Totalt sett ser prosjektet lovende ut, spesielt hvis det skulle utvikle seg, men vi måtte ta en beslutning her og nå.

Flytende migrator

Sammenligning og valg av datamigrasjonssystemer
github.com/fluentmigrator/fluentmigrator

Det mest populære migrasjonsverktøyet med en stor hær av fans. Distribuert under Apache 2.0-lisensen. Som det fremgår av beskrivelsen, er det et migrasjonsrammeverk for .NET, som ligner på Ruby on Rails Migrations. Endringer i databaseskjemaet er beskrevet i C#-klasser.

Det er fordeler her:

  • Støtte for nødvendig DBMS
  • .NET Core-støtte
  • Stort utviklet samfunn
  • Konflikter mellom migreringer løses sekvensielt – rekkefølgen for utførelse av migreringer er spesifisert. I tillegg, hvis det oppstår en konflikt rundt en enhet, ved sammenslåing av koden, løses den på samme måte som i resten av koden
  • Det er profiler som kjøres etter en vellykket migrering. Og de kan bære servicefunksjoner.Siste oppdatering var for en måned siden, det vil si at prosjektet lever

Når det gjelder minusene, her er de:

  • Ingen automatisk generering av migrasjoner
  • Ingen forbindelse med EF-modeller
  • Ingen øyeblikksbilder av databasen

Hva var vårt valg?

Sammenligning og valg av datamigrasjonssystemer

De heftige debattene dreide seg om to parametere – automatisk generering av migrasjoner og fornuftig løsning av konflikter. Andre faktorer var mye mindre skremmende. Som et resultat, basert på resultatene av diskusjonen, bestemte teamet seg for å bruke Fluent Migrator i det nye prosjektet. Fordi å løse konflikter i fremtiden vil gi mye flere fordeler.

Funn

Selvfølgelig er det ingen perfekte verktøy. Så vi måtte prioritere våre "ønsker" for å ta et valg. For andre team og andre oppgaver kan imidlertid andre faktorer være avgjørende. Vi håper denne artikkelen vil hjelpe deg å ta et valg.

Kilde: www.habr.com

Legg til en kommentar