我有一个带有Spring jdbcTemplate
的db fetch调用,要获取的行大约是1百万。迭代结果集需要花费太多时间。在调试行为后,我发现它像批处理一样处理某些行,然后等待一段时间,然后再次处理一批行并处理它们。似乎行处理不连续,所以整个时间进入分钟。我使用了数据源的默认配置。请帮忙。
[编辑]
以下是一些示例代码
this.prestoJdbcTempate.query(query, new RowMapper<SomeObject>() {
@Override
public SomeObject mapRow(final ResultSet rs, final int rowNum) throws SQLException {
System.out.println(rowNum);
SomeObject obj = new SomeObject();
obj.setProp1(rs.getString(1));
obj.setProp2(rs.getString(2));
....
obj.setProp8(rs.getString(8));
return obj;
}
});
答案 0 :(得分:3)
正如大多数评论所述,One mllion记录在任何UI中显示都是无用且不切实际的 - 如果这是一个真正的业务需求,您需要教育您的客户。
网络流量应用程序和数据库服务器是此类情况下性能的关键因素。在这种情况下,有一个可以真正帮助您的可选参数是:获取大小 - 在某种程度上也是如此
示例:
Connection connection = //get your connection
Statement statement = connection.createStatement();
statement.setFetchSize(1000); // configure the fetch size
默认情况下,大多数JDBC数据库驱动程序的提取大小都很低,在这种情况下调整它可以帮助您。 **但要注意以下内容。
在春天,JdbcTemplate
可让您设置fetchSize