jdbctemplate - JdbcTemplate - queryForList - 大量数据运行缓慢
问题描述
我正在使用 Spring Boot + CommonsDBCP + JdbcTemplate。我需要从具有大量数据的 Hive 表中获取记录。
SQL: select * from customer
总记录:52K。
我正在使用List<Map<String,Object>> result = jdbcTemplate.queryForList(SQL)来获取记录。对于上述数量的记录,这运行缓慢。
这使用RowMapperResultSetExtractor提取数据需要96 秒。如果数据量增加,查询时间会增加。
有什么建议可以改进这个时间或使用 jdbctemplate 中的任何其他方法吗?
解决方案
您曾经可以使用 try-with-resources 执行普通的 JDBC,使用SELECT a, b, c, ...
或使用 ResultSetMetaData 给出 column-label-to-column-no。地图列表很昂贵,所以对象列表会更好。有许多 RowSet 类。
最后但并非最不重要的一点是,简单地不收集列表,而是遍历所有列表是理想的。
本地内存减慢速度时的一项功能是使用Statement#setMaxRows
或setLargeMaxRows
使用部件。
还有另一种选择:表转储。
无事务查询也可能有所帮助。
这些都是有争议的措施;一个必须尝试。一个令人信服的改进,我可以在我从未发现的任何地方重复使用。先从其他答案开始。
推荐阅读
- python - 使用python从数据库中获取数据
- regex - 在 Fedora 中用特殊字符重命名多个文件
- r - 如何从R中的字符中删除反斜杠?
- c# - 如何初始化新列
- python - 如何在新行上写入字符串中的项目
- ios - Swift mapview 无法显示缩略图
- amazon-web-services - S3 支持的 EMR HBase 只读副本无法通过 Java API 连接
- node.js - Docker - nodejs - 在安装卷上丢失 nodeapp 文件夹
- hyperledger-fabric - 我在 hyperledger fabic 的 fabcar 智能合约示例中添加了附加参数。显示此错误
- presto - Presto - 如何使用 date_trunc() 函数过滤从当年开始的记录?