mysql - 将三个 derby 数据库迁移到一个 MySQL 数据库

标签 mysql hibernate derby database-migration

我们已经在 J​​etty 服务器上运行了 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,我可以编写一个程序,该程序将首先创建 2 个 session 工厂到 DB1 和 DB2,并将数据从 DB1 推送到 DB2,并在名为 NEW_IDS 的新临时表中创建记录,其中包含以下列。

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

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

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

问题

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

最佳答案

是的,我遇到了同样的情况,我想用 5 个小 DB 制作一个 DB。首先告诉我们所有的数据库(DB1,DB2,DB3)有不同的表还是相同的?我面临的问题是所有数据库中的主键相同。就我而言,所有 5 个数据库都有相同的表。

例如。

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

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

所以合并会很困难。

关于mysql - 将三个 derby 数据库迁移到一个 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23319817/

相关文章:

mysql - 根据第二列中的值从单列中选择两个字段

java - 在 mysql 客户端上执行时没有任何错误的 sql 查询在通过代码执行时失败并出现语法错误

MySQL错误查询

php - 从不同表中的类别 id 获取类别名称

java - Hibernate:将次要对象封装在映射对象中

java - servlet 上下文错误

java - Hibernate @Id 通过继承

mysql - 无法通过节俭获取配置单元远程 Metastore 表信息

java - 使用子查询

java - Hibernate:将对象插入 Derby 嵌入式数据库时引发 SQLGrammerException