【问题标题】:Migrating three derby databases to one MySQL database将三个 derby 数据库迁移到一个 MySQL 数据库
【发布时间】:2014-06-12 17:51:15
【问题描述】:

我们在 Jetty 服务器上运行了一个 Spring Hibernate、Apache Derby(数据库)Java 应用程序。

问题

我们需要将 3 个 Apache Derby 数据库(DB1、DB2、DB3)迁移到一个 MySQL 数据库中。

更新:DB1、DB2、DB3 具有相同的模式和不同的数据。

外键约束

数据库模式目前在数据库级别没有外键限制,但我们在应用程序级别有外键限制。我们有大约 100 个表要迁移到一个 Apache Derby 数据库,然后将其移动到一个 MySQL 数据库,其中一些表的记录超过 1000 万。

解决方案

  1. 我们考虑先将 DB1 和 DB3 合并到 DB2 中。 DB2 是最大的,因此我们正在考虑将其用作基础数据库,然后将合并的 DB2 移至 MySQL 数据库。使用 Hibernate,我可以编写一个程序,首先为 DB1 和 DB2 创建 2 个会话工厂,然后将数据从 DB1 推送到 DB2,在名为 NEW_IDS 的新临时表中创建记录,其中包含以下列。

    NEW_ID - 添加的新记录的 ID
    OLD_ID - 记录的 ID
    TABLE_NAME - 表的名称。

    当我遇到一个具有外键约束的表时,我可以查找 NEW_IDS 表以找到该表的 OLD_ID 的 NEW_ID,并将设置新 ID 的 Hibernate Entity 持久保存到 DB2 中。

  2. 将每个 Apache Derby 数据库移动到 MySQL 数据库并拥有 3 个 MySQL 数据库,然后使用 Redgate Data Compare 之类的工具来合并数据,因为通过阅读文档,看起来它们不支持 Apache Derby 的数据比较,而只支持 SQL 服务器和甲骨文。如果我错了,请纠正我。

问题

您能否告诉我们您是否遇到过类似的情况,您遇到过什么问题,如果您发现上述两种方法有任何问题,或者您认为还有其他更好的方法吗?

【问题讨论】:

    标签: mysql hibernate derby database-migration


    【解决方案1】:

    是的,我遇到了同样的情况,我想从 5 个小 DB 中创建一个 DB。首先告诉我们所有具有不同表或相同表的数据库(DB1、DB2、DB3)?我面临的问题是所有数据库中的主键相同。在我的情况下,所有 5 个数据库都有相同的表。

    例如。

    DB1 有表 Person,其中使用了 1 到 10k 个主键

    DB2 再次拥有具有 1 到 6k 个主键的 Person 表

    所以合并会很困难。

    【讨论】:

    • 无论我刚才分享的是什么,我都不知道你的具体情况。
    • 所有数据库具有相同的架构。
    • @CMR 那么你不认为主键会是我在回答中描述的问题吗?而且我认为想法 NEW_ID 和 OLD_ID 会起作用,但会成为 CRUD 的开销
    • 原本是将 NEW_IDS 表作为临时表,直到 3 个数据库中的所有数据都已迁移并且我们的系统已移至一个 MySQL 数据库。 NEW_IDS 表不会投入生产。
    • @CMR 这听起来不错,但这将是一个很长的过程,因为您说有些表的记录超过 1000 万。让我们看看还会有哪些其他建议。
    猜你喜欢
    • 1970-01-01
    • 2023-01-11
    • 2020-02-28
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2023-03-11
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多