この質問は、実験と実装の詳細を掘り下げる前に、アーキテクチャを選択することについてです。これは、スケーラビリティとパフォーマンスの観点から、elasticsearchとMongoDBの、ある程度特定の目的への適合性に関するものです。
仮に、両方ともフィールドと値を持つデータオブジェクトを格納し、オブジェクトのその本体をクエリできるようにします。したがって、おそらく、アドホックに選択されたフィールドに従ってオブジェクトのサブセットを除外することは、両方に適したものです。
私のアプリケーションは、基準に従ってオブジェクトを選択することを中心に展開します。別の言い方をすれば、複数のフィールドで同時にフィルタリングすることでオブジェクトを選択します。クエリのフィルタリング基準は、通常1〜5フィールドで構成され、場合によってはそれ以上になります。一方、フィルターとして選択されたフィールドは、はるかに大量のフィールドのサブセットになります。約20のフィールド名が存在することを想像してください。各クエリは、それらの全体の20のフィールドからいくつかのフィールドでオブジェクトをフィルタリングする試みです(存在する全体のフィールド名は20未満またはそれ以上になる可能性があります。この数値を使用して、すべての個別のクエリでフィルターとして使用されるフィールドへのフィールド)。フィルタリングは、選択したフィールドの存在、およびフィールド値によって行うことができます。たとえば、フィールドAを持ち、フィールドBがxとyの間にあるオブジェクトを除外します。
私のアプリケーションはこの種のフィルタリングを継続的に実行しますが、どのフィールドがいつでもフィルタリングに使用されるかについては、定数がまったくないか、ほとんどありません。おそらくelasticsearchでインデックスを定義する必要がありますが、インデックスがなくても、速度はMongoDBの速度と同等です。
ストアに入るデータによると、それに関する特別な詳細はありません。挿入された後、オブジェクトが変更されることはほとんどありません。おそらく古いオブジェクトを削除する必要があるでしょう。両方のデータストアが、内部で、またはアプリケーションが作成したクエリによって、期限切れのものを削除することをサポートしていると思います。(あまり頻繁ではありませんが、特定のクエリに適合するオブジェクトもドロップする必要があります)。
どう思いますか?そして、あなたはこの側面を実験しましたか?
この種のタスクでは、2つのデータストアのそれぞれのパフォーマンスとスケーラビリティに関心があります。これは一種の建築設計の質問であり、十分に考え抜かれた提案のデモンストレーションとして、店舗固有のオプションまたはそれを適切に設計するためのクエリの基礎の詳細を歓迎します。
ありがとう!