0

多くのコンピューターが書き込みを行うキューを作成したいと考えていますが、各コンピューターは一生に一度しか書き込みません。それを達成するための最良の方法は何だと思いますか?

SQL Server キュー、キューまたはサービス ブローカー インフラストラクチャとして使用される SQL Server テーブルについて読んだことがあります。

  • SQL Server テーブル : 作成はかなり簡単ですが、パフォーマンスが心配です
  • サービス ブローカー : より複雑なインフラストラクチャ。送信者でサービスを実行し、送信キューを用意する必要があるようです。これは、すべての送信者が一生のうちに 1 つのメッセージしか送信しないためです。

私の場合、どのソリューションが最適ですか?

4

3 に答える 3

0

私たちの実動コードは、テーブルをキューとして使用します。Service Broker の堅牢性は実際には必要ありません。とにかく、すべてのコードは既に他のもののためにデータベースに接続しています。

私たちのコードは 1 秒あたり数百件以上のトランザクションを必要としません。キューが 1 秒あたり 10,000 件を超えるトランザクションを達成できることを示したので、パフォーマンスにはかなり満足しています。

これは、キューとして使用するテーブルを設計する方法を説明する素晴らしい記事です: http://rusanu.com/2010/03/26/using-tables-as-queues/

私は、最初にそれを読まずにあなたのテーブルを設計することはありません.

当社は、1 秒間に数万または数十万の挿入を必要とする設計を検討しているため、ディスク アクセスを必要としない Redis を含む代替キュー戦略も検討していますが、イベントでデータが失われることは必ずしも気にしません。失敗の。スループットが必要な場合は、これらの方法も検討します。

于 2013-06-30T21:28:12.263 に答える
0

システム全体を「複数のライターと 1 人のリーダー」から「1 人のライターと 1 人のリーダー」に変換するより良い方法でしょうか? つまり、書き込み要求を受け取り、データベースへの唯一のライターになるサービス (Web またはその他) を作成することができます。これは通常の状況であり、多くの標準的な解決策があります。

于 2013-07-11T09:31:49.480 に答える
0

各コンピューターでサービスを作成する必要はありません。Service Broker オブジェクトは、1 つの DB サーバーに限定できます。たとえば、メッセージを削除する必要がある 100 台のコンピューターがある場合、データベース サーバーへの接続文字列が必要であり、メッセージをエンキューするストアド プロシージャを実行します。
とはいえ、サービス ブローカ キューは、これにはやり過ぎのようです。単純なテーブルでおそらく十分であり、MSMSQ (DB に接続する必要がなくなる) で十分です。

于 2013-06-30T18:58:22.417 に答える