我正在尝试编写一个可以处理大型结果集的java函数
该表有12亿行,即189 Gb的数据
目前,我查询所有数据并提取我存储在各自对象中的信息。(使用百万行样本数据库)
my_first_table
使用189 Gb数据时,我的计算机内存将无法保存信息 我从来没有碰过一个有十亿+行的表格,而我的一些方法涉及所有的表格属性
答案 0 :(得分:1)
从您的代码中,您似乎正在构建一个java对象,该对象使用相同的mmsi字段收集alla坐标。您没有提供有关此对象(mmsi及其坐标列表)用法的信息。根据这些信息,您可以通过mmsi查询数据排序,然后查询时间戳(您的order by子句现在仅通过时间戳),当您在结果集中找到mmsi的不同值时,您收集了有关特定mmsi的所有数据,以便您可以使用它没有阅读其他数据。 我认为你真的不需要在内存中获取所有数据;您可以重写查询,以便只获得固定(滑动窗口)数量的Vessel对象;你必须分页数据(即从位置x的船只开始检索10个容器的块)
为了提供更详细的回复,您必须解释您对船只所做的事情。
答案 1 :(得分:0)
如果内存是ResultSet
的问题,您可以设置提取大小,但在提取过程中您需要清除对象,以确保不会耗尽内存。
使用Postgres,您需要关闭自动提交或不会出现提取大小。
connection.setAutoCommit(false);
Statement stmt = connection.createStatement();
stmt.setFetchSize(fetchsize);
您可以在https://jdbc.postgresql.org/documentation/94/query.html#query-with-cursor
了解有关缓冲结果集的更多信息