Elasticsearch索引策略创建最佳实践/性能

问题描述 投票:1回答:2

[我正在设计基于ElasticSearch的搜索系统,在阅读了大量内容之后,我发现某些系统(例如日志)使用多个索引策略来保存相同的内容,类似于mylogs-12-02-2020,并且每天都在创建索引,然后进行搜索,他们在符合mylogs- * pattern的所有索引中执行搜索,每个索引都有其主要的碎片和副本。我的问题是关于搜索的性能,这对于查看具有n个分片的500万个文档的索引或查找100,000个文档的50个索引的性能会更高。是否有人有最佳实践经验?

我假设我的系统每天大约增加200,000个文档。

最佳实践是,在多个索引中分开或者在不同节点中具有多个主分片的单个索引(以使它们在搜索/建立索引时不竞争同一资源)?

mylogs-* elastic上进行搜索时,它是否平行于索引并位于其碎片的每个索引内?

performance elasticsearch indexing sharding
2个回答
2
投票

默认情况下,Elasticsearch索引具有5个主要分片和每个分片1个副本。但是问题是默认配置并不适合每个用例。

分片大小对于搜索查询非常重要。如果分配给索引的碎片过多,则Lucene段会很小,这会导致开销增加。当同时进行多个查询时,许多小碎片也会降低查询吞吐量。另一方面,太大的碎片会导致搜索性能下降,并导致故障恢复时间更长。因此,Elasticsearch建议一个分片的大小应在20到40 GB之间。

请记住,分片本身是一个单独的搜索引擎,而不是索引。索引是一种数据组织机制,它允许用户以某种方式对数据进行分区。就这些!

有关更多详细信息,请参见read this article


0
投票

@ Umar提供的Elasticsearch默认配置已旧,并且从7.0 ES最新主要版本开始,主分片减少为1,可以在ES official breaking changes announcement中进行检查。

没有人可以设计出最佳的ES索引,而没有碎片和副本的最佳数目,并且需要在此期间进行连续的微调。一些影响设计考虑的因素。

  1. 重载系统。

  2. 基于时间的索引(例如您的日志搜索),通常在较新的日志或电子商务产品目录上进行搜索,或者无法将索引划分为基于时间的数据的网站搜索。

  3. ES群集(多租户vs专用于单个索引)。

以上只是几个示例,我可以给出100多个其他因素,您可以在设计ES索引配置时考虑这些因素。 但是想法是首先从更关键的参数开始(例如,更改主要分片需要重新索引),还要考虑近期的增长,然后根据当前系统性能进行微调。]

[我强烈建议您阅读my detailed blog,该书将通过实际案例研究详细解答有关(用更多文档搜索一个索引而不是用更少文档搜索更多索引/分片)的问题。

以上博客还解释了ES决定,将长期默认主分片从5更改为1。

回答您的以下问题:

问题:在mylogs-* elastic上进行搜索时,它是否与索引平行并且在其碎片的每个索引内?

回答:是的,ES具有分布式体系结构,并且由于ES索引由成熟的搜索引擎Lucene shard组成,如果需要击中多个分片,则每个ES查询都将由多个线程并行执行。相同的索引或多个索引),给定线程是自由的

,否则,一旦线程完成,它将用于查询另一个分片。这就是为什么ES像其他分布式系统一样快得多的原因。
© www.soinside.com 2019 - 2024. All rights reserved.