1. ホーム
  2. database

[解決済み] Elastic search、複数のインデックス vs 1つのインデックス、異なるデータセットに対応するタイプ?

2022-04-21 12:57:10

質問

私はMVCパターンを使用して開発されたアプリケーションを持っており、現在その複数のモデルのインデックスを作成したいと思っています。

  • 各モデルに1つずつ、複数のインデックスを使用するのが良いのか、それとも各モデルに同じインデックス内の型を持つのが良いのか?どちらの方法でも、異なる検索クエリが必要になると思います。私はこれに着手したばかりです。

  • データセットが小さい場合と巨大な場合では、両コンセプトにパフォーマンス上の違いはあるのでしょうか?

2番目の質問については、どなたか良いサンプルデータを紹介していただければ、自分でテストしてみたいと思います。

どのように解決するのですか?

どちらのアプローチにも、異なる意味合いがあります。

Elasticsearchのデフォルト設定を使用していると仮定すると、各モデルに1つのインデックスを持つことは、1つのインデックスが5つのシャードを使用し、5つのデータモデルが25シャードを使用するので、シャードの数を大幅に増やすことになります。

各データモデルをインデックスとした場合の意味合い。

  • 各シャードでは、異なるインデックスにデータが分散されているため、データ量が少なく、インデックス内の検索が効率的かつ高速に行えます。
  • 2つ以上のインデックスからデータモデルを組み合わせて検索すると、クエリがインデックスをまたいでより多くのシャードに送られ、コンパイルされてユーザーに返される必要があるため、オーバーヘッドが発生することになります。
  • シャードが追加されるたびにストレージが増加し、パフォーマンスの向上がわずかであるため、データセットが小さい場合は推奨されません。
  • データセットが大きく、クエリの処理に時間がかかる場合、専用シャードに特定のデータを格納し、Elasticsearchの処理を容易にするため、推奨します。

各データモデルをインデックス内のオブジェクトタイプとして持つことの意味。

  • より多くのデータがインデックスの5つのシャードに格納されます。つまり、異なるデータモデル間でクエリを実行する際のオーバーヘッド問題は少なくなりますが、シャードサイズは著しく大きくなります。
  • シャード内のデータが増えると、フィルタリングする文書が増えるため、Elasticsearchの検索に時間がかかるようになります。
  • 1テラバイトのデータを処理することが分かっていて、Elasticsearchのマッピングでデータを異なるインデックスや複数のシャードに分散していない場合はお勧めできません。
  • 各シャードがハードウェアのスペースを占有するため、わずかなパフォーマンス向上のためにストレージスペースを浪費することがないため、小規模なデータセットに推奨されます。

データ量が多すぎるのと少ないとでは、何が違うのでしょうか?一般的には、ハードウェアのプロセッサ速度やRAM容量、Elasticsearchのマッピングで各変数に格納するデータ量、クエリ要件に依存します。これに対する明確な答えはありませんので、お客様のニーズに応じてベンチマークを行う必要があります。