Миграция схемы: инструменты данных SQL Server против Liquibase и Flyway

11

Это может показаться глупым вопросом, но я искал решения с открытым исходным кодом для миграции схем, а именно Liquibase и Flyway.

Однако мой начальник сказал мне, что SQL Server Data Tools (SSDT) ​​выполняет ту же работу. Я не уверен, если согласен, но я могу найти очень мало в Интернете, который напрямую сравнивает его с Liquibase и / или Flyway.

Я считаю, что SSDT является средством разработки, моделирования и проектирования данных для SQL Server, а также поддерживает сравнение схем (и их создание сценариев) и контроль источников. Он решает другую проблему, хотя в некоторых аспектах миграции схемы может быть некоторое совпадение с Liquibase / Flyway. Но как общий инструмент миграции схем, Liquibase и Flyway являются полностью выделенными инструментами, тогда как SSDT больше подходит для проектирования и разработки базы данных.

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

Нео
источник

Ответы:

17

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

Способ SSDT (и способ сравнения redgate sql) для развертывания состоит в том, чтобы объявить, что вы хотите, так что если вы хотите изменить таблицу, которая выглядит следующим образом:

create table a(id int)

к таблице, которая выглядит как:

create table a(id int, another_column varchar(12))

с SSDT вы просто меняете определение таблицы на второе и позволяете SSDT беспокоиться о том, как его обновить (может ли он изменить таблицу, добавить столбец или изменить порядок столбцов, поэтому вам потребуется перестроить таблицу и т. д.).

С помощью Liquibase (DbUp, ReadyRoll, ручные методы и т. Д.) В этом случае вы должны сами написать таблицу изменения и убедиться, что вы запускаете сценарии в правильном порядке, рассмотрите следующий сценарий:

  1. Выпуск 1 - создать столбец привет на таблице
  2. Выпуск 2 - переименовать столбец привет в joe_blogs
  3. Выпуск 3 - переименовать столбец joe_blogs в hello
  4. Выпуск 4 - создать столбец joe_blogs

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

Преимущества скриптов обновления (Liquibase, DbUp и т. Д.):

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

Преимущества сравнения / слияния (SSDT, Redgate SQL Compare):

  • Не нужно писать сценарии обновления
  • Получить любую конкретную версию легко. Просто сравните и объедините эту версию.

Недостатки скриптов обновления:

  • Должен быть запущен в порядке
  • Положитесь на людей без ошибок
  • Может быть медленным, особенно если у вас много изменений
  • Если ваша команда не очень дисциплинирована, базы данных в разных средах (dev, test, staging, prod и т. Д.) Часто становятся не синхронизированными, что делает любое тестирование недействительным
  • Понижение версии означает написание обратной версии всех сценариев, которые вы уже написали.

Недостатки использования сравнения / слияния:

  • Инструменты не на 100% доверяют, возможно, несправедливо
  • SSDT требует работающего проекта, во многих многих базах данных есть код, который на самом деле не компилируется и не запускается (например, удаленные таблицы, но не процедуры и т. Д.), Я видел это примерно в 8/10 базах, которые я унаследовал :)
  • Многие DBA / разработчики не решаются отказаться от разработки в SSMS / блокнот

Лично я действительно считаю, что SSDT - это профессиональная среда разработки, и это означает, что я могу сосредоточиться на написании полезного кода и тестов, а не на написании сценариев обновления, которые сами по себе являются лишь средством для достижения цели.

Вы спрашивали мнения, так что вы идете :)

издание

Эд Эллиотт
источник
1
Работает ли SSDT с чем-то еще, кроме SQL Server? например, Postgres?
a_horse_with_no_name
3
Нет «инструментов данных SQL-сервера» :)
Эд Эллиотт
1
Почему бы и нет? Пакет
служб
Если я не понял неправильно, я думаю, что мы говорим об управлении схемой базы данных, а не о создании пакетов ssis? Рад быть исправленным :)
Эд Эллиотт
1
Служба SSIS предназначена для перемещения данных и, как таковая, поддерживает подключения к широкому кругу систем. SSDT предназначен для разработки и сопровождения проектов баз данных SQL Server. Он имеет процесс сборки, который проверяет целевую версию SQL Server на совместимость сценариев и проверяет все ссылки, процедуры и т. Д. На синтаксис T-SQL.
Дейв
2

Я просто дополняю предвидение ответа.

Самая большая разница описана на веб-сайте Flyway в центральном месте:

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

Visual Studio + SSDT + SSIS = полнофункциональный инструмент ETL, имеющий только один реальный недостаток - он работает только под окнами. Для запуска пакетов требуется Windows + SQL Server, но работа в основном со всеми источниками.

Для переноса / переноса данных - много товаров на рынке. Коммерческие, открытые источники, сообщество / экспресс и т. Д.

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

a_vlad
источник
2

Я работал с инструментами данных сервера Sql и flyway. Используя SSDT, я получаю следующие преимущества:

  1. Я могу скомпилировать проект базы данных ... это означает, что нет никакого страха опустить столбец, на который ссылается представление, функция или сохраненные процессы. Это отличная особенность, потому что в прошлом о таких промахах мы узнали только после релиза.
  2. После успешной сборки SSDT генерирует так называемый «DACPAC». Подумайте об этом MSI с версией.

  3. Данный dacpac, например, с версией 5, может быть применен к базе данных с версией Dacpac 1,2,3,4 или 6,7,8 и т. Д. Если он применяется к 1-4, база данных будет обновлена. Если применяется к 6,7 и т. Д., DB будет понижен / откат. Будут предупреждения, если произойдет потеря данных, которая может быть подавлена. Таким образом, мы получаем отличную функцию отката, которая недоступна для других инструментов, таких как flyway и т. Д. При использовании flyway необходимо предоставить новый набор сценариев для отката.

  4. DACPAC применяет все изменения в одной транзакции; Это означает, что если при обновлении 5 таблиц произошли изменения, и одна из них не удалась, вся транзакция откатывается. Flyway также поддерживает это, но для каждого файла.

Однако SSDT и DACPAC специфичны для Microsoft SQL Server; Flyway может быть использован для различных баз данных.

Итак, суть в том, что если вы используете только SQL Server, решение о SSDT и DACPAC должно быть довольно простым.

VenVig
источник