繁体   English   中英

批量插入的最佳 JPA ID 生成策略

[英]Best JPA ID Generation Strategy for Batch Insertion

我在使用 spring 数据 JPA 存储库一次插入 100 000 条记录时遇到问题。 当我们执行repo.save(List<Objs>)时,如果我们使用序列生成器来查询数据库的 nextval 会花费很多时间。 我正在使用 Oracle,这里哪个 ID 生成最好?

序列生成器可能是一个不错的选择,但您必须调整其参数。

在您的特定情况下,我会开始尝试分配大小,然后尝试策略。 参见示例: JPA/Hibernate 批量插入缓慢

看一下优化器配置: https : //vladmihalcea.com/hibernate-hidden-gem-the-pooled-lo-optimizer/

请注意,您的配置解析为:

  • Hibernate 4 上的SequenceHiLoGenerator
  • Hibernate 5 上的SequenceStyleGenerator ,(将hibernate.id.new_generator_mappings设置为 true)

您不能使用身份生成器(请参阅使用身份标识符生成器时 Hibernate 禁用插入批处理

表生成器不是性能最好的( https://vladmihalcea.com/why-you-should-never-use-the-table-identifier-generator-with-jpa-and-hibernate/

此外,请确保nextval()的数量是实际问题。 也许更改批量大小或语句排序会有所帮助(请参阅https://vladmihalcea.com/how-to-batch-insert-and-update-statements-with-hibernate/

allocationSize=1是这里的真正问题。 使用此配置,hibernate 将为每个插入调用nextVal() ,因此如果您有 1000 个插入,则 hibernate 将调用nextVal() 1000 次。

有关更多信息,请参阅Vlad Mihalcea 的这篇文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM