Ole*_*leg 5 java transactions spring-transactions spring-data-jpa
我使用时遇到的主要时间减少save,从功能SimpleJpaRepository上single record vs calling save on a list of records。
下面的循环10比list.
for (Record r : csvRecords) {
myRepository.save(r);
}
Run Code Online (Sandbox Code Playgroud)
myRepository根本没有任何@Transactional注释。但是与上面的循环相比,下面的循环速度非常快。
List<Record> myArray = new ArrayList();
for (Record r : csvRecords) {
myArray.add(r);
}
myRepository.save(myArray);
Run Code Online (Sandbox Code Playgroud)
如果我们看一下save实现SimpleJpaRepository
@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;
}
Run Code Online (Sandbox Code Playgroud)
这个实现只是屏蔽了单个save操作,所以如果我首先将数据存储在缓冲区中或者我对每个记录调用 save ,那么它应该没有任何区别,因此速度增加对我没有任何意义。
编辑:使用docs.spring.io/autorepo/docs/spring-data-commons/1.5.1.RELEA??SE/ version 。
对于单个条目,您将打开 10 笔交易 - 需要打开和关闭;List在这种情况下save(singleEntry)(在内部使用saveAll)将重新使用已经打开的事务,因此它是一个打开和关闭的事务。顺便说一句,如果我正确地重新调用它saveAll(Iterable) 不是 save(Iterable)。
| 归档时间: |
|
| 查看次数: |
3508 次 |
| 最近记录: |