Comparación e selección de sistemas de migración de datos

Comparación e selección de sistemas de migración de datos

Comparación e selección de sistemas de migración de datos

O modelo de datos tende a cambiar durante o proceso de desenvolvemento, e nalgún momento xa non se corresponde coa base de datos. Por suposto, a base de datos pódese eliminar e, a continuación, o ORM creará unha nova versión que coincidirá co modelo, pero este procedemento levará á perda dos datos existentes. Así, a función do sistema de migración é garantir que, como resultado dun cambio de esquema, estea sincronizado co modelo de datos da aplicación sen perder os datos existentes.

Neste artigo, gustaríanos ver varias ferramentas para xestionar as migracións de bases de datos. Agardamos que esta revisión sexa útil para os desenvolvedores que se enfronten a unha opción similar.

Tarefa

A nosa empresa está a desenvolver activamente a próxima xeración de produtos: Docs Security Suite (DSS). A parte do servidor está escrita en .Net Core e Entity Framework Core úsase como DBMS. Cando deseñamos unha aplicación, utilizamos o enfoque Code First.

O modelo de dominio da aplicación é creado por varios desenvolvedores ao mesmo tempo; cada un é responsable da súa propia parte lóxica do sistema.

A xeración anterior de DSS utilizou o clásico Entity Framework Migrations (EF 6) como sistema de xestión da migración. Non obstante, acumuláronse algunhas queixas contra ela, a principal é que EF carece dun enfoque sensato para resolver os conflitos de versións. Este feito aínda nos molesta á hora de arranxar erros como parte do soporte, polo que decidimos considerar opcións alternativas.

Como resultado da discusión, formáronse os seguintes requisitos para o sistema de xestión da migración:

  1. Soporte para varios DBMS. Requírense MS SQL Server, PostgreSQL e Oracle, pero é posible usar outros
  2. Traballando con ORM. Inicialmente, estaba previsto usar EF Core, pero na fase de deseño estabamos preparados para considerar outros ORM
  3. Autoxeración de migracións. Tendo en conta o desenvolvemento de Code First, gustaríame evitar a necesidade de "escribir a man" as migracións
  4. Conflitos de versións. Nun entorno de desenvolvemento distribuído, ao fusionarse, EF Core pode sufrir conflitos. Isto convértese nun problema importante porque diferentes partes da aplicación son creadas por diferentes desenvolvedores, polo que tes que dedicar moito tempo a cada unha.
  5. Documentación e soporte avanzados. Aquí, nos parece, non fai falla ningunha explicación
  6. Libre. O criterio é condicional, xa que os sistemas non son moi caros nin caros, pero ideais en canto a comodidade, tamén estabamos preparados para considerar

Como resultado dunha pequena investigación, atopáronse as seguintes opcións e consideráronse desexables para a súa consideración:

  1. EF Core Migrations
  2. DBup
  3. Roundhouse E
  4. ThinkingHome.Migrator
  5. Migrador fluido

E agora un pouco máis de detalle

Comparación e selección de sistemas de migración de datos
Migracións básicas de EntityFramework

Por suposto, esta foi a primeira e principal opción a escoller. Un instrumento autóctono que funciona fóra da caixa sen xogar coa pandeireta. Unha gran cantidade de documentación, oficial e non así, sinxeleza, etc. Non obstante, as queixas realizadas sobre EF clásico tamén son bastante relevantes para EF Core.

Así, destacan as vantaxes de EF Core:

  • Soporte de Microsoft, documentación, incluso en ruso, enorme comunidade
  • Xeración automática de migracións baseadas en CodeFirst
  • En comparación con EF 6, EF Core xa non almacena unha instantánea da base de datos. Cando se traballa con EF Core en Code First, xa non é necesario implementar unha base de datos
  • Xa que estamos bailando desde Code First, é posible realizar unha migración a todos os provedores de acceso a datos necesarios
  • En canto aos provedores, é compatible con PostgreSQL, Oracle, etc., etc., e incluso MS SQL Server 

E tamén as desvantaxes:

  • A resolución de conflitos mantívose ao mesmo nivel. É necesario secuenciar as migracións e actualizar as instantáneas da base de datos
  • Dependencia dos modelos sobre os que se xeran as migracións

DbUp

Comparación e selección de sistemas de migración de datos
dbup.github.io

DbUp é unha biblioteca .NET que NuGet instala e axuda a facer cambios en SQL Server. Fai un seguimento dos scripts de cambios que xa se executaron e executa aqueles que son necesarios para actualizar a base de datos. A biblioteca xurdiu a partir dun proxecto para un motor de blogs de código aberto en ASP.NET e existe baixo unha licenza MIT, e o código está en GitHub. As migracións descríbense usando T-SQL.

Cales son as vantaxes:

  • Soporte para un gran número de DBMS (MS SQL Server, PstgreSQL, MySQL)
  • Dado que os scripts están escritos en T-SQL, parecen bastante sinxelos
  • Os conflitos tamén se resolven mediante SQL

E os contras:

  • Con toda a variedade de DBMS compatibles, Oracle non é un deles
  • Non interactúa con ORM
  • Escribir scripts T-SQL a man non é o que pretendíamos
  • A documentación e a comunidade son así, aínda que en canto á escritura de scripts SQL poden non ser necesarios.

Roundhouse E

Comparación e selección de sistemas de migración de datos
github.com/chucknorris/roundhouse

Esta ferramenta de xestión de migracións, distribuída baixo a licenza Apache 2.0, como a anterior, execútase no motor de migración T-SQL. Ao parecer, os desenvolvedores priorizaron resolver problemas técnicos relacionados co soporte de DBMS, en lugar de crear un proceso de desenvolvemento cómodo.

Pros:

  • Admite o DBMS necesario (incluíndo Oracle)

Contras:

  • Oracle (así como Access, que é irrelevante para nós) non é compatible con .NET Core, só con .NET Full Framework
  • Non funciona con ORM
  • Hai aínda menos documentación que a ferramenta anterior
  • De novo: as migracións son escritas por scripts

ThinkingHome.Migrator

Comparación e selección de sistemas de migración de datos

Unha ferramenta para a migración de esquemas de bases de datos versionadas á plataforma .NET Core, distribuída baixo a licenza MIT. O propio desarrollador escribiu sobre a súa última versión hai case un ano.

Pros:

  • Deseñado para .NET Core
  • Implementouse unha secuencia de ramificación de migracións
  • Rexistro de migración implementado

Contras:

  • Última actualización hai un ano. Ao parecer, o proxecto non está soportado
  • Non é compatible con Oracle (o artigo indica que isto se debe á falta dunha implementación estable para .NET Core, pero isto é hai un ano)
  • Non hai xeración automática de migracións

En xeral, o proxecto parece prometedor, especialmente se se desenvolvese, pero necesitabamos tomar unha decisión aquí e agora.

Migrador fluido

Comparación e selección de sistemas de migración de datos
github.com/fluentmigrator/fluentmigrator

A ferramenta de migración máis popular cun gran exército de fans. Distribuído baixo a licenza Apache 2.0. Como se indica na descrición, é un marco de migración para .NET, similar a Ruby on Rails Migrations. Os cambios no esquema da base de datos descríbense nas clases C#.

Aquí hai vantaxes:

  • Soporte para o DBMS necesario
  • Soporte .NET Core
  • Gran comunidade desenvolvida
  • Os conflitos entre migracións resólvense secuencialmente; especifícase a orde de execución das migracións. Ademais, se xurde un conflito arredor dunha entidade, ao fusionar o código, resolvese do mesmo xeito que no resto do código.
  • Hai perfís que se executan despois dunha migración exitosa. E poden levar funcións de servizo.A última actualización foi hai un mes, é dicir, o proxecto está vivo

En canto aos inconvenientes, aquí están:

  • Non hai xeración automática de migracións
  • Non hai conexión cos modelos EF
  • Non hai instantáneas da base de datos

Cal foi a nosa elección?

Comparación e selección de sistemas de migración de datos

Os acalorados debates xiraron en torno a dous parámetros: a xeración automática de migracións e a saneada resolución de conflitos. Outros factores foron moito menos aterradores. Como resultado, baseándose nos resultados da discusión, o equipo decidiu utilizar Fluent Migrator no novo proxecto. Porque resolver conflitos no futuro traerá moitos máis beneficios.

Descubrimentos

Por suposto, non hai ferramentas perfectas. Entón tivemos que priorizar os nosos "queres" para facer unha elección. Non obstante, para outros equipos e outras tarefas, outros factores poden ser decisivos. Agardamos que este artigo che axude a escoller.

Fonte: www.habr.com

Engadir un comentario