我有一个包含2000万行的表,由于OutOfMemoryError
,我无法使用单个查询选择所有行。我读到了fetchSize
属性,看起来它可能有助于解决我的问题,因为它是常见的建议
但我对如何应用它有疑问。
我有以下代码:
private final JdbcTemplate jdbcTemplate;
...
jdbcTemplate.setFetchSize(1000);
List<MyTable> myList= this.jdbcTemplate.query(
"SELECT * FROM my_table",
new Object[]{},
MyTableMapper.INSTANCE
);
mylist.foreach(obj->processAndSave(obj));
看起来jdbc驱动程序会为每个请求选择1000。但是我应该怎么做才能处理所有2000万行呢?
我应该调用jdbcTemplate吗。查询几次?
您可以根据光标获取结果
如果您使用的是PostgreSQL 11请求:
标准配置示例
spring.datasource.hikari.auto-commit=false
spring.jdbc.template.fetch-size=50
此外,如果您想在存储库类之外处理结果,您可以结合queryForStream
Stream<MyTable> stream = jdbcTemplate.queryForStream(SQL, MyTableMapper.INSTANCE);
PostgreSQL文档:发出查询并处理结果
https://jdbc.postgresql.org/documentation/head/query.html
问题内容: 我有一个使用JDBC的Java应用程序,该应用程序每天在服务器上运行一次,并与也在同一服务器上运行的MySQL数据库(v5.5)进行交互。该应用程序正在查询并遍历表中的 所有 行。 该表目前很小(约5000行),但将无限期地增长。我的服务器内存有限,我不认为应用程序的内存消耗不确定。 如果我在运行查询之前使用过,我不清楚这里发生了什么。例如,如果我使用类似: 这是如何适当控制潜在的大型
问题内容: 我需要使用Java在Apache Solr中获取索引的总大小。以下代码获取文档总数,但是我正在寻找大小。并通过使用ReplicationHandler,我想我可以得到此链接上某人告诉的索引大小。http://lucene.472066.n3.nabble.com/cheking- the-size-of-the- index-using-solrj-API-s- td692686.ht
问题内容: 我正在用Java开发SMS应用程序。我的客户通过SMS发送查询,查询将以HTTP请求的形式通过SMS网关转发给我的服务器。现在,我的应用程序处理了请求,并通过SMS网关再次将响应发送回客户端。最多仅发送300个字符作为响应。我期望流量很高(每秒2000个请求)。我想将我的应用程序托管在一些虚拟主机公司(考虑mochahost)。托管之前我应该考虑哪些因素(RAM,CPU等的中间因素
我正在使用Spring JDBCTemboard和BatchPREaredStatementSetter在postgreSql DB上执行批处理更新。我想捕获错误的记录,在浏览了一些帖子后,发现捕获BatchUpdateExctive,然后寻找“语句”。EXECUTE_FAILED可以帮助我识别错误的记录。然而,当我按照下面的方式实现它时,我从来没有得到过BatchUpdate异常。 在这里,我试
问题内容: 我使用以下代码实例化了一个对象: 如何获得此文件的大小? 是什么区别,和? 问题答案: 使用类中的方法。从javadocs: 返回此抽象路径名表示的文件的长度。如果此路径名表示目录,则未指定返回值。 对于问题的第二部分,直接来自的javadocs: 返回此抽象路径名所命名的分区上该虚拟机可用的字节数 返回此抽象路径名命名的分区的大小 返回此抽象路径名所命名的分区中未分配的字节数
问题内容: function foldersize($path) { $total_size = 0; $files = scandir($path); 在脚本执行完成之前,为什么处理器使用率会过高或100%升高?可以做些什么来优化它吗?还是有其他方法可以检查文件夹和其中的文件夹大小? 问题答案: 以下是其他地方提供的其他解决方案: 如果在Windows主机上: 否则,如果在Linux主机上: