gpt4 book ai didi

java - Spring JDBCtemplate ROWMapper 太慢

转载 作者:行者123 更新时间:2023-12-01 22:17:51 24 4
gpt4 key购买 nike

我使用 Spring jdbcTemplate 进行数据库获取调用,要获取的行数约为 100 万行。在结果集中迭代需要太多时间。调试行为后,我发现它像批处理一样处理一些行,然后等待一段时间,然后再次获取一批行并处理它们。行处理似乎不是连续的,因此总时间将持续几分钟。我使用了数据源的默认配置。请帮忙。

[编辑]

这是一些示例代码

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;
}
});

最佳答案

正如大多数评论告诉您的那样,在任何 UI 中显示一百万条记录都是无用且不现实的 - 如果这是真正的业务需求,您需要教育您的客户。

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

示例:

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

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

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

在 Spring 中,JdbcTemplate 允许您设置 fetchSize

关于java - Spring JDBCtemplate ROWMapper 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30612567/

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