0

大規模なデータベースの結果セットに関して問題があります。(MySQLDB、Java 1.7)

タスクは、ある列のすべてのエントリを別のデータベースに変換することです。(たとえば、すべての数値を 3 で割り、別のデータベースに書き込みます)

データベースには約 70 列と数百万行が含まれているため、最初のアプローチは SELECT * を取得し、結果セットを列ごとに解析することでした。

残念ながら、この方法で解析する方法は見つかりませんでした。指定された方法は行ごとに処理することを意図しているためです (while(rs.next()) {} など)。

この方法は好きではありません.70個の大きな配列を作成するため、メモリ使用量を減らすために一度に1つしかありませんでした.

だからここに私の主な質問があります:

  1. 方法はありますか?
  2. すべての列に対してクエリを作成し、それらを解析する必要があります (一度に 1 つの配列ですが、70 クエリ) または
  3. ResultSet 全体を取得して行ごとに解析し、70 個の配列に書き込む必要がありますか?

よろしくお願いします!

4

2 に答える 2

2

クエリをページングしてみませんか?'n'行を一度に引き出し、変換を実行してから、それらを新しいデータベースに書き込みます。

つまり、1回のクエリ/反復ですべてをプルアップしてから、一度にすべてのロットを書き込む必要はなく、行ごとに作業する非効率性はありません。

私の他のコメントは、おそらくこれは時期尚早の最適化です。データセット全体をロードして、どのくらいのメモリが必要かを確認してみましたか。それが数十または数百のメガのオーダーである場合、JVMがそれを簡単に処理することを期待します。

変換はJavaで行う必要があると思います。SQLで実行できる可能性がある場合は、データベース内で完全に実行すると、さらに効率的になる可能性があります。

于 2012-12-28T09:40:24.343 に答える
0

mysqlだけでやってみませんか。

このクエリを使用します:

create table <table_name> as select <column_name_on_which_you_want_transformation>/3 from <table name>;
于 2012-12-28T09:41:54.173 に答える