この質問は、実験と実装の詳細を掘り下げる前にアーキテクチャ上の選択肢を作ることについてです。これは、スケーラビリティとパフォーマンスの面で、elasticsearch v。 MongoDBは、やや特殊な目的のために。elasticsearch v.s.フィルタリングアプリケーション用MongoDB
暫定的には、フィールドと値を持つデータオブジェクトを格納し、そのオブジェクトの本体を照会できるようにします。おそらく、アドホックで選択されたフィールドに従ってオブジェクトのサブセットをフィルタリングすることは、両方にとって適切なものです。
私のアプリケーションは、基準に従ってオブジェクトを選択することを中心に回ります。 これは、1つ以上のフィールドで同時にフィルタリングしてオブジェクトを選択し、別の言い方をすると、そのクエリフィルタリング基準は通常、1〜5フィールドのいずれかを含み、場合によってはさらに多くなります。一方、フィルタとして選択されたフィールドは、はるかに多くのフィールドのサブセットになります。画像は約20のフィールド名が存在し、それぞれのクエリは、フィールド全体の20フィールドのうちのいくつかのフィールドでオブジェクトをフィルタリングしようとしています。フィールドを離散問合せごとにフィルタとして使用するフィールドに変換します)。フィルタリングは、フィールド値だけでなく、選択されたフィールドの存在によっても可能である。フィールドAを持ち、フィールドBがxとyの間にあり、フィールドCがwに等しいオブジェクトを除外します。
私のアプリケーションでは、このようなフィルタリングを継続していますが、いつでもフィルタリングに使用されるフィールドは何もない、またはほとんど存在しません。おそらくelasticsearchインデックスを定義する必要があるかもしれませんが、インデックスがなくてもMongoDBと同じ速度になります。
データがストアに入るにつれて、そのことに関する特別な詳細はありません。オブジェクトは挿入後にほとんど変更されません。おそらく古いオブジェクトを削除する必要があるかもしれません。私は両方のデータストアのサポートが内部的に、またはアプリケーション作成のクエリによってデータの削除を期限切れにすると仮定したいと思います。 (あまり頻繁には、特定のクエリに適合するオブジェクトも同様に削除する必要があります)。
あなたはどう思いますか? そして、あなたはこの面を実験しましたか?
私は、この種のタスクのために、2つのデータストアのそれぞれのパフォーマンスとスケーラビリティに興味があります。これは建築的な質問の一種であり、店舗固有のオプションやクエリーの基礎知識の詳細は、十分に考案された提案のデモンストレーションとして歓迎されます。
ありがとうございます!
なぜこれが投票を続けているのか分かりませんが、そのような長い時間が経過した後の重要なオプションですか? – matanster