有没有办法在内存中加载结果查询?

时间:2011-07-29 12:57:42

标签: java database large-data

我有一个庞大的数据库(2.1亿行),我需要执行一些计算来提取一些统计结果。据我了解,很明显直接在这个数据库上执行计算是不明智的。

我现在要做的是将表的一部分加载到内存中(表示100万行)。我不确定如何将ResultSet的整个数据块加载到内存中,而不是逐行迭代。

有什么想法吗?

5 个答案:

答案 0 :(得分:7)

  

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我同意以前的答案,将这样的数量加载到内存中可能并不好。 但是回答你的问题,有ResultSetjavax.sql.RowSet

的断开代表的课程

答案 3 :(得分:0)

将数百万行从数据库移动到中间层,只是为了进行可以在数据库上完成的计算,对我来说完全没有意义。您应该考虑在数据库上执行此操作。对其进行原型设计并查看数据是否说服您放弃偏见。

答案 4 :(得分:0)

您要做的是OLAP (Online Analytical Processing)。许多RDBMS具有丰富的功能集,可用于计算内容,例如Oracle Analytic Functions。如果无法在单个SQL查询中进行计算,则可以编写为您完成工作的存储过程。

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