当前位置: 首页 > 面试题库 >

JPA / Hibernate提高批处理插入性能

黄扬
2023-03-14
问题内容

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

我正在将MySQL 5.5与InnoDB表一起使用。现在,通过测试数据库,我发现在处理批量插入时,它每秒可以轻松地每秒进行15000次插入(使用LOAD
DATA甚至可以进行更多操作,但这在这种情况下不切实际)。

是否有某种方法可以使用Hibernate将这500个单独的插入片段组合成5个具有100个值的插入片段(对于5个具有100个值的链接实体)?

按照要求:

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

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


问题答案:

我已经通过为每个“插入”组使用hibernate会话来解决了这个问题。结果使保存数据所需的时间减少了约7倍。过去需要大约2000毫秒来保存一个“数据包”,而现在要做同一件事需要200毫秒至300毫秒。

只是重复一遍-这对 Play 有效 框架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”方法,以便调用 mySession.save(myNewObject)*
而不是调用对象的 save() 方法。
*



 类似资料:
  • 我有一个数据模型,在一个实体和11个其他实体之间有一对多的关系。这12个实体一起代表一个数据包。我遇到的问题是,在这些关系的“多”端发生的插入数量。其中一些可以有多达100个单独的值,因此要在数据库中保存一个完整的数据包,最多需要500次插入。 我在InnoDB表中使用MySQL 5.5。现在,通过对数据库的测试,我发现在处理批插入时,它可以轻松地每秒执行15000次插入(对于加载数据,插入次数甚

  • 我正在使用hibernate jpa执行批处理更新。 更新:我得到了解决方案:问题是我正在刷新已经刷新的事务,因此它没有给我任何事务正在进行中的错误以及我上面发布的错误,所以我只是删除了`getem().flush();和getEm().clear();从finally块开始工作:)

  • 问题内容: 我需要将几亿条记录插入mysql db。我要一次插入一百万个。请在下面查看我的代码。它似乎很慢。有什么方法可以优化它吗? 问题答案: 我在mysql中遇到类似的性能问题,并通过在连接URL中设置useServerPrepStmts和rewriteBatchedStatements属性来解决。

  • 问题内容: 有没有解决方案通过hibernate在分区后的PostgreSQL表中批量插入?目前我遇到这样的错误… 我已经找到此链接http://lists.jboss.org/pipermail/hibernate- dev/2007-October/002771.html, 但我在网上找不到任何地方可以解决此问题或如何解决该问题 问题答案: 您可能想通过设置hibernate.jdbc.fac

  • 我正在研究一个实时用例,需要使用spring boot JPA将一批消息加载到SQL server表中,将所有模型对象添加到列表中,并对批加载<code>存储库进行此操作。saveAll(list)。由于性能原因,我无法逐个记录插入。我正在寻找以下选项。 是否有任何方法可以读取导致错误的消息并继续将其他记录插入表中。我必须将此错误消息存储在某个地方,并且不应传递给下游应用程序。

  • 我很难让Hibernate在MySQL上执行大容量插入。 我有要排序的主键生成类型,下面是我的dao.xml 这使得每次都可以执行单个查询。我也相应地刷新和清除实体管理器。 技术堆栈:Spring 4,Hibernate 5.2。 编辑1:我也浏览了下面的链接,但没有运气 https://vladmihalcea.com/how-to-batch-insert-and-update-stateme