MySQLデータベースを分析するアプリケーションを作成していますが、複数のDMLを同時に実行する必要があります。例えば:
// In ResultSet rsA: Select * from A;
rsA.beforeFirst();
while (rsA.next()) {
id = rsA.getInt("id");
// Retrieve data from table B: Select * from B where B.Id=" + id;
// Crunch some numbers using the data from B
// Close resultset B
}
それぞれがデータベースへの独自の接続を持つデータオブジェクトの配列を宣言しています。これにより、データ分析のためにいくつかのメソッドが呼び出されます。問題は、すべてのスレッドが同じ接続を使用するため、すべてのタスクが例外をスローすることです。「ロック待機タイムアウトを超えました。トランザクションを再開してみてください」
特定のオブジェクトが独自の接続を持ち、他のオブジェクトから独立して必要なタスクを実行するような方法でコードを記述する方法があると思います。例えば:
DataObject dataObject[0] = new DataObject(id[0]);
DataObject dataObject[1] = new DataObject(id[1]);
DataObject dataObject[2] = new DataObject(id[2]);
...
DataObject dataObject[N] = new DataObject(id[N]);
// The 'DataObject' class has its own connection to the database,
// so each instance of the object should use its own connection.
// It also has a "run" method, which contains all the tasks required.
Executor ex = Executors.newFixedThreadPool(10);
for(i=0;i<=N;i++) {
ex.execute(dataObject[i]);
}
// Here where the problem is: Each instance creates a new connection,
// but every DML from any of the objects is cluttered in just one connection
// (in MySQL command line, "SHOW PROCESSLIST;" throws every connection, and all but
// one are idle).
私を正しい方向に向けてもらえますか?
ありがとう