java - 在 JDBC/iBatis 3 中迭代大型结果集的最佳方法是什么?

标签 java jdbc ibatis

我们正在尝试迭代数据库中的大量行并将它们转换为对象。行为如下:

  • 结果会按照序列id排序,当序列id改变时会创建一个新的对象。创建的对象将被发送到外部服务,有时必须等待才能发送另一个对象(这意味着下一组数据不会立即使用)
  • 我们已经在 iBatis 3 中投入了代码,因此 iBatis 解决方案将是我们的最佳方法(我们已经尝试使用 RowBounds,但还没有看到它如何在幕后进行迭代)。
  • 我们希望在最大限度减少内存使用量和减少数据库访问次数之间取得平衡。
  • 我们也对纯 JDBC 方法持开放态度,但我们希望该解决方案适用于不同的数据库。

更新 1:

  • 我们需要尽可能少地调用数据库(理想情况是 1 次调用),同时还要防止应用程序使用过多的内存。对于此类问题是否还有其他解决方案(可能是纯 JDBC 或任何其他技术)?

更新2

  • 查询将由后端驱动,并且在给定时间仅执行 1 个实例。

谢谢并希望听到您对此的见解。

最佳答案

We need to make as few calls to DB as possible (1 call would be the ideal scenario) while also preventing the application to use too much memory. Are there any other solutions out there for this type of problem may it be pure JDBC or any other technology?

您真的不应该担心数据库调用的数量。只需准确查询最终用户需要立即查看的数据即可。这是不可能更有效地完成的。 Google 也不会查询整个数据库以仅显示前 10 个。不,它会精确查询这 10 个以进行显示,不多不少。这比将整个数据库拖入/复制到应用程序的内存中并对其进行处理要快得多、效率更高。利用 RDBMS 的强大功能。这就是它的发明/目的。

关于java - 在 JDBC/iBatis 3 中迭代大型结果集的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2720368/

相关文章:

java - 空 JTextField 并添加数字

java - SQL 语句后转发到 java 类中的 (*.jsp) 页面

java - 如何修复 : ON DELETE CASCADE ON UPDATE CASCADE using derby/EmbeddedDriver

java - 处理过程中 GIF 中的动画不起作用

java - 生成与二维数组中最后一组数字仅相差 1 的数字组

java - 未找到 JDBC/ODBC 数据源名称且未指定默认驱动程序

java - 主从复制jdbc url

java - Spring:用于只读事务的单独数据源

mysql - 在 mybatis 查询中使用一些硬编码值

java - Java 中的静态 block - 最佳实践