2010-12-14 95 views
0

为什么数据库的结果集如此之大?我通常会得到大约一百万行的结果集,每个结果集都包含一些数字,一个varchar(75),一个大的int ...等等。可能不会超过每行100个字节。但它占用了6 GB!这是典型的行为吗?我的堆栈是Postgres + JDBC + Spring - 我没有任何其他技术的经验。为什么结果集如此之大?

+2

对于任何人给你一个很好的答案,你将不得不对你的整个问题做更多具体的描述。 “什么”是什么意思? “可能”不超过100B /行?做实际的数学,然后问你的问题。 – 2010-12-14 00:40:01

+2

将整个数据库表复制到Java内存中的原因是什么?对于你想要达到的目标,可能有更好的解决方案。例如,按批处理或按行处理,或以分页视图显示。 – BalusC 2010-12-14 00:41:26

+0

你如何衡量“它占用6 GB”? – 2010-12-14 00:41:55

回答

1

我们需要查看查询以了解它为什么如此之大。也许你没有加入表格。 (我希望我可以发表评论...)

+0

恭喜!你现在可以评论! :) – 2010-12-14 00:41:56

+0

Yaaaaaay〜有点令人沮丧,绕过网站寻找我发誓以前见过的按钮... – Pimgd 2010-12-14 00:43:31

+2

当低于50代表,只有在你自己的问题上评论其他人的帖子。 – BalusC 2010-12-14 00:44:34

2

java.sql.ResultSet本身通常只有几十行数据缓冲在任何时间(可配置)。

现在,如果您将所有这些行作为Java对象加载到内存中,那么您将看到大量的内存使用。例如,String每个字符有两个字节,两个对象标题,一个偏移量,两个长度和一个高速缓存的散列值。 BigInteger与此类似。这一切都加起来。使用分析器。

对缓存行集可能会更好。这或者不会立即加载整个结果集。

相关问题