我从身份生成器转移到序列,希望它能提高我的批量插入的性能。我正在使用 JPA EntityManager 的persist 方法进行批量插入,批量大小为 50。插入多达 300K 条记录。
实体表的主键列 - id 具有以下设置:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="myseq")
@SequenceGenerator(name="myseq", sequenceName="my_table_id_seq", allocationSize = 1)
private Long id;
早些时候,当我只使用 allocationSize 作为默认值 50,并使用这个属性 - 'hibernate.id.new_generator_mappings' - (将其设置为 true)时,我遇到了诸如 - 批量条目 0 插入休眠,使用 getNextException()
因此,我将 allocationSize 更改为 1。从那时起,我就没有看到上面的问题。然而,这并没有像分配大小 50 那样提高性能。 但这也会导致新 id 和由于 50 的分配大小而已经存在的 id 之间的疯狂差距。
我意识到 Hibernate 增加了太多的开销。刚刚使用 JdbcTemplate 插入超过 100 万个,它就像一个魅力:)
只有当数据负载不是很大时,我才会使用休眠!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句