Cymharu a dewis systemau mudo data

Cymharu a dewis systemau mudo data

Cymharu a dewis systemau mudo data

Mae'r model data yn tueddu i newid yn ystod y broses ddatblygu, ac ar ryw adeg mae'n peidio â chyfateb i'r gronfa ddata. Wrth gwrs, gellir dileu'r gronfa ddata, ac yna bydd yr ORM yn creu fersiwn newydd a fydd yn cyd-fynd â'r model, ond bydd y weithdrefn hon yn arwain at golli data presennol. Felly, swyddogaeth y system fudo yw sicrhau, o ganlyniad i newid sgema, ei fod yn cael ei gydamseru â'r model data yn y cais heb golli data presennol.

Yn yr erthygl hon, hoffem ystyried gwahanol offer ar gyfer rheoli mudo cronfa ddata. Gobeithiwn y bydd yr adolygiad hwn yn ddefnyddiol i ddatblygwyr sy'n wynebu dewis tebyg.

Gorchwyl

Ar hyn o bryd mae ein cwmni wrthi'n datblygu cenhedlaeth nesaf y cynnyrch - Docs Security Suite (DSS). Mae rhan y gweinydd wedi'i ysgrifennu yn .Net Core, a defnyddir y Craidd Fframwaith Endid fel y DBMS, yn y drefn honno. Wrth ddylunio cais, rydym yn defnyddio dull Cod yn Gyntaf.

Mae'r model parth cais yn cael ei greu gan sawl datblygwr ar yr un pryd - mae pob un yn gyfrifol am ei ran resymegol ei hun o'r system.

Defnyddiodd y genhedlaeth flaenorol o DSS y system Mudo Fframwaith Endid clasurol (EF 6) fel y system rheoli mudo. Fodd bynnag, mae rhai cwynion wedi cronni yn ei erbyn, a'r prif beth oedd nad oes gan EF agwedd gall tuag at ddatrys gwrthdaro rhwng fersiynau. Mae'r ffaith hon yn dal i beri gofid i ni wrth osod byg fel rhan o gefnogaeth, felly penderfynwyd ystyried opsiynau eraill.

O ganlyniad i'r drafodaeth, lluniwyd y gofynion canlynol ar gyfer y system rheoli mudo:

  1. Cefnogaeth i wahanol DBMS. Gweinydd MS SQL gorfodol, PostgreSQL, Oracle, ond mae'n bosibl defnyddio eraill
  2. Gweithio gyda ORM I ddechrau, roedd EF Core i fod i gael ei ddefnyddio, ond ar y cam dylunio, roedd ORMs eraill yn barod i'w hystyried
  3. Cynhyrchu ymfudiadau ceir. O ystyried datblygiad Cod yn Gyntaf, hoffwn osgoi'r angen i “baentio â beiros” ymfudiadau
  4. Fersiwn yn gwrthdaro. Mewn amgylchedd datblygu dosbarthedig, wrth uno, gall EF Core ddisgyn ar wrthdaro. Daw hyn yn broblem sylweddol gan fod gwahanol ddatblygwyr yn creu gwahanol rannau o'r rhaglen, felly mae'n rhaid i chi dreulio llawer o amser ar bob un.
  5. Dogfennaeth a chefnogaeth ddatblygedig. Yma, mae'n ymddangos i ni, nid oes angen esboniad.
  6. Rhad ac am ddim. Mae'r maen prawf yn amodol, gan nad oedd systemau drud iawn nac yn ddrud, ond yn ddelfrydol o ran hwylustod, roeddem hefyd yn barod i'w hystyried

O ganlyniad i astudiaeth fach, canfuwyd yr opsiynau canlynol ac ystyriwyd eu bod yn ddymunol i’w hystyried:

  1. Mudo Craidd EF
  2. DBup
  3. CrwnE
  4. MeddwlCartref.Migiwr
  5. Ymfudwr Rhugl

Ac yn awr ychydig mwy

Cymharu a dewis systemau mudo data
Mudiadau Craidd EntityFramework

Yn naturiol, hwn oedd y dewis cyntaf a phrif opsiwn. Offeryn brodorol sy'n gweithio allan o'r bocs heb unrhyw ddawnsio tambwrîn. Llawer iawn o ddogfennaeth, swyddogol ac nid felly, symlrwydd, ac ati. Fodd bynnag, mae'r honiadau a wneir yn erbyn yr EF clasurol yn eithaf perthnasol ar gyfer EF Core hefyd.

Felly, amlygir y manteision ar gyfer EF Core:

  • Cefnogaeth Microsoft, dogfennaeth, gan gynnwys yn Rwsieg, cymuned enfawr
  • Cynhyrchu ymfudiadau yn awtomatig yn seiliedig ar CodeFirst
  • O'i gymharu ag EF 6, nid yw EF Core bellach yn storio ciplun o'r gronfa ddata. Nid oes angen defnyddio'r gronfa ddata mwyach wrth weithio gydag EF Core yn Code First
  • Gan ein bod yn dawnsio o Code First, mae'n bosibl cynnal un ymfudiad i'r holl ddarparwyr mynediad data gofynnol
  • Fel ar gyfer darparwyr, mae'n cefnogi PostgreSQL, Oracle, ac ati, ac ati, a hyd yn oed MS SQL Server 

A hefyd anfanteision:

  • Mae datrys gwrthdaro yn aros yr un fath. Mae angen adeiladu dilyniant o fudiadau a diweddaru cipluniau cronfa ddata
  • Dibyniaeth ar fodelau sy'n seiliedig ar ba fudiadau a gynhyrchir

DbUp

Cymharu a dewis systemau mudo data
dbup.github.io

Mae DbUp yn llyfrgell .NET sy'n cael ei gosod gan NuGet ac sy'n helpu i wthio newidiadau i SQL Server. Mae'n cadw golwg ar ba sgriptiau newid sydd eisoes wedi'u gweithredu ac yn rhedeg y rhai sydd eu hangen i ddiweddaru'r gronfa ddata. Tyfodd y llyfrgell allan o brosiect injan blogio ffynhonnell agored ar ASP.NET ac mae'n bodoli o dan y drwydded MIT, ac mae'r cod ar GitHub. Disgrifir mudo gan ddefnyddio T-SQL.

Beth yw'r manteision yma:

  • Cefnogaeth i nifer fawr o DBMS (MS SQL Server, PstgreSQL, MySQL)
  • Gan fod y sgriptiau wedi'u hysgrifennu yn T-SQL, maen nhw'n edrych yn eithaf syml.
  • Mae gwrthdaro hefyd yn cael ei ddatrys gyda SQL

A'r anfanteision:

  • Gyda'r holl amrywiaeth o DBMS a gefnogir, nid yw Oracle yn un ohonynt
  • Nid yw'n rhyngweithio ag ORM
  • Nid ysgrifennu sgriptiau yn T-SQL gyda “handles” yw'r hyn yr oeddem yn ymdrechu amdano
  • Mae dogfennaeth a chymuned felly, er efallai na fydd eu hangen o ran ysgrifennu sgriptiau SQL.

CrwnE

Cymharu a dewis systemau mudo data
github.com/chucknorris/roundhouse

Mae'r offeryn rheoli mudo hwn, a ddosberthir o dan drwydded Apache 2.0, fel yr un blaenorol, yn rhedeg ar yr injan mudo T-SQL. Yn ôl pob tebyg, canolbwyntiodd y datblygwyr ar ddatrys problemau technegol o ran cefnogi'r DBMS, yn hytrach na chreu proses ddatblygu gyfforddus.

Manteision:

  • Yn cefnogi DBMS gofynnol (gan gynnwys Oracle)

Cons:

  • Nid yw Oracle (yn ogystal â Mynediad, sy'n amherthnasol i ni) yn cael ei gefnogi ar .NET Core, dim ond ar .NET Fframwaith Llawn
  • Nid yw'n gweithio gyda ORM
  • Hyd yn oed llai o ddogfennaeth na'r offeryn blaenorol
  • Eto - mae mudo yn cael ei ysgrifennu gan sgriptiau

MeddwlCartref.Migiwr

Cymharu a dewis systemau mudo data

Offeryn ar gyfer mudo fersiwn fersiwn o sgema'r gronfa ddata i'r llwyfan .NET Core, a ddosberthir o dan y drwydded MIT. Ysgrifennodd y datblygwr ei hun am ei fersiwn ddiweddaraf bron i flwyddyn yn ôl.

Manteision:

  • Wedi'i deilwra ar gyfer .NET Core
  • Wedi gweithredu dilyniant canghennog o fudiadau
  • Gweithredwyd logio mudo

Cons:

  • Roedd y diweddariad diwethaf flwyddyn yn ôl. Mae'n debyg nad yw'r prosiect yn cael ei gefnogi
  • Heb ei gefnogi gan Oracle (mae'r erthygl yn nodi bod hyn oherwydd diffyg gweithrediad sefydlog ar gyfer .NET Core - ond mae hyn flwyddyn yn ôl)
  • Auto-genhedlaeth o fudiadau ar goll

Yn gyffredinol, mae'r prosiect yn edrych yn addawol, yn enwedig os yw'n datblygu, ond roedd angen i ni wneud penderfyniad yn awr.

Ymfudwr Rhugl

Cymharu a dewis systemau mudo data
github.com/fluentmigrator/fluentmigrator

Yr offeryn mudo mwyaf poblogaidd gyda sylfaen gefnogwr mawr. Wedi'i ddosbarthu o dan drwydded Apache 2.0. Fel y nodwyd yn y disgrifiad, yn fframwaith mudo ar gyfer .NET, yn debyg i Ruby on Rails Migrations. Disgrifir newidiadau i sgema cronfa ddata mewn dosbarthiadau C#.

Mae yna fanteision yma:

  • Cefnogaeth i'r DBMS gofynnol
  • Cefnogaeth craidd .NET
  • Cymuned ddatblygedig fawr
  • Mae gwrthdaro ymfudo yn cael ei ddatrys yn ddilyniannol - mae'r gorchymyn mudo wedi'i nodi. Yn ogystal, os bydd gwrthdaro yn codi o amgylch un endid, wrth uno'r cod, caiff ei ddatrys yn yr un modd ag yng ngweddill y cod.
  • Mae yna broffiliau sy'n rhedeg ar ôl mudo llwyddiannus. A gallant gyflawni swyddogaethau gwasanaeth.Roedd y diweddariad diwethaf fis yn ôl, hynny yw, mae'r prosiect yn byw

O ran yr anfanteision, yna dyma:

  • Auto-genhedlaeth o fudiadau ar goll
  • Cyfathrebu ar goll gyda modelau EF
  • Dim cipluniau db

Beth oedd ein dewis?

Cymharu a dewis systemau mudo data

Roedd y ddadl boethaf yn ymwneud â dau baramedr - cynhyrchu ceir o fudiadau a datrys gwrthdaro yn gall. Roedd ffactorau eraill yn dychryn llawer llai. O ganlyniad, yn seiliedig ar ganlyniadau'r drafodaeth, penderfynodd y tîm ddefnyddio Fluent Migrator yn y prosiect newydd. Ar gyfer datrys gwrthdaro yn y dyfodol bydd yn dod â llawer mwy o fanteision.

Canfyddiadau

Wrth gwrs, nid oes unrhyw offer perffaith. Felly roedd yn rhaid i ni flaenoriaethu ein "Rhestr dymuniadau" i wneud dewis. Fodd bynnag, ar gyfer timau eraill a thasgau eraill, gall ffactorau eraill fod yn bendant. Gobeithiwn y bydd yr erthygl hon yn eich helpu i wneud eich dewis.

Ffynhonnell: hab.com

Ychwanegu sylw