小编典典

弹性搜索,多个索引与不同数据集的一个索引和类型?

all

我有一个使用 MVC 模式开发的应用程序,现在我想索引它的多个模型,这意味着每个模型都有不同的数据结构。

  • 使用多个索引是否更好,每个模型一个或每个模型在同一索引中都有一个类型?我认为这两种方式都需要不同的搜索查询。我刚开始做这个。

  • 如果数据集很小或很大,两个概念之间是否存在性能差异?

如果有人可以为此目的向我推荐一些好的样本数据,我会自己测试第二个问题。


阅读 106

收藏
2022-08-15

共1个答案

小编典典

两种方法都有不同的含义。

假设您使用 Elasticsearch 的默认设置,每个模型有 1 个索引将显着增加您的分片数量,因为 1 个索引将使用 5 个分片,5 个数据模型将使用
25 个分片;虽然在 1 个索引中有 5 个对象类型仍将使用 5 个分片。

将每个数据模型作为索引的含义:

  • 在索引中高效快速地搜索,因为每个分片中的数据量应该更小,因为它分布到不同的索引。
  • 从 2 个或更多索引中搜索数据模型的组合会产生开销,因为查询必须跨索引发送到更多分片、编译并发送回用户。
  • 如果您的数据集很小,则不建议这样做,因为创建每个额外的分片都会产生更多的存储空间,并且性能提升是微不足道的。
  • 如果您的数据集很大并且您的查询需要很长时间来处理,则推荐使用,因为专用分片存储您的特定数据,并且 Elasticsearch 更容易处理。

将每个数据模型作为索引中的对象类型的含义:

  • 更多数据将存储在索引的 5 个分片中,这意味着当您跨不同数据模型进行查询时,开销问题会更小,但您的分片大小会大得多。
  • 分片中的更多数据将需要更长的时间让 Elasticsearch 搜索,因为要过滤的文档更多。
  • 如果您知道您正在处理 1 TB 的数据并且您没有将数据分布在 Elasticsearch 映射中的不同索引或多个分片中,则不推荐使用。
  • 推荐用于小型数据集,因为每个分片都会占用硬件空间,因此不会浪费存储空间来获得边际性能提升。

如果您要问什么是太多数据与小数据?通常它取决于处理器速度和硬件的 RAM、您在 Elasticsearch
映射中每个变量中存储的数据量以及您的查询要求;在您的查询中使用许多方面会显着减慢您的响应时间。对此没有直接的答案,您必须根据自己的需要进行基准测试。

2022-08-15