【问题标题】:Process a large amount of data from postgreSQL with Java [duplicate]使用Java处理来自postgreSQL的大量数据[重复]
【发布时间】:2015-03-28 19:35:32
【问题描述】:

我需要用 Java 编写一个小程序,从 postgreSQL 数据库中读取大量记录,将它们转换为 JSON 并写入其他地方。

显然,如果我不想出现内存不足错误,我无法同时加载所有记录(500000 行)。

在内存中加载 1000 条记录、处理并转到下一个 1000 条记录的最佳方法是什么? 有人有想法吗?

【问题讨论】:

  • 请注意有很多类似的问题,但还有一个是this one

标签: java database postgresql jpa


【解决方案1】:

默认情况下,Postgres JDBC 驱动程序将完整的ResultSet 加载到内存中。这可以通过关闭自动提交并通过设置大于 0 的提取大小启用基于游标的检索来防止。

详情在手册中:https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor

因此,如果您执行以下操作:

Connection con = ....; // open the connection
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.setFetchSize(1000);
ResultSet rs = stmt.executeQuery("select ...");
while (rs.next()) 
{
   // do something with the row
}

这永远不会将超过 1000 行加载到内存中。可以通过更改提取大小来控制内存中保存的行数。

我不知道JPA,但是控制自动提交应该是直截了当的,但我不知道如何通过JPA控制提取大小。可能还取决于您的 JPA 提供程序。

【讨论】:

  • 感谢您的解释; )
猜你喜欢
  • 1970-01-01
  • 2013-01-10
  • 2011-01-10
  • 1970-01-01
  • 2013-05-03
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多