Babandingan jeung pilihan sistem migrasi data

Babandingan jeung pilihan sistem migrasi data

Babandingan jeung pilihan sistem migrasi data

Modél data condong robah salila prosés ngembangkeun, sarta di sawatara titik eta euweuh pakait jeung database. Tangtosna, pangkalan data tiasa dihapus, teras ORM bakal nyiptakeun versi énggal anu bakal cocog sareng modél, tapi prosedur ieu bakal nyababkeun leungitna data anu tos aya. Ku kituna, fungsi sistem migrasi nyaéta pikeun mastikeun yén, salaku hasil tina parobahan skéma, éta disingkronkeun jeung model data dina aplikasi tanpa kaleungitan data nu geus aya.

Dina tulisan ieu, urang hoyong ningali sababaraha alat pikeun ngatur migrasi database. Kami ngarepkeun ulasan ieu bakal mangpaat pikeun pamekar anu nyanghareupan pilihan anu sami.

tugas

Perusahaan kami ayeuna nuju aktip ngembangkeun produk generasi salajengna - Docs Security Suite (DSS). Bagian server ditulis dina .Net Core, sarta Entity Framework Core dipaké salaku DBMS. Nalika ngarancang aplikasi, kami nganggo pendekatan Code First.

Modél domain aplikasi dijieun ku sababaraha pamekar dina waktos anu sareng - masing-masing tanggung jawab bagian logis sorangan tina sistem.

DSS generasi samemehna ngagunakeun Entity Framework Migration klasik (EF 6) salaku sistem manajemen migrasi. Sanajan kitu, sababaraha keluhan geus akumulasi ngalawan eta, utamana nu EF lacks pendekatan waras pikeun resolving konflik versi. Kanyataan ieu masih ngaganggu kami nalika ngalereskeun bug salaku bagian tina dukungan, janten kami mutuskeun pikeun mertimbangkeun pilihan alternatif.

Salaku hasil diskusi, sarat di handap pikeun sistem manajemen migrasi kabentuk:

  1. Rojongan pikeun sagala rupa DBMSs. MS SQL Server, PostgreSQL, Oracle diperlukeun, tapi éta berpotensi mungkin ngagunakeun batur
  2. Gawe sareng ORM. Mimitina, éta rencanana ngagunakeun EF Core, tapi dina tahap desain kami siap mertimbangkeun ORMs séjén
  3. Generasi otomatis tina migrasi. Nyandak kana akun ngembangkeun Code First, Abdi hoyong nyingkahan kabutuhan "leungeun-nulis" migrasi
  4. Konflik Vérsi. Dina lingkungan pamekaran anu disebarkeun, nalika ngahiji, EF Core tiasa ngalaman konflik. Ieu janten masalah anu penting sabab bagian-bagian aplikasi anu béda-béda diciptakeun ku pamekar anu béda-béda, ku kituna anjeun kedah nyéépkeun seueur waktos dina unggal
  5. dokuméntasi canggih tur rojongan. Di dieu, sigana urang, euweuh katerangan diperlukeun
  6. Gratis. Kriteriana kondisional, sabab sistem henteu mahal pisan atanapi mahal, tapi idéal pikeun genah, kami ogé siap mertimbangkeun

Salaku hasil tina panalungtikan saeutik, pilihan di handap ieu kapanggih sarta kapanggih desirable pikeun tinimbangan:

  1. Migrasi Inti EF
  2. DBup
  3. BuleudE
  4. ThinkingHome.Migrator
  5. Migrasi lancaran

Tur ayeuna saeutik leuwih jéntré

Babandingan jeung pilihan sistem migrasi data
Migrasi Inti EntityFramework

Alami, ieu pilihan kahiji jeung utama pikeun milih. Alat asli anu dianggo kaluar tina kotak tanpa rebab. A jumlah badag dokuméntasi, resmi jeung teu kitu, kesederhanaan, jsb. Nanging, keluhan ngeunaan EF klasik ogé relevan pikeun EF Core.

Ku kituna, kaunggulan pikeun EF Core disorot:

  • rojongan Microsoft, dokuméntasi, kaasup di Rusia, komunitas badag
  • Generasi otomatis migrasi dumasar kana CodeFirst
  • Dibandingkeun sareng EF 6, EF Core henteu deui nyimpen snapshot tina pangkalan data. Nalika damel sareng EF Core dina Code First, henteu kedah deui nyebarkeun pangkalan data
  • Kusabab urang nari ti Code First, kasebut nyaéta dimungkinkeun pikeun ngalaksanakeun hiji migrasi ka sadaya panyadia aksés data diperlukeun
  • Ngeunaan panyadia, PostgreSQL dirojong, Oracle dirojong, jsb., jsb, komo MS SQL Server 

Sareng ogé kalemahan:

  • Resolusi konflik tetep dina tingkat anu sarua. Perlu ngaurutkeun migrasi sareng ngapdet snapshot database
  • Gumantung kana model dimana migrasi dihasilkeun

DbUp

Babandingan jeung pilihan sistem migrasi data
dbup.github.io

DbUp mangrupakeun perpustakaan .NET nu dipasang ku NuGet tur mantuan push parobahan SQL Server. Éta ngalacak skrip anu mana anu parantos dieksekusi sareng ngajalankeun anu diperyogikeun pikeun ngapdet pangkalan data. Perpustakaan tumbuh tina proyék pikeun mesin blogging open source dina ASP.NET sareng aya dina lisénsi MIT, sareng kodena aya dina GitHub. Migrasi digambarkeun ngagunakeun T-SQL.

Naon kaunggulan:

  • Rojongan pikeun sajumlah ageung DBMS (MS SQL Server, PstgreSQL, MySQL)
  • Kusabab naskah ditulis dina T-SQL, aranjeunna katingalina saderhana
  • Konflik ogé direngsekeun ngagunakeun SQL

Jeung kontra:

  • Kalayan sagala rupa DBMS anu dirojong, Oracle sanés salah sahijina
  • Teu berinteraksi sareng ORM
  • Nulis skrip T-SQL ku leungeun sanés anu kami tuju
  • Dokuméntasi sareng komunitas kitu-kitu waé, sanaos dina hal nyerat skrip SQL aranjeunna panginten henteu diperyogikeun.

BuleudE

Babandingan jeung pilihan sistem migrasi data
github.com/chucknorris/roundhouse

Alat manajemén migrasi ieu, disebarkeun dina lisénsi Apache 2.0, sapertos anu sateuacana, dijalankeun dina mesin migrasi T-SQL. Tétéla, pamekar prioritized ngarengsekeun masalah teknis ngeunaan rojongan DBMS, tinimbang nyieun hiji prosés ngembangkeun nyaman.

pro:

  • Ngarojong DBMS diperlukeun (kaasup Oracle)

kontra:

  • Oracle (sareng Aksés, anu henteu relevan pikeun urang) henteu dirojong dina .NET Core, ngan dina .NET Full Framework.
  • Teu dianggo sareng ORM
  • Aya malah kirang dokuméntasi ti alat saméméhna
  • Deui - migrasi ditulis ku naskah

ThinkingHome.Migrator

Babandingan jeung pilihan sistem migrasi data

Alat pikeun migrasi skéma database versi ka platform .NET Core, disebarkeun dina lisénsi MIT. Pamekar sorangan nyerat ngeunaan versi panganyarna na ampir sataun katukang.

pro:

  • Dirancang pikeun .NET Core
  • Dilaksanakeun runtuyan branching of migrasi
  • Dilaksanakeun logging migrasi

kontra:

  • Panungtungan diropéa sataun katukang. Tétéla proyék teu didukung
  • Henteu dirojong ku Oracle (artikel nyatakeun yén ieu kusabab kurangna palaksanaan anu stabil pikeun .NET Core - tapi ieu sataun katukang)
  • Henteu aya generasi migrasi otomatis

Gemblengna, proyék éta sigana ngajangjikeun, khususna upami éta bakal dikembangkeun, tapi urang kedah nyandak kaputusan di dieu sareng ayeuna.

Migrasi lancaran

Babandingan jeung pilihan sistem migrasi data
github.com/fluentmigrator/fluentmigrator

Alat migrasi anu pang populerna sareng tentara fans anu ageung. Disebarkeun dina lisénsi Apache 2.0. Sakumaha anu dinyatakeun dina katerangan, éta mangrupikeun kerangka migrasi pikeun .NET, sami sareng Ruby on Rails Migrations. Parobahan kana skéma database digambarkeun dina C # kelas.

Aya kaunggulan di dieu:

  • Rojongan pikeun DBMS diperlukeun
  • rojongan .NET Core
  • Komunitas maju ageung
  • Konflik antara migrasi direngsekeun sacara berurutan-urutan palaksanaan migrasi ditetepkeun. Salaku tambahan, upami konflik timbul di sabudeureun hiji éntitas, nalika ngahijikeun kodeu, éta bakal direngsekeun dina cara anu sami sareng dina sesa kode.
  • Aya profil anu dieksekusi saatos migrasi suksés. Sareng aranjeunna tiasa ngalaksanakeun fungsi jasa. Pembaruan terakhir sabulan kapengker, nyaéta, proyék éta hirup

Sedengkeun pikeun minuses, ieu aranjeunna:

  • Henteu aya generasi migrasi otomatis
  • Taya sambungan jeung model EF
  • Taya snapshots database

Naon pilihan urang?

Babandingan jeung pilihan sistem migrasi data

Debat dipanaskeun revolved sabudeureun dua parameter - generasi otomatis migrasi jeung resolusi waras konflik. Faktor-faktor anu sanés langkung pikasieuneun. Hasilna, dumasar kana hasil diskusi, tim mutuskeun pikeun ngagunakeun Fluent Migrator dina proyék anyar. Kusabab ngarengsekeun konflik di hareup bakal mawa leuwih mangpaat.

papanggihan

Tangtosna, teu aya alat anu sampurna. Janten urang kedah ngutamakeun "kahayang" urang ngadamel pilihan. Nanging, pikeun tim sanés sareng tugas sanés, faktor sanés tiasa janten decisive. Kami ngarepkeun tulisan ieu bakal ngabantosan anjeun milih pilihan.

sumber: www.habr.com

Tambahkeun komentar