0

Web で特定のデータを検索するワーカー プロセスを考えてみましょう。後で使用するために最初のプロセスの結果をインデックス化するには、別のプロセスが必要です。インデックス作成の部分では、生データ (検索結果) を巨大な分散 HBase リポジトリに特定の方法で書き込む必要があります。これら 2 つのプロセスの速度を比較して判断することはできません。これらのシステムの 1 つが一時的にダウンしており、ウェイクアップ時に配置されたタスクを実行する必要がある場合があります。JavaEEを使用しています。現在、これは私がこれを実装するために念頭に置いている方法です。

  1. 最初のプロセスは、検索結果を MySQL データベースに保存し、テーブルに追加した新しい行の ID を含むメッセージを送信します。
  2. MOM は 2 番目のプロセスを起動して、MySQL データベースに保存されている新しい生データを消費します。
  3. 2 番目のプロセスは、実際のデータベース (HBase) 内のデータのインデックス作成が完了すると、MySQL テーブルをクリアします。

デザインの適切性を検証するために、デザインに関する専門家のコメントが必要です。たとえば、2 番目のプロセスが継続的にテーブルをポーリングして、新しいレコードがあるかどうかを確認するとどうなるでしょうか? 正しいテクノロジーを使用していますか、それともやり過ぎですか? デザインを簡素化する必要がありますか?それとも何か不足していますか? 私のソリューションが適切である場合、実装中に留意すべきことはありますか? 前もって感謝します。

4

1 に答える 1

1

可能であれば、よりシンプルな設計に固執し、MySQL ステージング テーブルを捨てて、JMS に固執します。

したがって、次のようになります。

  1. [P1] 検索結果を JMS キュー "INDEX.QUEUE" に送信します。
  2. [P2] キュー "INDEX.QUEUE" のメッセージを非同期に処理するだけで、メッセージ ペイロード内の検索結果から検索インデックスを生成します。

メッセージングは​​これらのタスクを支援するためにあります。データベース テーブルのポーリングはほとんど同じですが、よりトリッキーです。このタスク用に設計された永続的でトランザクションに対応した MOM を利用できるのに、車輪を再発明する必要はありません。

于 2012-10-09T18:03:29.607 に答える