hibernate - JPA/Hibernate 提高批量插入性能

标签 hibernate jpa playframework bulkinsert playframework-1.x

我有一个数据模型,该模型在 1 个实体和 11 个其他实体之间具有一对多关系。这12个实体一起代表一个数据包。我遇到的问题与这些关系的“多”侧发生的插入数量有关。其中一些可以有多达 100 个单独的值,因此要将整个数据包保存在数据库中,最多需要 500 次插入。

我正在使用 MySQL 5.5 和 InnoDB 表。现在,通过测试数据库,我发现在处理批量插入时,它可以轻松地每秒执行 15000 次插入(使用 LOAD DATA 时甚至可以执行更多操作,但这对于本例来说并不实用)。

是否有某种方法可以使用 Hibernate 将这些单独的 500 个插入集中到例如 5 个具有 100 个值的插入(对于每个有 100 个值的 5 个链接实体)?

按要求:

@OneToMany(mappedBy="beat", cascade=CascadeType.ALL)
@OrderBy("miliseconds ASC")
public List<AmbientLight> lights;

我可能还应该提到一个重要的信息 - 我正在使用Play!框架1.2.3

最佳答案

我已经通过对每个“组”插入使用 Hibernate session 来解决这个问题。结果保存数据所需的时间减少了约 7 倍。过去保存一个“数据包”大约需要 2000 毫秒,现在完成同样的事情需要 200 到 300 毫秒。

重复一遍 - 这对于游戏有效! Framework 1.2.3 - 我不确定这是否或如何适用于使用 Hibernate 的其他框架或应用程序。

    Session mySession = (Session) Pressure.em().getDelegate();

    for(int i = 0 ; i < data.size() ; i++){
        initializeFromJsonAndSave(data.get(i), mySession);
    }
    s.flush();
    s.clear();

“initializeFromJsonAndSave”方法已更改,不再调用对象的 save() 方法,而是调用 mySession.save(myNewObject)

关于hibernate - JPA/Hibernate 提高批量插入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17831013/

相关文章:

java - Play 框架 Java Rest API 示例

java - Spring - Autowiring java.lang.NoClassDefFoundError

java - Spring 的 ORM(hibernate)与 hibernate

java - Hibernate:多重选择@OneToMany

java - JPA双向OneToMany关系-无法删除子项

java - Play 在刷新时重新编译所有文件?

java.lang.NoClassDefFoundError : org/hibernate/cache/EntityRegion configuring EHCache

java - JPA + Spring 异常后回滚事务

jpa - @MappedSuperclass 和子类中相同的 JPA 回调方法

json - 使用Play呈现JSON!和Scala