Comparaci贸n y selecci贸n de sistemas de migraci贸n de datos.

Comparaci贸n y selecci贸n de sistemas de migraci贸n de datos.




El modelo de datos en el proceso de desarrollo tiene la propiedad de cambiar, y en alg煤n momento deja de corresponder a la base de datos. Por supuesto, la base de datos se puede eliminar, y luego ORM crear谩 una nueva versi贸n que corresponder谩 al modelo, pero dicho procedimiento conducir谩 a la p茅rdida de datos existentes. Por lo tanto, la funci贸n del sistema de migraci贸n es garantizar que, como resultado de cambiar el esquema, sincronizarlo con el modelo de datos en la aplicaci贸n sin perder los datos existentes.

En este art铆culo, nos gustar铆a considerar varias herramientas para administrar las migraciones de bases de datos. Esperamos que esta revisi贸n sea 煤til para los desarrolladores que enfrentan esta opci贸n.

Desaf铆o


Actualmente, nuestra empresa est谩 desarrollando activamente la pr贸xima generaci贸n del producto: Docs Security Suite (DSS). La parte del servidor est谩 escrita en .Net Core, y Entity Framework Core se usa respectivamente como DBMS. Cuando dise帽amos la aplicaci贸n, utilizamos el enfoque Code First.

El modelo de dominio de la aplicaci贸n es creado por varios desarrolladores al mismo tiempo, cada uno es responsable de su propia parte l贸gica del sistema.

En la generaci贸n anterior de DSS, el cl谩sico Entity Framework Migrations (EF 6) se utiliz贸 como un sistema de gesti贸n de la migraci贸n. Sin embargo, se han acumulado algunas reclamaciones en su contra, la principal de las cuales fue que EF carece de un enfoque sensato para resolver conflictos de versiones. Este hecho todav铆a nos molesta cuando se solucionan errores dentro del marco de soporte, por lo que se decidi贸 considerar opciones alternativas.

Como resultado de la discusi贸n, se formaron los siguientes requisitos para el sistema de gesti贸n de la migraci贸n:

  1. Soporte para varios DBMS. Servidor MS SQL obligatorio, PostgreSQL, Oracle, pero potencialmente puede usar otros
  2. Trabaja con ORM. Inicialmente, se supon铆a el uso de EF Core, pero en la etapa de dise帽o, otros ORM estaban listos para considerar
  3. Autogeneraci贸n de migraciones. Dado el desarrollo de Code First, me gustar铆a evitar la necesidad de "pintar con bol铆grafos" migraciones
  4. La versi贸n entra en conflicto. En un entorno de desarrollo distribuido con fusi贸n, EF Core puede bloquearse en conflictos. Esto se convierte en un problema importante, ya que diferentes partes de la aplicaci贸n son creadas por diferentes desarrolladores, por lo que debe dedicar mucho tiempo a cada
  5. Documentaci贸n avanzada y soporte. Aqu铆, nos parece, no se necesita explicaci贸n
  6. Gratis El criterio condicional, dado que no son sistemas muy caros o caros, pero ideales por conveniencia, tambi茅n est谩bamos listos para considerar

Como resultado de un peque帽o estudio, se encontraron las siguientes opciones y se consideraron deseables para su consideraci贸n:

  1. Ef migraciones principales
  2. Dbup
  3. RoundhousE
  4. ThinkingHome.Migrator
  5. Migrador fluido

Y ahora un poco mas



EntityFramework Core Migrations

Naturalmente, esta fue la primera y principal opci贸n de elecci贸n. Una herramienta nativa que funciona sin necesidad de bailar con una pandereta. Una gran cantidad de documentaci贸n, oficial y no muy simple, simplicidad, etc. Sin embargo, las afirmaciones presentadas al EF cl谩sico son bastante relevantes para el EF Core.

Por lo tanto, se destacan las ventajas de EF Core:

  • Soporte de Microsoft, documentaci贸n, incluso en ruso, una gran comunidad
  • Migraci贸n autom谩tica basada en CodeFirst
  • En comparaci贸n con EF 6, la instant谩nea de la base de datos ya no se almacena en EF Core. Cuando trabaje con EF Core en Code First, ya no tendr谩 que implementar una base de datos
  • Dado que estamos bailando desde Code First, es posible realizar una migraci贸n a todos los proveedores de acceso a datos requeridos
  • Con respecto a los proveedores: PostgreSQL, Oracle, etc., etc., etc., e incluso, MS SQL Server son compatibles.

Adem谩s de contras:

  • La resoluci贸n de conflictos se mantuvo en el mismo nivel. Es necesario construir una secuencia de migraciones y actualizar im谩genes de la base de datos.
  • Dependencia de modelos en funci贸n de los cuales se generan las migraciones.

Dbup


dbup.imtqy.com

DbUp es una biblioteca .NET instalada por NuGet y ayuda a transferir los cambios a SQL Server. Realiza un seguimiento de los scripts de cambio que ya se han ejecutado y ejecuta los que se necesitan para actualizar la base de datos. La biblioteca surgi贸 del proyecto de motor de blog de c贸digo abierto ASP.NET y existe bajo la licencia MIT, y el c贸digo est谩 en GitHub. Las migraciones se describen usando T-SQL.

驴Cu谩les son las ventajas?

  • Soporte para una gran cantidad de DBMS (MS SQL Server, PstgreSQL, MySQL)
  • Como los scripts est谩n escritos en T-SQL, parecen bastante simples
  • Los conflictos tambi茅n se resuelven usando SQL

A contras:

  • Con toda la variedad de DBMS compatibles, Oracle no se encuentra entre ellos.
  • No interact煤a con ORM
  • Escribir scripts T-SQL con bol铆grafos no es lo que est谩bamos buscando
  • La documentaci贸n y la comunidad son regulares, aunque pueden no ser necesarios en el contexto de la escritura de scripts SQL.

RoundhousE


github.com/chucknorris/roundhouse

Esta herramienta de administraci贸n de migraci贸n, distribuida bajo la licencia Apache 2.0, como la anterior, se ejecuta en el motor de migraci贸n T-SQL. Aparentemente, los desarrolladores se centraron en resolver problemas t茅cnicos relacionados con el soporte DBMS, en lugar de crear un proceso de desarrollo c贸modo.

Pros:

  • Admite el DBMS necesario (incluido Oracle)

Contras:

  • Oracle (as铆 como Access es irrelevante para nosotros) no es compatible con .NET Core, solo con .NET Full Framework
  • No funciona con ORM
  • Incluso hay menos documentaci贸n que la herramienta anterior.
  • Nuevamente, las migraciones se escriben en scripts.

ThinkingHome.Migrator



Una herramienta para la migraci贸n versionada de un esquema de base de datos para la plataforma .NET Core, distribuida bajo la licencia MIT. El desarrollador mismo escribi贸 sobre la 煤ltima versi贸n hace casi un a帽o .

Pros:

  • Afilado bajo .NET Core
  • Se implement贸 la secuencia de ramificaciones de migraciones
  • Registro de migraci贸n implementado

Contras:

  • 脷ltima actualizaci贸n: hace un a帽o. Aparentemente, el proyecto no es compatible.
  • No es compatible con Oracle (el art铆culo establece que esto se debe a la falta de una implementaci贸n estable para .NET Core, pero esto es hace un a帽o)
  • Falta la autogeneraci贸n de migraciones

En general, el proyecto parece prometedor, especialmente si se desarrollar铆a, pero necesit谩bamos tomar una decisi贸n aqu铆 y ahora.

Migrador fluido


github.com/fluentmigrator/fluentmigrator

La herramienta de migraci贸n m谩s popular con un gran ej茅rcito de fan谩ticos. Distribuido bajo la licencia Apache 2.0. Como se indica en la descripci贸n, es una plataforma de migraci贸n para .NET, similar a las migraciones de Ruby on Rails. Los cambios en el esquema de la base de datos se describen en clases en C #.

Hay ventajas:

  • Soporte para el DBMS necesario
  • Soporte de .NET Core
  • Gran comunidad desarrollada
  • Los conflictos de migraciones se resuelven secuencialmente: el orden de ejecuci贸n se indica para las migraciones. Adem谩s, si hay un conflicto alrededor de una entidad, al fusionar c贸digo, su soluci贸n se realiza de la misma manera que en el resto del c贸digo.
  • Hay perfiles que se ejecutan despu茅s de una migraci贸n exitosa. Y pueden llevar funciones de servicio. La 煤ltima actualizaci贸n fue hace un mes, es decir, el proyecto vive

En cuanto a los contras, aqu铆:

  • Falta la autogeneraci贸n de migraciones
  • Sin conexi贸n con modelos EF
  • No hay instant谩neas de la base de datos

驴Cu谩l fue nuestra elecci贸n?




El debate m谩s acalorado gir贸 en torno a dos par谩metros: la generaci贸n autom谩tica de migraciones y la resoluci贸n sensata de conflictos. Otros factores asustaron mucho menos. Como resultado, como resultado de la discusi贸n, el equipo decidi贸 utilizar Fluent Migrator en el nuevo proyecto. Para la resoluci贸n de conflictos en el futuro traer谩 muchas m谩s ventajas.

Conclusiones


Por supuesto, no hay herramientas perfectas. As铆 que tuvimos que priorizar nuestra "Lista de deseos" para elegir. Sin embargo, otros factores pueden ser decisivos para otros equipos y otras tareas. Esperamos que este art铆culo te ayude a tomar una decisi贸n.

Source: https://habr.com/ru/post/453930/


All Articles