我有一个包含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等的中间因素
问题内容: 我使用以下代码实例化了一个对象: 如何获得此文件的大小? 是什么区别,和? 问题答案: 使用类中的方法。从javadocs: 返回此抽象路径名表示的文件的长度。如果此路径名表示目录,则未指定返回值。 对于问题的第二部分,直接来自的javadocs: 返回此抽象路径名所命名的分区上该虚拟机可用的字节数 返回此抽象路径名命名的分区的大小 返回此抽象路径名所命名的分区中未分配的字节数
问题内容: function foldersize($path) { $total_size = 0; $files = scandir($path); 在脚本执行完成之前,为什么处理器使用率会过高或100%升高?可以做些什么来优化它吗?还是有其他方法可以检查文件夹和其中的文件夹大小? 问题答案: 以下是其他地方提供的其他解决方案: 如果在Windows主机上: 否则,如果在Linux主机上:
本文向大家介绍如何在C#中获取文件大小?,包括了如何在C#中获取文件大小?的使用技巧和注意事项,需要的朋友参考一下 FileInfo类用于处理文件及其在C#中的操作。 它提供了用于创建,删除和读取文件的属性和方法。它使用StreamWriter类将数据写入文件。它是System.IO命名空间的一部分。 Directory属性检索代表文件父目录的对象。 DirectoryName属性检索文件的父目录