私は現在、計算を実行するシステムを構築しており、5 秒ごとに、それらの計算に基づく情報を MySQL の数行に挿入または更新します。私は現在、このシステムをいくつかの異なるサーバーで同時に実行することに取り組んでおり、それぞれが同様の処理を行い、同じ行セットに書き込みを行っているいくつかのエージェントを使用しています。各エージェントが一連の行を書き込む順序は既にランダム化していますが、まだ多くのデッドロックが発生しています。これらの行き詰まりを乗り越えるための最良/最速の方法は何ですか? クエリが発生するたびに再実行するか、行ロックを行うか、またはまったく別のことを行う必要がありますか?
質問する
83 次
1 に答える
0
「少数の行」を更新するために複数のクライアントを必要としないものを試すことをお勧めします。
たとえば、結果を生成する各エージェントINSERT
に、MEMORY アクセス メソッドを使用してステージング テーブルに対して実行させることができます。
次に、5 秒ごとに MySQL イベント (サーバー内のストアド プロシージャ) を実行して、そのテーブル内のすべての行をループし、結果を「少数の行」にポストしてから削除します。ステージング テーブルの行を順番に処理することが重要な場合は、AUTO_INCREMENT id フィールドを使用できます。しかし、それらが整然としていることは重要ではないかもしれません。
それよりも洗練されたスケーラブルなものにしたい場合は、Apache ActiveMQ のようなキュー管理システムが必要になります。
于 2012-10-11T19:16:33.867 に答える