程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring Data Save vs SaveAll性能大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring Data Save vs SaveAll性能?

开发过程中遇到Spring Data Save vs SaveAll性能的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring Data Save vs SaveAll性能的解决方法建议,希望对你解决Spring Data Save vs SaveAll性能有所启发或帮助;

我不得不猜测,如果没有您的代码,我相信这与为所保存的每个对象创建新事务的开销有关,而与之save相比则要打开一个事务saveAll

注意的定义,save并且saveAll它们都用注释@transactional。如果您的项目配置正确(由于将实体保存到数据库,这似乎是事实),则意味着只要调用这些方法之一就将创建事务。如果您save在循环中进行调用,这意味着每次调用都会创建一个新的事务save,但是在saveAll有一个调用的情况下,则创建一个事务,而与保存的实体数量无关。

我假设测试本身不是在事务内运行,如果要在事务内运行,则所有保存调用都将在该事务内运行,因为默认事务传播为Propagation.required,这意味着如果有事务已经打开的呼叫将在其中运行。如果您打算使用spring数据,我强烈建议您阅读有关Spring中的事务管理的信息。

解决方法

我试图理解为什么saveAll具有比Spring
Data存储库中的保存更好的性能。我正在使用CrudRepository,可以在这里看到。

为了测试,我创建了10k个实体并将其添加到列表中,这些实体只有一个id和一个随机字符串(对于基准测试,我将该字符串保持不变)。遍历我的列表并调用.save每个元素,这花费了40秒。调用.saveAll同一完整列表将在2秒内完成。.saveAll甚至用30k元素进行调用都花了4秒钟。我确保在执行每个测试之前截断表。即使将.saveAll呼叫分批处理到50个子列表,也要花费10秒和30k的时间。

.saveAll整个清单中的简单清单似乎是最快的。

我试图浏览春数据源代码,但是这是我发现的唯一有价值的东西。在这里,似乎.saveAll只是遍历整个过程Iterable.save像我所做的那样调用每个。那怎么快呢?它在内部进行一些事务批处理吗?

大佬总结

以上是大佬教程为你收集整理的Spring Data Save vs SaveAll性能全部内容,希望文章能够帮你解决Spring Data Save vs SaveAll性能所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。