gpt4 book ai didi

c# - FlyWay 与相互依赖的数据库

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:15 25 4
gpt4 key购买 nike

我看过有关 FlyWay 处理多个数据库的帖子,但它似乎是针对独立的数据库。据我了解,FlyWay 每个实例只能处理一个数据库,因此创建/清理数据库模式是完全独立的。

Multiple datasources migrations using Flyway in a Spring Boot application

我们的问题可能源于糟糕的数据库设计,但它就是这样,不会很快改变。至于背景,这是一个带有 MSSql DB 的 C# 老派应用程序,我们目前只是使用 FlyWay 命令行进行评估。

数据库是这样设置的。

  • 应用数据库
  • 应用日志数据库
  • AppAuditDB
  • AppArchiveDB
  • ...

我有一些示例,其中 AppDB 具有引用其他表的 View /过程/等。也有其他DB访问AppDB的情况(IE ArchiveDB存储过程会从AppDB拉取)。

由于不同数据库之间存在这种依赖关系,FlyWay 是否可以按要求的顺序处理迁移/清理?例如

如果我有这样的脚本顺序

  • 应用数据库
    1. V1__Create_table
    2. V2__Create_proc_pointing_to_ArchiveDB
  • 文件数据库
    1. V1__Create_table
    2. V2__Create_proc_pointing_to_AppDb

如何重新做才能更像这样处理

  • 应用数据库、存档数据库
    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

最佳答案

这可能是一个棘手的问题,尤其是对于具有循环依赖性的 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

关于c# - FlyWay 与相互依赖的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40665585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com