我有一个庞大的MySQL数据库表(超过100万条记录) . 我需要读取所有数据并使用java语言对它们进行一些处理 .
我想通过将整个结果集放在内存中来确保java进程不会消耗更多内存 .
在查看基于游标的实现时,我找到了一些选项,
-
使用Spring JDBCTemplate重写ResultSetExtractor或RowCallbackHandler并按顺序读取行 .
-
使用Spring Batch JDBCCursorItemReader / JDBCPagingItemReader的其他选项 .
有人可以解释这两个选项之间的区别是什么?
1 回答
如果您需要任何批处理,在您的应用程序端进行一些内部批处理时,选项1似乎更好 .
JdbcCursorItemReader打开一个新连接,因此不会参与您的应用程序事务 . 请参阅http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/database/AbstractCursorItemReader.html上的API . 此API是spring批处理的一部分 . 如果您正在编写批处理应用程序,那么它将非常适合 . 见 Spring 批