-1

文書の大量のリアルタイム データ ストリームを消費し、それらの文書が利用可能になったときに一連のユーザー定義の検索クエリに対してそれらの文書を照合するシステムを作成する必要があるとします。これは、レトロスペクティブではなく、プロスペクティブな検索サービスです。適切な永続化ソリューションは何でしょうか?

ユーザーが、クエリに一致するドキュメントのライブ フィード (Google アラートを考えてみてください) を表示したいと考えており、フィードが各ドキュメントの特定のメタデータを表示する必要があるとします。マッチの存続期間が無期限であると仮定しましょう。つまり、システムは、特定のクエリが作成された時点から、ユーザーがクエリのすべての一致を表示できるようにします。そのため、ストリームに含まれる各ドキュメントのメタデータ、およびドキュメントとそのドキュメントに一致したユーザー クエリとの関連付けは、データベースに永続化する必要があります。

ユーザーがメタデータの一部をファセットできるようにするという別の要件を考えてみましょう。たとえば、ユーザーは、メタデータ フィールドの「結果の種類」が「ブログ」に等しい特定のクエリに一致するドキュメントのみを表示したいと考えています。ブログの一致数のカウント。

ここにいくつかの仮定の数字があります:

  1. 毎日 200,000 件の新しいドキュメントがデータ ストリームに含まれています。

    -すべてのドキュメントのメタデータが保持されます。

  2. それぞれ約 5 つの検索クエリを持つ 1000 人のユーザー: 合計約 5000 のユーザー検索クエリ。

    -これらのクエリは単純なブールクエリです。

    - 新しいドキュメントが入るたびに、5000 件のクエリすべてに対して処理され、どのクエリが一致するかが確認されます。

  3. 各フィード (ユーザー クエリごとに 1 つずつ) は、1 分ごとにユーザーに対して更新されます。つまり、すべてのフィードについて、最新の一致ページのデータベースへのクエリが毎分実行されます。

ユーザーにフィードを表示する速度は、最も重要です。スケーラビリティと高可用性も不可欠です。

ユーザーとクエリの関係は、クエリと一致するドキュメントの関係と同様にリレーショナルですが、ドキュメントのメタデータ自体は単なるキーと値のペアです。したがって、私の最初の考えは、MySQL のようなリレーショナル DB にリレーショナル データを保持し、NoSQL DB にメタデータを保持することでしたが、ファセット要件は NoSQL DB で達成できますか? また、フィードを構築するには、2 つの別個のデータ ストアを呼び出す必要があり、これがさらに複雑になります。または、すべてを MySQL に押し込むこともできますが、これには多くの結合とカウントが必要になります。すべてのデータをキーと値のペアとして別の種類のデータ ストアに格納する場合、ファセットはどのように行うのでしょうか? また、複数の検索クエリに一致するドキュメントには、大量の冗長なメタデータが存在します。

このシナリオに適したデータベースの種類は何ですか? Twitter Stormや Yahoo のS4などのツールを使用して、このようなシステムの全体的なアーキテクチャを構築できることは承知していますが、データ ストレージ、ボリューム、およびクエリ/ファセットを考慮して、データベースに焦点を当てたいと思います。要件。

4

3 に答える 3

0

エラスティックサーチを見てみましょう。登録されたクエリに対してドキュメントを照合するパーコレーター機能があります。 http://www.elasticsearch.org/blog/2011/02/08/percolator.html

于 2012-05-24T02:42:03.807 に答える
0

まず、私はベンに同意しません。1 日あたり 200,000 の新しいレコードが 1 日 86,400 秒と比較されるため、1 秒あたり 3 つのレコードについて話していることになります。これは驚くべきことではありませんが、新しいデータの立派なクリップです。

第二に、これは人々が直面する本当の問題だと思います。私は、このフォーラムがこのトピックにふさわしくないと言うつもりはありません。

この質問への答えは、サポートされているユーザー クエリの複雑さと種類に大きく関係していると思います。たとえば、クエリが一連のバイナリ述語で構成されている場合、ドキュメント データから特定のルールを抽出し、そのルールを簡単に適用できます。一方、クエリがドキュメントのテキストに対する複雑なスコアリングで構成されている場合は、ユーザー クエリごとにスコアリング アルゴリズムと組み合わせた逆インデックスが必要になることがあります。

このようなシステムに対する私のアプローチは、クエリを各ドキュメントから決定できる個々のデータ要素に解析することです (クエリを満たすために必要なすべてのフィールドが結果に含まれるため、これを「クエリ署名」と呼ぶ場合があります)。この「クエリ署名」は、ドキュメントが読み込まれるたびに作成され、クエリを満たすために使用できます。

新しいクエリを追加するには、すべてのドキュメントを処理して新しい値を割り当てる必要があります。データの量を考えると、これはより多くのバッチ タスクが必要になる場合があります。

SQL が適切かどうかは、データから抽出する必要がある機能によって異なります。これは、ユーザー クエリの性質によって異なります。SQL で十分である可能性があります。一方で、特にクエリにテキスト マイニングの概念を使用している場合は、より高度なツールが必要になる場合があります。

于 2012-05-20T03:38:05.047 に答える
0

これについて考えると、通常のデータ処理操作ではなく、イベント処理タスクのように思えます。そのため、通常のデータベース上にすべてを構築するのではなく、複雑なイベント処理システムを調査する価値があるかもしれません。受信データがシステムに流れ込むとき。速度と高可用性の基準を満たす商用システムはありますが、私は利用可能な OSS オプションを調査していません (幸いなことに、クォーラの人々は調査を行っています)。

于 2012-05-20T23:26:08.363 に答える