2016-12-20 5 views
2

私はDataflowでストリーミング検索/フィルタリングシステムを実装しようとしています。システムそのものは非常に複雑なので、簡単な例を使って質問を説明します。ヒストリーデータとストリーミングデータの結合

私のシステムのユーザーが、特定のキーワードを含む記事にマッチするニュース記事のアラートを設定できるようにしたいとします。私の質問に関係するのは、アラートがシステムに追加されたときに戻って、そのキーワードを含むすべての以前の記事と一致する必要があるということです。もちろん、新しい記事とのマッチングも開始する必要があります。

私の考えは、記事のストリームにアラートのストリームを参加させ、各記事を各アラートと照合してチェックすることです。

私の質問はこれです:新しいアラートと照合することができる過去の記事のアーカイブを持つ良い方法と、あまりにも複雑で特殊なケーシングを避けるための方法はありますか?理想的には、グローバルなウィンドウとすべての新しい要素を放出し、アラートのストリームと結合するトリガを持つpcollection内のすべての記事を保持するだけです。これは実現可能ですか?そして、私の仕事に問題がある場合、私は記事を失わないことをどのようにして保証しますか?

答えて

1

基本的には、新しい記事が到着するたびに、既存のすべてのアラートをスキャンして一致するアラートを探したいとします。同様に、新しいアラートが到着するたびに、既存の記事をすべてスキャンし、一致するものを探したいとします。

データベース全体をスキャンするのではなく、アラートの一致する記事を検索して記事のアラートを一致させる効率的な方法があると思いますが、そうでない場合(データベースが小さい場合など)、それは問題ありません。

一つのオプションこのようなシステムである:

  • 新しい記事が追加されると、1))インデックス付きのストレージシステム(例えばBigtableの、またはElasticsearch、またはデータベース、またはそのような何かにそれを書きます2)PubSubのトピックに「新しい記事」イベントを発行する
  • 新しいアラートが追加されたときは、インデックス付きストレージシステムに書き込んでイベントを発行する
  • 両方のイベントをリスンするパイプラインがあるpubsubのトピック。 「新しい記事」イベントを取得すると、アラートデータベースで一致するアラートが検索されます(利用可能なインデックスを使用して)。 「新しいアラート」イベントを取得するときに、記事を一致させる。

これは意味がありますか?

+0

それはありますが、私はデータフローで状態を保持することを含めてこれを行いたいと思います。また、私はアーカイブされたデータを処理できる必要があります。だから私はデータフローの構造を使用してこれを実装する方法を探しています。 –

+0

また、アラートのセットは小さく、ほんの一握りですが、数千万件の膨大な量の記事があります。新しいアラートが追加されても遅れても構わないので、新しいセグメントがあるたびにすべての(記事、セグメント)の組み合わせを処理することはOKです。 –

+0

私は参照してください。私はまだ私の答えでアプローチを使用することを提案します:データフローは状態のまともな量を維持することができますが、ストレージシステムではありませんので、数億の記事のようにそれを試してみることをお勧めしません。 – jkff

関連する問題