当前位置: 首页 > 面试题库 >

ElasticSearch-分片如何影响索引性能?

江光明
2023-03-14
问题内容

我正在对ElasticSearch的单节点集群进行一些基准测试。

我面对这样的情况,更多的分片将至少在单个节点中降低索引性能(延迟和吞吐量)

这些是我的一些数字:

  • 使用1个分片进行索引,每分钟索引+ 6K文档
  • 索引5个分片,每分钟索引+ 3K文档
  • 索引20个分片,每分钟索引+ 1K文档

使用批量API的结果相同。所以我想知道这是什么关系,为什么会这样呢?

注意:我没有资源问题!资源是免费的(CPU和内存)


问题答案:

只是为了让您位于同一页面上:

您的数据按索引组织,每个索引由分片组成,并分布在多个节点上。如果需要为新文档建立索引,则将生成新的ID,并根据该ID计算目标分片。之后,将写操作委派给该节点,该节点保存计算出的目标分片。这样可以将文档很好地分布在所有分片上。

现在,通过id查找文档非常容易,因为包含所需文档的分片可以仅基于id进行计算。无需搜索所有碎片。顺便说一句,这就是为什么您以后不能更改分片数量的原因。更改的分片编号将导致整个分片上的文档分布不同。

现在,为了清楚起见,每个分片都是一个单独的Lucene索引,由位于磁盘上的段文件组成。编写时,将创建新的段。如果将达到特定数量的段文件,则将合并这些段。因此,仅引入更多的分片而不将它们分配给其他节点,只会为单个节点引入更高的I
/ O和内存消耗。搜索时,将针对每个分片执行查询。之后,所有分片的结果需要合并为一个结果-更多分片,更多的cpu工作要做…

回到您的问题:

对于您的写重索引情况,只有一个节点,索引和分片的最佳数量为1!但是对于搜索情况(不按ID进行访问),每个节点的最佳分片数是可用的CPU数。这样,可以在多个线程中进行搜索,从而获得更好的搜索性能。

但是分片有什么好处?

  1. 可用性:通过将分片复制到其他节点,即使不再能够访问某些节点,您仍然可以使用!

  2. 性能:将主分片分发到不同的节点,也将分配工作负载。

因此,如果您的方案写的很繁琐,请使每个索引的分片数量保持较低。如果需要更好的搜索性能,请增加分片的数量,但要牢记“物理”。如果需要可靠性,请考虑节​​点/副本的数量。

进一步阅读:

https://www.elastic.co/guide/zh-
CN/elasticsearch/reference/current/_basic_concepts.html

https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/tune-for-
indexing-
speed.html

https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/tune-for-
search-
speed.html

https://www.elastic.co/de/blog/how-many-shards-should-i-have-in-my-
elasticsearch-cluster

https://thoughts.t37.net/designing-the-perfect-elasticsearch-cluster-the-
almost-definitive-guide-e614eabc1a87



 类似资料:
  • 问题内容: varchar列上的索引是否会使查询运行缓慢?我可以将其设为int。而且我不需要做LIKE%比较。 问题答案: varchar列上的索引是否会使查询运行缓慢? 不,不是的。 如果优化器决定使用索引,则查询将运行得更快。 该表上的s / s / s会变慢,但不太可能引起注意。 我不需要做LIKE%比较 请注意,使用: …将 不 使用索引,但以下内容将: 关键是在字符串的左侧使用通配符,这

  • 本文向大家介绍ElasticSearch合理分配索引分片原理,包括了ElasticSearch合理分配索引分片原理的使用技巧和注意事项,需要的朋友参考一下 Elasticsearch 是一个非常通用的平台,支持各种用户实例,并为组织数据和复制策略提供了极大的灵活性。但是,这种灵活性有时会使我们很难在早期确定如何很好地将数据组织成索引和分片,尤其是不熟悉 Elastic Stack。虽然不一定会在首

  • 问题内容: 从pandas文档中,我收集到,唯一值索引使某些操作高效,并且偶尔可以容忍非唯一索引。 从外部看,看起来非唯一索引没有以任何方式被利用。例如,以下查询足够慢,以至于似乎正在扫描整个数据帧 (我意识到这两个查询不会返回相同的内容,这只是一个对非唯一索引的调用要慢得多的示例) 有什么办法哄骗大熊猫使用更快的查找方法,例如对非唯一索引和/或排序索引进行二进制搜索? 问题答案: 当索引是唯一的

  • 问题内容: 我需要更改索引中的分片数量。索引很大,为了达到测试目的,我可能不得不将配置更改10-15次才能满意。是否有开箱即用的工具提供这种功能?或最简单的方法是做到这一点? 问题答案: 无论是Perl的和Ruby客户直接支持重建索引。 在Perl中,您可以执行以下操作: 在Clinton Gormley 的帖子中查找更多信息。 在Ruby中,您可以执行以下操作: 在相关的 Tyre 提交中找到更

  • 问题内容: 我的 单元/集成测试 包括搜索功能的测试。 我的想法是在每次测试之前有一个空的搜索索引。因此,我正在尝试删除方法(它是Groovy代码)的索引中的所有元素: 似乎它正在异步处理所有删除操作,因此在它之后添加了它。如您所见,我尝试几次打开/关闭连接-在那里没有帮助。 这个问题有时需要更多时间,有时需要5秒钟以上才能删除,有时无法找到刚刚添加的数据(来自先前的测试),等等。而最令人烦恼的是

  • 本文向大家介绍mysql索引对排序的影响实例分析,包括了mysql索引对排序的影响实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了mysql索引对排序的影响。分享给大家供大家参考,具体如下: 索引不仅能提高查询速度,还可以添加排序速度,如果order by 后面的语句用到了索引,那么将会提高排序的速度。 测试 1、创建测试表:t15表 2、插入1W行数据 3、商场网站,一般都会按照