回答:
どちらのアプローチにも異なる影響があります。
Elasticsearchのデフォルト設定を使用している場合、各モデルに1つのインデックスがあると、1つのインデックスで5つのシャードが使用され、5つのデータモデルで25のシャードが使用されるため、シャードの数が大幅に増加します。1つのインデックスに5つのオブジェクトタイプがある場合でも、5つのシャードを使用します。
各データモデルをインデックスとして持つことの影響:
各データモデルをインデックス内のオブジェクトタイプとして持つことの意味:
小さすぎるデータと多すぎるデータとは何ですか?通常、ハードウェアのプロセッサ速度とRAM、Elasticsearchのマッピングの各変数に格納するデータの量、およびクエリの要件によって異なります。クエリで多くのファセットを使用すると、応答時間が大幅に遅くなります。これに対する簡単な答えはなく、ニーズに応じてベンチマークする必要があります。
By default elasticsearch rejects search requests that would query more than 1000 shards. The reason is that such large numbers of shards make the job of the coordinating node very CPU and memory intensive. It is usually a better idea to organize data in such a way that there are fewer larger shards. In case you would like to bypass this limit, which is discouraged, you can update the action.search.shard_count.limit cluster setting to a greater value.
"
当時はジョナサンの答えは正しかったが、世界は進んでおり、ElasticSearchの背後にいる人々は複数のタイプのサポートを廃止する長期計画を持っているようです。
目的の場所:親子をサポートしながら、Elasticsearchから型の概念を削除します。
したがって、新しいプロジェクトでは、インデックスごとに1つのタイプのみを使用すると、ElasticSearch 6.xへの最終的なアップグレードがより簡単になります。
ジョナサンの答えは素晴らしいです。私は考慮すべき他のいくつかの点を追加します:
上記の両方の答えは素晴らしいです!
インデックスにいくつかのタイプの例を追加しています。図書館で本を検索するアプリを開発しているとします。ライブラリの所有者に尋ねる質問はほとんどありませんが、
質問:
何冊の本を保管する予定ですか。
どんな本を図書館に保管しますか?
どのように本を検索しますか?
答え:
50 k〜70 k冊の本を保管する予定です(およそ)
15 k〜20 kの技術関連の本(コンピュータサイエンス、機械工学、化学工学など)、15 kの歴史書、10 kの医学科学書を用意します。言語関連の書籍(英語、スペイン語など)10 k
著者名、著者姓、出版年、出版社名で検索します。(これにより、インデックスに格納する必要がある情報についてのアイデアが得られます)
上記の回答から、インデックス内のスキーマは次のようになるはずです。
//これは例のためだけの正確なマッピングではありません
"yearOfPublish":{
"type": "integer"
},
"author":{
"type": "object",
"properties": {
"firstName":{
"type": "string"
},
"lastName":{
"type": "string"
}
}
},
"publisherName":{
"type": "string"
}
}
上記を実現するために、Booksと呼ばれる1つのインデックスを作成し、さまざまなタイプを持つことができます。
インデックス:本
タイプ:科学、芸術
(または、より多くの本がある場合は、テクノロジー、医学、歴史、言語など、多くのタイプを作成できます)
ここで注意すべき重要な点は、スキーマは似ていますが、データが同一ではないということです。もう1つ重要なことは、保存するデータの合計です。
上記がインデックス内の異なるタイプに移動するときに役立つことを願っています。異なるスキーマがある場合は、異なるインデックスを検討する必要があります。少ないデータのための小さなインデックス。ビッグデータのビッグインデックス:-)