Spring JDBC模板ROW Mapper太慢

时间:2015-06-03 06:37:24

标签: java spring jdbc jdbctemplate

我有一个带有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;
            }
    });

1 个答案:

答案 0 :(得分:3)

正如大多数评论所述,One mllion记录在任何UI中显示都是无用且不切实际的 - 如果这是一个真正的业务需求,您需要教育您的客户。

网络流量应用程序和数据库服务器是此类情况下性能的关键因素。在这种情况下,有一个可以真正帮助您的可选参数是:获取大小 - 在某种程度上也是如此

示例:

Connection connection = //get your connection
Statement statement = connection.createStatement();
statement.setFetchSize(1000); // configure the fetch size

默认情况下,大多数JDBC数据库驱动程序的提取大小都很低,在这种情况下调整它可以帮助您。 **但要注意以下内容。

  • 确保您的jdbc驱动程序支持提取大小
  • 确保您的JVM堆设置(-Xmx)足够宽,以处理因此而创建的对象。
  • 最后,只选择您需要的列以减少网络开销。

在春天,JdbcTemplate可让您设置fetchSize