Java 使用JPA将大表与大文本文件合并?

Java 使用JPA将大表与大文本文件合并?,java,orm,jpa,ejb,Java,Orm,Jpa,Ejb,我们有一个大约100万行的大表和一个有数百万行的数据文件。我们需要定期将文本文件中的数据子集合并到数据库表中 速度慢的主要原因是文件中的数据引用了其他JPA对象,这意味着需要为文件中的每一行读回其他JPA对象。假设我们有100000人和1000000个资产对象 个人对象-->资产列表 我们的应用程序目前使用纯JPA来满足所有数据操作需求。使用JPA/ORM方法学是否有一种有效的方法来实现这一点,或者我是否需要恢复到纯SQL和特定于供应商的命令?一个可能的答案是执行以下操作,但速度非常慢 对于文

我们有一个大约100万行的大表和一个有数百万行的数据文件。我们需要定期将文本文件中的数据子集合并到数据库表中

速度慢的主要原因是文件中的数据引用了其他JPA对象,这意味着需要为文件中的每一行读回其他JPA对象。假设我们有100000人和1000000个资产对象

个人对象-->资产列表


我们的应用程序目前使用纯JPA来满足所有数据操作需求。使用JPA/ORM方法学是否有一种有效的方法来实现这一点,或者我是否需要恢复到纯SQL和特定于供应商的命令?

一个可能的答案是执行以下操作,但速度非常慢

  • 对于文件中的每一行:

    • 读取数据线
    • 获取引用对象
    • 检查数据是否附着到参照对象
    • 如果没有,则将数据添加到引用对象并持久化

这么慢,不值得考虑。

为什么不使用古老的技术:分而治之?将文件分割成小块,然后让并行进程同时处理这些小文件

并使用JPA和Hibernate提供的批插入/更新。更多细节

不过,我认为理想的方法是使用普通JDBC提供的批处理支持,然后定期提交


您可能还想看看它提供了开箱即用的拆分/并行化/文件迭代等功能。我已经成功地将所有这些应用程序用于一个规模相当大的应用程序。

您能否提供有关合并过程/要求的更多详细信息?您对JPA的关注是与绩效相关还是仅仅是“我如何做到这一点”?是的,问题只是“我如何做到这一点”。显然,我们可以逐行读取文件,并尝试插入任何不存在的行。通过相当快的局域网连接使用oracle数据库大约需要9个小时。