私のプロジェクトには、並行性とデータベース管理が含まれています。私はすべてのスレッド間で同時にデータベースを編集しなければならないという意味です。具体的には、私はデータベースから行を読み込み、その行をつかんだことを示す行を挿入しています。これはトランザクションで動作する可能性がありますが、複数のマシンでこのプログラムを実行しているため、それぞれのデータベース接続が異なることになります。私の上記の仕事を達成するための彼らのより良い方法ですか?多数のクエリを扱い、重複を避ける
1
A
答えて
4
トランザクションとバージョンフィールド/列(タイムスタンプまたはタイムスタンプとバージョン番号の増加やその他のメカニズム)を使用したオプティミスティック並行性の適用は必須です。
しかし、別のマシンでこれを実行しているので、かなりの量の反復が失敗した可能性があります。トランザクションが発生します。
これを防ぐには、キューイングのメカニズムを使用できます。ディスパッチャプログラムは、未処理のレコードをデータベースから読み取り、キューまたはジョブディスパッチャを使用してワーカーにディスパッチします。その後、各作業者はそのキューからIDを取得し、トランザクション内でそのIDを処理します。
この方法:
- トランザクションが失敗した場合、ディスパッチャは、労働者がダウンした場合、他の労働者は
- (ダウン気付いするモニタリングの問題です)続けるだろう再び
- それをキューう(データベースがボトルネックになっていない限り)いつでもスケールアウトすることができ、新しい従業員を追加することができます。
この場合、リクエスト/返信スキーマは、キューの輻輳。私はNATSを似たような場合にうまく利用しました。もちろん、あなたはあなたが選んだ別のツールを使うことができますが、要求/応答の部分を世話しなければならないことを忘れないでください。キューに物事を投げても問題はすべて解決されず、キューに入れられた作業の量を制御する必要があります。
関連する問題
- 1. 避け引数の重複は(...)
- 2. 避けクローンの重複
- 3. Gephiでラベルの重複を避ける
- 4. PHPでIDの重複を避ける
- 5. iPhoneのアドレス帳:重複を避ける
- 6. エンティティフレームワーク:重複の挿入を避ける
- 7. 重複ファイルのアップロードを避ける
- 8. 重複するコールバックを避ける
- 9. 重複するアイテムを避けるPython
- 10. arangoDBで重複を避ける方法
- 11. Cで重複イベントサブスクリプションを避ける
- 12. Hibernate、重複を避ける方法は?
- 13. factory_boyファクトリで重複を避ける
- 14. データベーステーブルに重複アドレスを避ける
- 15. 3つの結合テーブル全体でSQLクエリで重複を避ける方法
- 16. 大規模なビューで多数の重複値を含むテーブルスキャンを避けるための提案
- 17. 多対多の関係で重複するエントリを避ける方法参加する
- 18. 複数の重複クエリ - Laravel
- 19. NumPyの割り当てにおける重複インデックスの扱い
- 20. データベースのつぶやきをアーカイブする(重複を避ける)
- 21. mySQLに重複行を挿入するのを避ける
- 22. "クラシック" SQLクエリの問題、重複を回避する方法
- 23. Sqlalchemy:多重継承を避け、抽象基底クラスを持つ
- 24. ワークフローで複数のインスタンスを避ける
- 25. 複数のif..elseifステートメントを避ける
- 26. 複数フォームの提出を避ける
- 27. 複数のajaxリクエストを避けるangularJS
- 28. ウェブアプリケーションで複数のログインを避ける
- 29. 複数の評価を避ける
- 30. サードパーティのフレームワーク間で重複するシンボルを避ける方法