gpt4 book ai didi

java - 为什么在单条记录上调用 Spring Data JPA save() 比在记录列表上调用它慢?

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:57 30 4
gpt4 key购买 nike

单个记录上使用 SimpleJpaRepository 中的 save 函数与在记录列表上调用 save 相比,我的时间大大减少了.

下面的循环花费的时间是 list10 倍。

    for (Record r : csvRecords) {
myRepository.save(r);
}

myRepository 根本没有任何 @Transactional 注释。但与上面的循环相比,下面的循环快得惊人。

List<Record> myArray = new ArrayList();
for (Record r : csvRecords) {
myArray.add(r);
}
myRepository.save(myArray);

如果我们查看 SimpleJpaRepository 中的 save 实现

@Transactional
public <S extends T> List<S> save(Iterable<S> entities) {

List<S> result = new ArrayList<S>();

if (entities == null) {
return result;
}

for (S entity : entities) {
result.add(save(entity));
}

return result;
}

这个实现只是屏蔽了单个save 操作,所以如果我首先将数据存储在缓冲区中或者我在我的每条记录上调用 save 应该没有任何区别,因此速度增加不会'对我来说没有任何意义。

编辑:使用 docs.spring.io/autorepo/docs/spring-data-commons/1.5.1.RELEA‌​SE/版本。

最佳答案

在单个条目的情况下,您打开 10 个交易 - 需要打开和关闭;在 List 的情况下,save(singleEntry)(在 saveAll 中使用)将重新使用已经打开的事务,所以它是打开和关闭的单个。顺便说一句,如果我正确地重新调用它的 saveAll(Iterable) not save(Iterable)

关于java - 为什么在单条记录上调用 Spring Data JPA save() 比在记录列表上调用它慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47470873/

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