2010-12-14 8 views
0

なぜデータベースの結果セットがそれほど大きいのですか?私は通常、結果セットを取得します。その結果は、100万行におよぶものです。それぞれに2つの数値、varchar(75)、大きな整数などが含まれています。たぶん行ごとに100バイトを超えることはありません。それでも6GB必要です!これは典型的な動作ですか?私のスタックはPostgres + JDBC + Springです。私は他の技術を経験していません。なぜ結果セットが大きいのですか?

+2

あなたは、誰かがあなたに良い答えを与えるためのあなたの全体の質問に、より具体的にしなければならないでしょう。 "何でも"はどういう意味ですか? "おそらく" 100B/rowをそれほど超えないだろうか?実際の数学を行い、あなたの質問をしてください。 –

+2

DBテーブル全体をJavaのメモリにコピーする理由は何ですか?あなたが達成しようとしているものに対してはるかに良い解決策があるかもしれません。たとえば、バッチ単位または行単位での処理、ページ単位のビューでの表示などです。 – BalusC

+0

どのように「6 GBを要する」と測定していますか? –

答えて

1

なぜそれが大きいのかを見るためにはクエリを見る必要があります。多分あなたはテーブルを正しく結合していないでしょう。 (私はそれをコメントすることができます...)

+0

おめでとうございます!あなたは今コメントすることができます! :) –

+0

Yaaaaaay〜前に見たことがあると宣誓しているボタンを探してサイトを回るのはちょっとイライラしています... – Pimgd

+2

50人未満の担当者は、自分の質問でのみ他人の投稿にコメントすることができます。 – BalusC

2

java.sql.ResultSetは、通常、いつでも数十列のデータしかバッファリングできません(設定可能)。

これらすべての行をJavaオブジェクトとしてメモリにロードすると、大量のメモリが使用されます。たとえば、Stringには、1つのcharあたり2バイト、2つのオブジェクトヘッダー、オフセット、2つの長さ、およびキャッシュされたハッシュ値があります。 BigIntegerも同様です。それはすべて追加されます。プロファイラを使用します。

キャッシュされた行セットを使用したほうがよい場合があります。それは、一度に結果のセット全体をロードするか、ロードしません。

関連する問題