2014-12-18 3 views
1

Мы использовали Liquibase для наших миграций базы данных, которая запускается с файла Migrations.xml. Это ссылается на все наши миграции, так это выглядит с эффектом:Миграции базы данных Liquibase, управление со временем

<include file="ABC.xml" relativeToChangelogFile="true" /> 
<include file="DEF.xml" relativeToChangelogFile="true" /> 
<include file="HIJ.xml" relativeToChangelogFile="true" /> 
... 

Однако, с течением времени, это выращенный очень долго. Глядя на рефакторинг, кто-нибудь решил эту проблему? Какие варианты доступны, чтобы сконцентрироваться на всех этих направлениях?

Благодаря

ответ

1

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

Как правило, я рекомендую вам просто изменить ваш журнал изменений, поскольку существующие шаги - это те, которые вы протестировали, развернули и знаете правильно. Изменение их представляет собой риск, который всегда можно избежать. Сохранение изменений в вашем журнале изменений также позволяет вам продолжать загружать новые базы данных dev/QA так же, как и старые экземпляры.

Несмотря на то, что существует значительное изменение производительности при наличии большого журнала изменений, Liquibase пытается свести его к минимуму и в основном просто разбирает файл изменений, а затем считывает из таблицы DATABASECHANGELOG, которая должна хорошо масштабироваться. Так как liquibase update обычно запускается редко, даже если для его запуска требуется несколько секунд, это часто не очень важно.

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

Самый простой подход - это просто удалить ссылки на ваши самые старые файлы изменений. Если вы знаете, что все ваши базы данных имеют изменения. Наборы в ABC.xml и DEF.xml уже применяются, вы можете просто удалить ссылки на них из своего основного журнала изменений, и все будет в порядке. Liquibase все равно, есть ли в таблице DATABASECHANGELOG «неизвестные» изменения. Если вы хотите продолжить развертывание dev и QA-сред с помощью ABC.xml и DEF.xml, вы можете создать второй унаследованный «master changelog.xml», который включает их, и при необходимости запустить оба списка изменений или убедиться, что устаревший журнал изменений содержит как старые и новые изменения.

Если вы не хотите полностью удалять ссылки changeLog, вы можете вручную изменить существующие наборы изменений. Часто есть несколько изменений, которые могут иметь большое значение в производительности обновления. Например, если индекс был создан, а затем удален, вы можете пропустить стоимость создания, удалив drop и создайте changeSets. Опять же, Liquibase не заботится о базах данных, которые уже запускали changeSets и не будут видеть их для новых. Если у вас есть несколько баз данных который может по-прежнему иметь индекс и вы хотите его удалить, вы можете использовать условие indexExists на drop changeSet afte Вы удаляете команду create changeset.

Предварительные условия могут быть дорогими, особенно в зависимости от поставщика базы данных. Иногда удаление ненужных предварительных проверок также может повысить производительность.

0

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

Возможно, это помогает сгруппировать изменения в версию вашего приложения. Я имею в виду, что в файле migrations.xml содержатся файлы для каждой версии вашего приложения, которые включают ваши «реальные» изменения. Таким образом, вы также можете легко определить, какой набор изменений принадлежит той версии вашего приложения.

Смежные вопросы