ファイルをリストに解析してからデータをDBに挿入するJavaプログラムに取り組んでいます。これは、大量のメモリを備えたサーバーで実行されます。注意が必要な Java の制限はありますか?
たとえば、DBに挿入する前にGBのデータをリストに解析してはいけませんか?
心配する必要があるのは Java だけではありません。
ネットワーク帯域幅の使用、データベース サーバーの CPU の占有、データベース トランザクション ログのいっぱい化、大量の挿入に対する JDBC パフォーマンス、データベースがインデックスを更新したり人工キーを生成したりする間の速度低下などがあります。
入力が大きくなりすぎた場合は、それらをチャンクに分割し、チャンクを個別にコミットする必要があります。大きすぎるかどうかは、データベースによって異なります。
人工キーが割り当てられる方法によっては、プロセスが遅くなる可能性があります。hilo ジェネレーターを使用するなどして、事前に値のバッチを作成する必要がある場合があります。
多数のスレッドを起動してデータベース サーバーを攻撃すると、トランザクションを整理して相互に干渉しないようにする必要があるため、競合が発生し、データベース サーバーの処理が難しくなります。
ある種の区切りファイルへの書き込みを検討してから、一括挿入ユーティリティを実行してその内容をデータベースにロードします。そうすれば、データベースは実際に連携し、インデックスの更新と制約のチェックを一時停止でき、シーケンスとトランザクションは問題になりません。JDBC より桁違いに高速です。
注意が必要な制限は次のとおりです。
最近の大量のメモリは 256 ~ 512 GB です。1 つの JVM (または Zing) で 32 GB 以上が必要な場合は、オフ ヒープ メモリを使用することをお勧めします。
これは、JVM に割り当てたメモリの量によって異なります。
JVM に割り当てることができるメモリの量は、クライアント VM (または) サーバー VM の種類によって異なります。
確認-Xmx
と-Xms
設定。
直接ではありませんが、JVM 引数を少し調整したい場合があります。
JVM を起動するときの Xms および Xmx パラメータは何ですか? 参考になるかも。