gpt4 book ai didi

java:结果集迭代与列表迭代:是否存在性能差异

转载 作者:行者123 更新时间:2023-11-30 03:49:30 26 4
gpt4 key购买 nike

我必须制作一个报告实用程序,它从一个非常旧的大表中获取数据。我的搜索条件将一次取出一百万条记录,稍后将其用于一些垃圾 IO 操作。我可以选择使用 JDBC,它会给我一个结果集,或者使用 Hibernate,它会给我一个列表。我想知道两者在迭代时是否会有性能差异。

最佳答案

这取决于:

  • hibernate 版本
  • DBMS 和版本
  • JDBC 驱动程序和版本

通常的工作原理是:如果您使用以下内容创建语句:

PreparedStatement stmt = con.prepareStatement(sql,
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);

然后体面 DBMS/驱动程序将大型查询,并且内存影响会很小,但代价是保持连接更长。如果你使用 Hibernate 获取大型查询的 List ,它会尝试立即将整个结果集加载到内存中,如果 GC 启动,整个事情最多只能爬行,并会崩溃最糟糕的。因此,对于大型结果集,JDBC 将是更好的选择。

现在,如果您实际上不介意在 Hibernate 中使用 List,则可以使用 ScrollableResults 。请参阅this question :即使该方法不适用于该特定情况,该技术也可以在 JDBC 方法可以正常工作的每个 DBMS/驱动程序组合上正常工作(毕竟它只是一个薄薄的 Hibernate 层)上面解释了纯 JDBC 方法)。您还可以获得 Hibernate 的 ORM 部分。

关于java:结果集迭代与列表迭代:是否存在性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24778648/

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