对于更新多个实体的功能,我有些疑问,但它会一个接一个地执行。当然,如果我们使用远程数据库,则可能会存在延迟问题,但是除此之外,我担心会由于一个事务中要更新的实体数量而导致OutOfMemoryException。我的代码类似于下面的代码。
EntityHeader entityHeader = entityHeaderService.findById(id);
for(EntityDetail entityDetail : entityHeader.getDetails()) {
for(Entity entity : entityDetail.getEntities()) {
entity.setState(true);
entityService.update(entity);
}
}
这是一个示例,在另一种方法中我们也有类似的情况,但有插入项。这些方法可以在一笔交易中更新或插入多达2k或3k实体。所以我的问题是,我们应该开始使用批处理操作还是实体数量不足以担心它?另外,如果执行批处理操作,效果会更好吗?
答案 0 :(得分:1)
优化事物时,请始终问自己是否值得,例如:
无论如何,在一个事务中〜3k个实体听起来都不错,但是即使使用这些数字,jdbc批处理也有好处(也很easy才能实现)。
Kinda很难说出何时应该担心OutOfMemoryException
,因为它取决于为jvm提供多少内存以及要更新的实体有多大。只是给你一些数字,当我不得不在同一事务中使用4Gb内存插入大约10万到10万行时,我个人遇到了内存问题,我不得不不时刷新和清空休眠缓存。