データベース(MySQL)を使用したプロデューサー/コンシューマシステム、これは実行可能ですか?

StackOverflow https://stackoverflow.com/questions/2449172

質問

使用する必要があります なにか 私のシステムを、それぞれ異なるオペレーティングシステムを持つさまざまなマシンで実行している複数の消費者/生産者と調整するため。私はこれを行うためにMySQLを使用することについて研究してきましたが、それは途方もなく難しいようです。

私の要件は簡単です。消費者/生産者をいつでも追加または削除できるようにしたいので、お互いにまったく依存してはいけません。当然、データベースは2つをうまく分離します。

MySQL用のQ4Mメッセージキューイングプラグインを見てきましたが、使用するのは複雑なようです。

可能な限り最善のシステムを構築する方法についての入力が本当に必要です。

役に立ちましたか?

解決

私は何かを使用して、それぞれが異なるオペレーティングシステムを持つ異なるマシンで実行されている複数の消費者/生産者と私のシステムを調整する必要があります

それはメッセージキューです。他の選択肢を追求しないでください。他のすべて(つまり、挿入と削除を備えたデータベースを使用)は、恐ろしく遅くて面倒です。

(1)データベースが遅いため、データベースを使用して大規模で遅いメッセージキューを構築することは、実際にはひどく発生することがよくあります。 4)問題にふさわしいよりもはるかに頭上です。

多数のメッセージキューソリューションがあります。

Q4Mを機能させることができない場合は、別のものに移動する必要があります。

http://en.wikipedia.org/wiki/message_queue

http://linux.die.net/man/7/mq_overview

http://qpid.apache.org/

http://code.google.com/p/httpsqs/

他のヒント

そのようなシステムを構築するのは実際には(かなり)複雑です。 (もちろん実行可能だからです)。

複数のプロデューサーがいる場合 1 消費者、それは簡単です。すべてのプロデューサーは同時に書き込み、単一の消費者は表示されたらすぐにデータを読み取ります(コミット)。

ただし、スケーラビリティが必要な場合 いくつかの 消費者、些細なことではないロックスキームを作成する必要があります。 (2人の消費者に派遣が派遣されないようにする必要があります。これは、データベーストランザクションとロックで達成するのは簡単ではありません。素朴なソリューションは、1人の消費者しかいないように、すべてのメッセージ配信のシリアル化につながります。 )。

内蔵ソリューションを使用することをお勧めします。読むこともできます この質問 同様の質問について。

サードパーティのソフトウェアがなければ実現可能だと思います。

私の最初のデザインは次のようになります:

  • プロデューサーはデータベースにデータを書き込みます
  • 一貫性を保証するには、トランザクションを使用する必要があります
  • 消費者は、トランザクションを使用してデータ(読み取りおよび削除)を処理します。

トランザクション要件のため、InnoDBはストレージエンジンの論理的な選択です。また、分離レベルを慎重に選択する必要があります。私の最初の推測は、Phantomの読み取りを避けるために「シリアル化可能」ですが、おそらくより弱いレベルも可能です。

パフォーマンスとスケーラビリティが問題の場合は、「実際の」メッセージングソリューションの使用を検討する必要があります。展開すると、パフォーマンスやスケーラビリティの問題につながる可能性が最も高くなります。

状況に依存します。

私の場合、1人のプロデューサーだけが1日あたり数千のメッセージを作成し、数人の消費者が次の24時間でこれらのメッセージを消費し、それぞれが完了するのに数分かかります。ですから、MySQLは私の要件を満たすと思います。そして、トランザクションを使用して消費者間の一貫性を確保することができます。

それが役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top