MVC パターンを使用して開発されたアプリケーションがあり、その複数のモデルをインデックス化したいと考えています。つまり、各モデルには異なるデータ構造があります。
各モデルに 1 つずつ、複数のインデックスを使用する方がよいのでしょうか、それとも各モデルに同じインデックス内にタイプがある方がよいのでしょうか。どちらの方法でも、異なる検索クエリが必要になると思います。私はこれに取り組み始めたばかりです。
データ セットが小さい場合と大きい場合、両方のコンセプト間でパフォーマンスに違いはありますか?
誰かがその目的に適したサンプル データを推奨してくれるなら、2 番目の質問を自分でテストします。
ベストアンサー1
両方のアプローチには異なる意味合いがあります。
Elasticsearch のデフォルト設定を使用している場合、モデルごとに 1 つのインデックスがあると、1 つのインデックスで 5 つのシャードが使用され、5 つのデータ モデルで 25 のシャードが使用されるため、シャードの数が大幅に増加します。また、1 つのインデックスに 5 つのオブジェクト タイプがある場合でも、5 つのシャードが使用されます。
各データ モデルをインデックスとして持つことの意味:
- データが異なるインデックスに分散されるため、各シャード内のデータ量が少なくなり、インデックス内での検索が効率的かつ高速になります。
- 2 つ以上のインデックスからデータ モデルの組み合わせを検索すると、クエリをインデックス全体のより多くのシャードに送信し、コンパイルしてユーザーに送り返す必要があるため、オーバーヘッドが発生します。
- データ セットが小さい場合は、追加のシャードが作成されるたびにストレージ容量が増加し、パフォーマンスの向上はわずかであるため、推奨されません。
- データセットが大きく、クエリの処理に時間がかかる場合は、専用のシャードに特定のデータが保存され、Elasticsearch での処理が容易になるため、これが推奨されます。
各データ モデルをインデックス内のオブジェクト タイプとして持つことの意味:
- インデックスの 5 つのシャード内にはより多くのデータが保存されるため、異なるデータ モデル間でクエリを実行する際のオーバーヘッドの問題は少なくなりますが、シャード サイズは大幅に大きくなります。
- シャード内のデータが増えると、フィルタリングするドキュメントが増えるため、Elasticsearch による検索に時間がかかります。
- 1 テラバイトのデータを処理することがわかっていて、Elasticsearch マッピングでデータを異なるインデックスまたは複数のシャードに分散していない場合は、推奨されません。
- 各シャードがハードウェアのスペースを占有するため、パフォーマンスがわずかに向上してもストレージ スペースを無駄にすることがないため、小規模なデータ セットに推奨されます。
データが多すぎることと少なすぎることの違いは何でしょうか? 通常、これはハードウェアのプロセッサ速度と RAM、Elasticsearch のマッピングの各変数に格納するデータの量、およびクエリ要件によって異なります。クエリで多くのファセットを使用すると、応答時間が大幅に遅くなります。これには明確な答えはなく、ニーズに応じてベンチマークする必要があります。