弹性search,多个索引与一个索引和不同数据集的types?

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

  • 使用多重索引更好吗,每个模型使用多个索引,还是每个模型的索引都有相同的types? 这两种方式也需要一个不同的search查询,我认为。 我刚开始这个

  • 如果数据集很小或很大,那么这两个概念之间在性能上会有差异吗?

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

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

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

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

  • 在索引内快速有效地search,因为每个分片中的数据量应该更小,因为它被分配给不同的索引。
  • search来自2个或更多索引的数据模型的组合将产生开销,因为查询将不得不被发送到跨越索引的更多分片,编译并发回给用户。
  • 不build议如果你的数据集小,因为你会产生更多的存储与每个额外的碎片创build和性能增益是边缘的。
  • build议如果你的数据集很大,你的查询需要很长的时间来处理,因为专用分片存储你的特定数据,Elasticsearch将更容易处理。

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

  • 更多的数据将被存储在索引的5个分片中,这意味着当您跨不同的数据模型进行查询时,会遇到较less的开销问题,但分片大小会更大。
  • 由于有更多的文档需要过滤,因此分片内的更多数据需要更长时间才能进行search。
  • 不推荐,如果您知道您正在经历1 TB的数据,并且您没有将数据分布在Elasticsearch映射中的不同索引或多个碎片中。
  • build议用于小数据集,因为您不会浪费存储空间,因为每个碎片在硬件中占用空间,因此性能会有所提高。

如果你问什么是太多的数据与小数据? 通常,这取决于处理器速度和硬件的内存,Elasticsearch映射中每个variables中存储的数据量以及查询需求; 在查询中使用许多方面会显着减慢响应时间。 没有直接的答案,你将不得不根据你的需求进行基准testing。

虽然乔纳森当时的答案是正确的,但是世界已经开始了,现在看来ElasticSearch背后的人们有一个长期的计划来放弃对多种types的支持:

我们想要去的地方:我们想从Elasticsearch中移除types的概念,同时还支持父/子。

因此,对于新项目,只使用每个索引的单一types将使得最终升级到ElasticSearch 6.x变得更容易。

乔纳森的回答很好。 我只想补充几点要考虑的问题:

  • 可以根据您select的解决scheme定制碎片数量。 你可能有一个包含15个主分片的索引,或者将其分成3个索引,分为5个分片 – 性能angular度不会改变(假设数据平均分配)
  • 考虑数据使用情况。 IE浏览器。 如果您使用kibana进行可视化,则包含/排除特定索引会更容易,但types必须在仪表板中过滤
  • 数据保留:对于应用程序日志/度量标准数据,如果需要不同的保留期限,则使用不同的索

上述答案都很好!

我在索引中添加了几个types的示例。 假设您正在开发一个应用程序来search图书馆中的书籍。 向图书馆所有者提出几个问题,

问题:

  1. 你打算存多less本书?

  2. 你要在图书馆里储存什么样的书?

  3. 你打算怎么去找书?

回答:

  1. 我打算存储50 K到70 K的书(大约)

  2. 我将有15k-20k技术相关书籍(计算机科学,机械工程,化学工程等),历史书籍15k,医学书籍10k。 10本语言相关书籍(英文,西class牙文等)

  3. 按作者search名,作者姓,出版年份,出版者名称。 (这给了你关于什么信息应该存储在索引中的想法)

从上面的答案中,我们可以说我们的索引中的模式应该看起来像这样。

//这不是确切的映射,只是为了举例

  "yearOfPublish":{ "type": "integer" }, "author":{ "type": "object", "properties": { "firstName":{ "type": "string" }, "lastName":{ "type": "string" } } }, "publisherName":{ "type": "string" } } 

为了达到上述目的,我们可以创build一个名为Books的索引,并且可以有多种types。

指数:书

types:科学,艺术

(或者你可以创build很多types,如技术,医学,历史,语言,如果你有更多的书籍)

这里需要注意的是架构是相似的,但数据是不相同的。 另一个重要的是你正在存储的总数据。

希望以上内容有助于在索引中寻找不同的types,如果您有不同的模式,您应该考虑不同的索引。 小索引较less的数据。 大数据大指数:-)