Java 需要方法建议:将数据库从1数据库插入到另一数据库

Java 需要方法建议:将数据库从1数据库插入到另一数据库,java,database,hibernate,Java,Database,Hibernate,我在两台不同的机器上有两个数据库。比如说DB1和DB2 DB1-JDBC连接-选择查询 DB2-通过Hibernate-插入查询 在DB1中,有一个表用户,其中有35K条记录。我需要从JavaJDBC获取这些数据,并将数据存储在hibernate实体对象中 现在我的问题是:我是否应该像Select*一样从用户那里获取1中的35K记录,并创建35K实体obj,然后逐个存储在DB2中。在本例中,我关心的是内存,以及如果出现异常(如DB2的db连接失败),如何处理 我的感觉是,如果有任何方法,我选择2

我在两台不同的机器上有两个数据库。比如说DB1和DB2

DB1-JDBC连接-选择查询

DB2-通过Hibernate-插入查询

在DB1中,有一个表用户,其中有35K条记录。我需要从JavaJDBC获取这些数据,并将数据存储在hibernate实体对象中

现在我的问题是:我是否应该像Select*一样从用户那里获取1中的35K记录,并创建35K实体obj,然后逐个存储在DB2中。在本例中,我关心的是内存,以及如果出现异常(如DB2的db连接失败),如何处理

我的感觉是,如果有任何方法,我选择200条记录并存储这200条记录,以此类推


请允许我建议

您可能想使用这个:

Statement.setFetchSize(int rows)
此问题中介绍了功能,其中涉及类似问题:

如果您有一点时间并且对学习感兴趣,您可以看看:

SpringBatch有块的概念和机制来存储作业的状态—它是自己的数据库。如果传输作业崩溃,则可以从最后一个区块恢复。您还可以对作业进行分区并进行分发。如果你熟悉Spring,它真的很容易使用

一般来说,您不应该将所有行加载到内存中并一次性传输它们,正如您已经指出的,这有可能会中断OOM、事务日志。将数据分块到一个专用的暂存表中,然后在一切正常时实时切换数据是一个常见的解决方案

如果只是一次运行,而您只需要35K条记录,那么可以将它们复制到一大块中,而且很可能不值得付出额外的努力