0

巨大なデータベース (21 億行) があり、統計結果を抽出するために計算を実行する必要があります。私の理解では、このデータベースで直接計算を実行することが賢明でないことは明らかです。

私が今やろうとしているのは、テーブルの一部をメモリにロードすることです (100 万行と言います)。行ごとに反復せずに ResultSet のデータのチャンク全体をメモリにロードする方法がわかりません。

何か案が?

4

5 に答える 5

7

このデータベースで直接計算を実行するのは賢明ではないことは明らかです

それどころか、データベースで行うのが最も賢明な方法である可能性が非常に高いです。データベースは、膨大な量のデータを処理するために正確に構築されています。計算を SQL クエリとして表現できれば、データベースはそれを効率的に実行する方法を見つけ出します。一般に、すべてのデータをメモリにロードして自分で処理した場合よりもはるかに高速に処理されます。

これが当てはまらない種類の計算もあります (グラフ分析など) が、デフォルトのアプローチにする必要があります。

于 2011-07-29T13:03:20.513 に答える
0

データベースで実行できる計算を実行するためだけに、データベースから中間層に数百万行を移動することは、私にはまったく意味がありません。データベースでこれを行うことを検討する必要があります。プロトタイプを作成して、データがあなたの偏見を捨てるように説得するかどうかを確認してください。

于 2011-07-29T13:11:53.900 に答える
0

そのような量をメモリにロードするのは良くないかもしれないという以前の回答に同意します。しかし、あなたの質問に答えると、切断された表現のクラスがありますResultSetjavax.sql.RowSet

于 2011-07-29T13:10:07.460 に答える
0

結果セットの反復処理に問題があるのはなぜですか? 実際のデータをより大きなチャンクで取得する場合 (たとえば、データベースへのネットワーク ラウンドトリップを防ぐため)、結果セットのフェッチ サイズを設定して、JDBC ドライバーにデータのより大きな部分を取得するように指示できます。

于 2011-07-29T13:05:30.090 に答える
0

What you want to do is called OLAP (Online Analytical Processing). Many RDBMS have a rich feature set for such functionality, precisely for calculating stuff, for instance Oracle Analytic Functions. If the calculation cannot be done in a single SQL query, you can write stored procedures doing the job for you.

But please - do not load terabytes of data out of some database just do do some calculations that can be done in the data store directly. Why? You'll use 99% of the time for data-loading and transfer and 1% for calculation.

于 2011-07-30T16:13:32.610 に答える