外部イベント (着信測定データ) が発生すると、Java コードのイベント ハンドラーが呼び出されます。データは MySQL データベースに書き込む必要があります。これらの呼び出しの頻度が高いため (1 秒あたり 1000 件以上)、挿入を効率的に処理したいと考えています。残念ながら、私はプロの開発者ではなく、データベースの馬鹿でもあります。
効率の側面を無視すると、私のコードはおおよそ次のようになります。
public class X {
public void eventHandler(data) {
connection = DriverManager.getConnection()
statement = connection.prepareStatement("insert …")
statement.setString(1, data)
statement.executeUpdate()
statement.close()
connection.close()
}
}
私の理解では、ステートメントで addBatch ()とexecuteBatch( )を呼び出すことで、物理ディスクへのアクセスを制限して、1000 回目の挿入ごとに言うことができます。ただし、上記のコード スケッチでわかるように、ステートメントオブジェクトはeventHandler()の呼び出しごとに新しくインスタンス化されます。したがって、バッチ メカニズムはこのコンテキストでは役に立たないというのが私の印象です。自動コミットをオフにしてから接続オブジェクトでcommit()を呼び出すのと同じです。接続オブジェクトは挿入のたびに閉じられるからです。
接続とステートメントをローカル変数からクラス メンバーに変換し、プログラムの実行中にそれらを再利用することができました。しかし、データベース接続を常に開いたままにしておくのは悪いスタイルではないでしょうか?
解決策は、データを手動でバッファリングし、適切なバッチを収集した後にのみデータベースに書き込むことです。しかし、これまでのところ、データベースにバッファリングをさせる方法を教えてくれることを願っています。