【问题标题】:JPA/Hibernate bulk inserts slowJPA/Hibernate 批量插入缓慢
【发布时间】:2009-04-23 04:50:51
【问题描述】:

我正在使用 Hibernate 作为我的提供程序使用 JPA 进行批量插入。数据库是甲骨文。它创建了一个序列生成器,每次插入时都会查询序列生成器的 nextval。如果我正在执行 1K 插入,它将击中序列生成器 1K 次。如果我想坚持使用 JPA,有什么方法可以加快速度?

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    在 JPA 中使用 allocationSize @SequenceGenerator

    看这个例子,它被设置为 150:

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MY_ENTITY_SEQ")
    @SequenceGenerator(name = "MY_ENTITY_SEQ", sequenceName = "MY_ENTITY_SEQ", allocationSize = 150)
    @Column(name = "MY_ENTITY", nullable = false)
    private Long id;
    

    【讨论】:

    • 很好的答案。看起来它终于加快了我批量插入 MySQL 的速度。它大大减少了用于从序列中选择的 JDBC 连接和语句的使用(插入已经在批处理中,但仍然很慢)。感谢您指出这一点!
    【解决方案2】:

    试一试序列预分配功能:

    序列对象提供最佳的 排序选项,因为它们是 最高效,拥有最好的 并发,但是它们是 像大多数数据库一样最不便携 不支持他们。 序列对象 通过支持序列预分配 在数据库上设置 INCREMENT 序列对象 预分配大小。

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2015-07-03
      • 2016-05-22
      • 2018-01-23
      • 2013-07-23
      • 2021-04-23
      • 2016-11-20
      • 1970-01-01
      • 2017-01-01
      相关资源
      最近更新 更多