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