4

mysql から h2 にデータをロードするタスクがあります。ツリーのノード数が約 50000 を超える UI レベルでツリーをレンダリングする必要があります。したがって、H2 から読み取ると遅延が減少する可能性があると考えてください。

そのために、MySQL から H2 に約 1M (すべての顧客が独自のツリーを持っています) のレコードをロードする必要があります。ロード部分はアプリケーションによって処理されます。MySQL から読み取り、H2 へのバッチ更新を行う場所。1 回の実行で 40000 レコードを処理します。しかし、移行プロセスが続行すると、サーバーのメモリが不足します。

「SET LOG 0、SET LOCK_MODE 0、SET UNDO_LOG 0」を使用してデータを効率的にロードしようとしましたが、それでもサーバーがメモリ不足になります。

ヒープに 512M のメモリを設定しました。

H2 ドキュメントには、「create table ... as select ...」を使用してデータをより速くロードするように記載されていますが、アプリケーションは 1M レコードを読み取って CSV ファイルを作成する必要があるため、ロード時間は短縮されないと思います。

誰かが方法を提案できますか?

4

1 に答える 1

2

CSV ファイルを作成しなくても済むように、ステートメントまたは を使用してリンク テーブルを作成できます。次に、を使用してデータをコピーします。CREATE LINKED TABLECALL LINK_SCHEMACREATE TABLE ... AS SELECT

メモリの問題についてですが、インメモリ データベースを作成しますか? はいの場合、メモリ内ファイル システムまたは圧縮されたメモリ内ファイル システム:jdbc:h2:memFS:testまたはjdbc:h2:memLZF:testの代わりに使用すると、メモリを節約できます (速度はいくらか犠牲になります) jdbc:h2:mem:test。インメモリ データベースを使用していない場合、何が問題なのかわかりません。

于 2012-11-17T08:31:29.580 に答える