Сравнение И Выбор Систем Миграции Данных



Сравнение и выбор систем миграции данных

Сравнение и выбор систем миграции данных

Модель данных имеет свойство меняться в процессе разработки и в какой-то момент перестает соответствовать базе данных.

Конечно, базу данных можно удалить, и тогда ORM создаст новую версию, которая будет соответствовать модели, но эта процедура приведет к потере существующих данных.

Таким образом, функция системы миграции заключается в том, чтобы в результате изменения схемы она синхронизировалась с моделью данных в приложении без потери существующих данных.

В этой статье мы хотели бы рассмотреть различные инструменты для управления миграцией баз данных.

Надеемся, этот обзор будет полезен разработчикам, оказавшимся перед подобным выбором.



Задача

Наша компания в настоящее время активно разрабатывает продукт следующего поколения — Docs Security Suite (DSS).

Серверная часть написана на .

Net Core, а в качестве СУБД используется Entity Framework Core. При разработке приложения мы используем подход Code First. Модель предметной области приложения создается одновременно несколькими разработчиками — каждый отвечает за свою логическую часть системы.

Предыдущее поколение DSS использовало классическую Entity Framework Migrations (EF 6) в качестве системы управления миграцией.

Однако к нему накопились некоторые нарекания, главная из которых — отсутствие у EF вменяемого подхода к разрешению конфликтов версий.

Этот факт до сих пор расстраивает нас при исправлении ошибок в рамках поддержки, поэтому мы решили рассмотреть альтернативные варианты.

В результате обсуждения были сформированы следующие требования к системе управления миграцией:

  1. Поддержка различных СУБД.

    Требуется MS SQL Server, PostgreSQL, Oracle, но потенциально возможно использование и других.

  2. Работаем с ОРМ.

    Изначально планировалось использовать EF Core, но на этапе проектирования мы были готовы рассмотреть и другие ORM.

  3. Автогенерация миграций.

    Учитывая развитие Code First, хотелось бы избежать необходимости «писать» миграции вручную.

  4. Конфликты версий.

    В распределенной среде разработки при слиянии EF Core может столкнуться с конфликтами.

    Это становится существенной проблемой, поскольку разные части приложения создаются разными разработчиками, поэтому на каждую приходится тратить много времени.

  5. Расширенная документация и поддержка.

    Здесь, нам кажется, пояснения не нужны.

  6. Бесплатно.

    Критерий условный, так как системы не очень дорогие и дорогие, но идеальные по удобству, мы тоже готовы были рассмотреть

В результате небольшого исследования были найдены и признаны желательными к рассмотрению следующие варианты:
  1. Основные миграции EF
  2. ДБуп
  3. РаундхаусE
  4. ДумаяДомой.

    Мигратор

  5. Свободный мигратор


А теперь немного подробнее



Сравнение и выбор систем миграции данных

Основные миграции EntityFramework Естественно, это был первый и основной вариант выбора.

Родной инструмент, работающий из коробки без всяких возни с бубном.

Большой объем документации, официальная и не очень, простота и т.д. Впрочем, претензии к классическому EF вполне актуальны и для EF Core. Таким образом, выделены преимущества EF Core:

  • Поддержка Microsoft, документация, в том числе на русском языке, огромное сообщество.

  • Автогенерация миграций на основе CodeFirst
  • По сравнению с EF 6, EF Core больше не хранит моментальный снимок базы данных.

    При работе с EF Core в Code First больше не требуется развертывание базы данных.

  • Поскольку мы танцуем от Code First, то можно провести одну миграцию ко всем необходимым провайдерам доступа к данным.

  • Что касается провайдеров, то поддерживается PostgreSQL, поддерживается Oracle и т.д. и т.п.

    и даже MS SQL Server 

А также недостатки:
  • Разрешение конфликтов осталось на прежнем уровне.

    Необходимо упорядочить миграцию и обновить снимки базы данных.

  • Зависимость от моделей, на которых генерируются миграции
ДбУп

Сравнение и выбор систем миграции данных

dbup.github.io DbUp — это библиотека .

NET, которая устанавливается NuGet и помогает вносить изменения в SQL Server. Он отслеживает, какие сценарии изменений уже были выполнены, и запускает те, которые необходимы для обновления базы данных.

Библиотека выросла из проекта механизма ведения блогов с открытым исходным кодом на ASP.NET и существует под лицензией MIT, а код находится на GitHub. Миграции описываются с помощью T-SQL. Каковы преимущества:

  • Поддержка большого количества СУБД (MS SQL Server, PstgreSQL, MySQL)
  • Поскольку скрипты написаны на T-SQL, они выглядят довольно просто.

  • Конфликты также разрешаются с помощью SQL.
И минусы:
  • При всем многообразии поддерживаемых СУБД Oracle не входит в их число.

  • Не взаимодействует с ORM
  • Написание T-SQL-скриптов вручную — это не то, к чему мы стремились.

  • Документация и сообщество так себе, хотя с точки зрения написания SQL-скриптов они могут и не понадобиться.

РаундхаусE

Сравнение и выбор систем миграции данных

github.com/chucknorris/roundhouse Этот инструмент управления миграцией, распространяемый по лицензии Apache 2.0, как и предыдущий, работает на механизме миграции T-SQL. Судя по всему, разработчики поставили на первое место решение технических проблем по поддержке СУБД, а не создание комфортного процесса разработки.

Плюсы:

  • Поддерживает необходимые СУБД (в том числе Oracle)
Минусы:
  • Oracle (как и Access, который для нас неактуален) не поддерживается на .

    NET Core, только на .

    NET Full Framework.

  • Не работает с ОРМ
  • Документации еще меньше, чем у предыдущего инструмента.

  • Опять же — миграции пишутся скриптами
ДумаяДомой.

Мигратор

Сравнение и выбор систем миграции данных

Инструмент для миграции схемы версионной базы данных на платформу .

NET Core, распространяемый по лицензии MIT. О ее последней версии сам разработчик написал почти год назад. .

Плюсы:

  • Разработан для .

    NET Core.

  • Реализована ветвящаяся последовательность миграций.

  • Реализовано ведение журнала миграции.

Минусы:
  • Последнее обновление год назад. Судя по всему проект не поддерживается
  • Не поддерживается Oracle (в статье указано, что это связано с отсутствием стабильной реализации для .

    NET Core — но это было год назад)

  • Нет автоматического создания миграций
В целом проект выглядит многообещающе, особенно если его развивать, но принимать решение нужно было здесь и сейчас.

Свободный мигратор

Сравнение и выбор систем миграции данных

github.com/fluentmigrator/fluentmigrator Самый популярный инструмент миграции с большой армией поклонников.

Распространяется по лицензии Apache 2.0. Как указано в описании, это платформа миграции для .

NET, похожая на Ruby on Rails Migrations. Изменения в схеме базы данных описаны в классах C#.

Здесь есть свои преимущества:

  • Поддержка необходимых СУБД
  • Поддержка .

    NET Core

  • Большое развитое сообщество
  • Конфликты между миграциями решаются последовательно — указывается порядок выполнения миграций.

    Кроме того, если вокруг одной сущности возникает конфликт, то при слиянии кода он разрешается так же, как и в остальном коде.

  • Есть профили, которые выполняются после успешной миграции.

    И они могут нести сервисные функции.

    Последнее обновление было месяц назад, то есть проект жив

Что касается минусов, то вот они:
  • Нет автоматического создания миграций
  • Нет связи с моделями EF
  • Нет снимков базы данных


Каким был наш выбор?



Сравнение и выбор систем миграции данных

Жаркие споры вращались вокруг двух параметров — автоматической генерации миграций и разумного разрешения конфликтов.

Другие факторы были гораздо менее пугающими.

В итоге по итогам обсуждения команда решила использовать Fluent Migrator в новом проекте.

Потому что разрешение конфликтов в будущем принесет гораздо больше пользы.



выводы

Конечно, идеальных инструментов не бывает. Поэтому нам пришлось расставить приоритеты в своих «желаниях», чтобы сделать выбор.

Однако для других команд и других задач решающими могут оказаться иные факторы.

Надеемся, эта статья поможет вам сделать выбор.

Теги: #Управление разработкой #Хранение данных #базы данных #.

NET #.

net core #миграция баз данных

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.