Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将三个derby数据库迁移到一个MySQL数据库_Mysql_Hibernate_Derby_Database Migration - Fatal编程技术网

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

将三个derby数据库迁移到一个MySQL数据库,mysql,hibernate,derby,database-migration,Mysql,Hibernate,Derby,Database Migration,我们在Jetty服务器上运行了一个SpringHibernate、ApacheDerby(数据库)Java应用程序 问题 我们有3个ApacheDerby数据库(DB1、DB2、DB3),需要在一个MySQL数据库中进行迁移 更新:DB1、DB2、DB3具有相同的模式和不同的数据 外键约束 数据库模式目前在数据库级别没有外键限制,但在应用程序级别有外键限制。我们有大约100个表要迁移到一个ApacheDerby数据库中,然后将其移动到一个MySQL数据库中,其中一些表的记录超过1000万条 解决

我们在Jetty服务器上运行了一个SpringHibernate、ApacheDerby(数据库)Java应用程序

问题

我们有3个ApacheDerby数据库(DB1、DB2、DB3),需要在一个MySQL数据库中进行迁移

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

外键约束

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

解决方案

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

    NEW_ID-添加的新记录的ID
    旧ID-记录的ID
    TABLE_NAME—表的名称

    当我遇到一个具有外键约束的表时,我可以查找NEW_ID table,找到该表的旧ID的新ID,并将Hibernate实体设置新ID持久化到DB2中

  • 将每个Apache Derby数据库移动到MySQL数据库,并拥有3个MySQL数据库,然后使用诸如Redgate Data Compare之类的工具合并数据,因为通过阅读文档,它们似乎不支持Apache Derby的数据比较,而只支持SQL Server和Oracle。如果我错了,请纠正我 问题


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

    是的,我遇到过同样的情况,我想从5个小的DB中提取一个DB。首先告诉我们所有数据库(DB1、DB2、DB3)都有不同的表还是相同的表?我面临的问题是所有数据库中的主键都相同。在我的例子中,所有5个数据库都有相同的表

    例如

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

    DB2再次使用带有1到6k主键的Person表


    因此,合并将是困难的

    我不知道在你的情况下,我刚才分享的是什么。所有的数据库都有相同的模式。@CMR那么你不认为主键将是我在回答中描述的问题吗?我认为新ID和旧ID的想法会起作用,但会增加CRUD的开销。在3个数据库中的所有数据都迁移到一个MySQL数据库之前,新ID表只是一个临时表。新的_IDS表将不会投入生产。@CMR这听起来不错,但这将是一个非常漫长的过程,因为您说过一些表的记录超过1000万条。让我们看看还会有什么其他建议。