【发布时间】:2014-07-24 02:14:30
【问题描述】:
我有一个每月更新并通过 CSV 文件导出的大型数据集(约 1500 万条记录)。我需要将这些数据匹配并合并到一个包含大致相同数量的实体的数据库中。数据源关于匹配记录的业务规则与我的不同;因此,源文件中可能有匹配的记录(根据我的规则)。
我遇到的问题是匹配的记录通常在 CSV 文件中一行接一行地出现。对于自上次导入以来的任何新数据,除非我在每一行之后都提交,否则在下一次提交之前检查数据库是否匹配将不会返回任何内容,届时该提交中的所有记录(包括那些应该匹配其他记录)将被持久化。
例如,如果我的提交间隔为 50 并且在两次提交之间读取了 30 行匹配的行,则这 30 条记录将被持久化,而不是一条合并记录。
我尝试在每条源记录之后提交,但这会大大减慢导入速度,原因很明显。鉴于数据集的大小,即使是对性能的微小影响也会对整体运行时间产生很大影响。
我唯一能想到的就是跟踪未提交的记录并匹配它们以及数据库中的内容。我正在使用 Spring Data JPA 进行持久性(由 Hibernate 支持)和 Spring Batch 进行导入,如果这有所不同的话。
我觉得我可能缺少一些东西,而且我确信我不是第一个解决这个问题的人。提前感谢您的任何建议。
【问题讨论】:
标签: java hibernate jpa spring-data spring-batch