上記の質問によると、データベースの1つのテーブルに20000を超える行を挿入する必要があります。パフォーマンスに応じて、私はこのプロセスの効率を上げる方法を探しています。私の最初のアイデアは、Java.Threadでこれを実現することでしたが、これが十分に節約できるかどうかはよくわかりません。誰かが私に何か良いアドバイスがありますか?
編集:私はすでに使用していますpreparedStatement.addBatch()
上記の質問によると、データベースの1つのテーブルに20000を超える行を挿入する必要があります。パフォーマンスに応じて、私はこのプロセスの効率を上げる方法を探しています。私の最初のアイデアは、Java.Threadでこれを実現することでしたが、これが十分に節約できるかどうかはよくわかりません。誰かが私に何か良いアドバイスがありますか?
編集:私はすでに使用していますpreparedStatement.addBatch()
すべてのスレッドが異なるConnectionオブジェクトを使用し、リソースを適切に破棄するという条件で、私には安全に見えます。
とにかく、DB自体には同時に実行されるリクエスト( MySQLではmax_connections)に制限があるため、この数より多くのスレッドを作成するのに役立たないことに注意してください。また、バッチ挿入などの他の最適化も検討してください。
異なるスレッドからデータベースにアクセスしても問題はありません。Eyalが書いたように、Connectionsのようなものが単一のスレッドでのみ使用され、適切に破棄されることを確認してください。
もう1つの質問は、これが実際にパフォーマンスに役立つかどうかです。複数のスレッドに頼る前に、他のすべてのことを行ったことを確認します。特にバッチステートメントを使用することは、まだ検討していない場合に検討する最初のオプションのようです。
私の理解が正しければ、何千ものクエリをデータベースに書き込む方法が必要です。MySQL クエリのバッチを実行できることをご存知ですか? これについては、Java の Stackoverflow で既に質問があります。PreparedStatement を 使用して複数の行を MySQL に挿入します。
使用できます: PreparedStatement#addBatch() http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#addBatch%28%29
および PreparedStatement#executeBatch() http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#executeBatch%28%29
詳細については、上記のリンクで @BalusC の回答を確認してください。