[英]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/
请注意,您的配置解析为:
SequenceHiLoGenerator
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.