Java 有没有办法将结果查询加载到内存中?

Java 有没有办法将结果查询加载到内存中?,java,database,large-data,Java,Database,Large Data,我有一个巨大的数据库(21亿行),我需要执行一些计算来提取一些统计结果。据我所知,直接在这个数据库上执行计算显然是不明智的 我现在要做的是将表的一部分加载到内存中(比如一百万行)。我不知道如何在不逐行迭代的情况下将ResultSet的整个数据块加载到内存中 有什么想法吗 显然,直接在此数据库上执行计算是不明智的 相反,在数据库中执行此操作很可能是最明智的方法。数据库的建立正是为了处理大量数据。如果可以将计算表示为SQL查询,则数据库将计算出如何高效地执行它。一般来说,它比您将所有数据加载到内存并

我有一个巨大的数据库(21亿行),我需要执行一些计算来提取一些统计结果。据我所知,直接在这个数据库上执行计算显然是不明智的

我现在要做的是将表的一部分加载到内存中(比如一百万行)。我不知道如何在不逐行迭代的情况下将ResultSet的整个数据块加载到内存中

有什么想法吗

显然,直接在此数据库上执行计算是不明智的

相反,在数据库中执行此操作很可能是最明智的方法。数据库的建立正是为了处理大量数据。如果可以将计算表示为SQL查询,则数据库将计算出如何高效地执行它。一般来说,它比您将所有数据加载到内存并自己处理要快得多


有些类型的计算不属于这种情况,例如图形分析,但它应该是您的默认方法。

为什么在迭代结果集时出现问题?如果您希望在较大的数据块中检索实际数据(例如,为了防止网络到数据库的往返),可以设置结果集的获取大小,以提示JDBC驱动程序检索较大的数据部分。

我同意前面的回答,即在内存中加载这样的数据量可能不好。
但是回答您的问题,有一个类用于断开连接地表示
结果集

将数百万行从数据库移动到中间层,只是为了在数据库上进行计算,对我来说毫无意义。您应该研究在数据库上执行此操作。制作原型,看看这些数据是否能说服你放弃偏见。

你想做的就是所谓的。许多RDBMS都有丰富的功能集来实现这类功能,精确地说是用于计算数据,例如Oracle分析函数。如果无法在单个SQL查询中完成计算,则可以编写存储过程来完成这项工作


但是请不要从数据库中加载太字节的数据,只需做一些可以直接在数据存储中完成的计算。为什么?您将使用99%的时间加载和传输数据,1%的时间用于计算。

据我所知,直接在此数据库上执行计算显然是不明智的。
取决于计算。我同意Jacob的观点:您的理解是错误的。这正是关系型DBMS的用意。完全同意,数据库通常能更好地处理数据操作。在大多数情况下,在数据库中进行预计算,然后仅查询结果是大多数情况下的最佳方法。断开连接不会解决中间层上所有RAM的问题。好的,我将更具体地介绍数据,我有一个日期字段。我需要对一周中的几天和一天中的几个小时进行一些统计。e、 星期一有一百万条记录等等。我想我可以在更小的部分和多个线程上运行这些统计数据。最后,我将把所有结果汇总在一起。