2016-11-17 3 views
1

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

Multiple datasources migrations using Flyway in a Spring Boot application

Наша проблема, вероятно, связано с плохой дизайн БД, но это то, что она есть, и он не будет изменен быстро. Что касается фона, это приложение старой школы C# с MSSql DB, и в настоящее время мы просто используем командную строку FlyWay для оценки.

DB (ы) настроен таким образом.

  • AppDB
  • AppLogDB
  • AppAuditDB
  • AppArchiveDB
  • ...

У меня есть примеры, где AppDB видом/процедуры/и т.д., которые ссылаются на другие таблицы. Существуют также случаи, когда другие БД получают доступ к AppDB (хранимые процедуры IE ArchiveDB будут извлекаться из AppDB).

С этой зависимостью между различными базами данных, есть ли в любом случае FlyWay может обрабатывать миграцию/очистку в требуемом порядке? Например

Если у меня есть этот порядок сценариев

  • AppDB
    1. V1__Create_table
    2. V2__Create_proc_pointing_to_ArchiveDB
  • ArchiveDB
    1. V1__Create_table
    2. V2__Create_proc_pointing_to_AppDb

Как это могло быть переделаны, чтобы справиться с этим больше, как это

  • AppDB, ArchiveDB
    1. V1__AppDB_Create_table
    2. V2__ArchiveDB_Create_table
    3. V3__AppDB_Create_proc_pointing_to_ArchiveDB
    4. V4__ArchiveDB_Create_proc_pointing_to_AppDb

ответ

0

Это может быть непростой проблемой, особенно с ArchiveDB, который имеет циклические зависимости.

У нас есть аналогичная установка в проекте, над которым я работаю. На самом деле это разные схемы в базе данных Oracle, но мы решили сохранить отдельную таблицу schema_version для каждой схемы (чтобы отслеживать отображение информации на дисплее). Подход, который мы используем, - это число наших каталогов в преобладающем порядке зависимостей и обеспечение того, чтобы мы применялись в этом порядке. Ваш может быть:

10_AppDB 
20_AppLogDB 
30_AppAuditDB 
40_AppArchiveDB 

Круговые зависимости - это немного больше работы, чтобы обеспечить их правильное применение к чистой среде. К счастью, мы не сталкивались с этим, однако это может измениться в будущем. Подход, который я предлагаю, поражает развертывания (используя целевой параметр/свойство на migrate), так что объекты создаются в необходимом порядке. Затем при создании с нуля в новой среде вам нужно будет применить все базы данных к первой точке консолидации, а затем применить все базы данных к следующему и так далее. Основываясь на вашем примере:

# run flyway -target 2 for all DBs 
10_AppDB___/V1__AppDB_Create_table 
20_AppLogDB/V2__ArchiveDB_Create_table 
# run flyway -target 4 for all DBs 
10_AppDB___/V3__AppDB_Create_proc_pointing_to_ArchiveDB 
20_AppLogDB/V4__ArchiveDB_Create_proc_pointing_to_AppDb 
Смежные вопросы