gpt4 book ai didi

java - 我应该在 Hibernate 中批量插入/更新吗?

转载 作者:行者123 更新时间:2023-12-02 10:43:45 26 4
gpt4 key购买 nike

我对更新多个实体的函数有一些疑问,但它确实是一个接一个地更新。当然,如果我们使用远程数据库,可能会出现延迟问题,但除此之外,我担心我们可能会遇到 OutOfMemoryException,因为我们在一个事务中更新的实体数量很大。我的代码类似于下面的代码。

EntityHeader entityHeader = entityHeaderService.findById(id);
for(EntityDetail entityDetail : entityHeader.getDetails()) {
for(Entity entity : entityDetail.getEntities()) {
entity.setState(true);
entityService.update(entity);
}
}

这是一个示例,我们在另一种方法中也有类似的情况,但使用的是插入。这些方法可以在一笔事务中更新或插入最多 2k 或 3k 个实体。所以我的问题是,我们应该开始使用批处理操作还是实体数量不够大而不必担心?另外,如果使用批处理操作,效果会更好吗?

最佳答案

在优化事情时,总是问自己是否值得花时间,例如:

  1. 这些方法是每晚运行的批处理方法还是经常调用的方法?
  2. 性能增益是否足够高或者可以忽略不计?

无论如何,一个事务中的约 3000 个实体听起来不错,但即使有这些数字,jdbc 批处理也有好处(也相当 easy 才能实现)。

很难判断何时应该担心 OutOfMemoryException,因为这取决于您为 jvm 提供了多少内存以及您正在更新的实体有多大;只是为了给你一些数字,我个人遇到了一些内存问题,当我必须在同一个事务中使用 4Gb 内存插入大约 10~100,000 行时,我必须每隔一段时间刷新并清空 hibernate 缓存。

关于java - 我应该在 Hibernate 中批量插入/更新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52743877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com