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

参考答案

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

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

现在的情况是:

没有资源问题,资源是免费的(CPU和内存),更多的分片将至少在单个节点中降低索引性能(延迟和吞吐量)

这是一些数字:

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

使用批量 API 的结果相同。

我想知道,这是什么关系,为什么会这样呢?

只是为了位于同一页面上。

数据按索引组织,每个索引由分片组成,并分布在多个节点上。

如果需要为新文档建立索引,则将生成新的ID,并根据该ID计算目标分片。

之后,将写操作委派给该节点,该节点保存计算出的目标分片。这样,就可以将文档很好地分布在所有分片上。

现在,通过id查找文档非常容易,因为包含所需文档的分片可以仅基于id进行计算,不需要搜索所有碎片。

顺便说一句,这就是为什么以后不能更改分片数量的原因,更改的分片编号,将导致整个分片上的文档分布不同。

为了清楚起见,每个分片都是一个单独的Lucene索引,由位于磁盘上的段文件组成,编写时,将创建新的段。如果将达到特定数量的段文件,则将合并这些段。

因此,仅引入更多的分片而不将它们分配给其他节点,只会为单个节点引入更高的 I/O 和内存消耗。搜索时,将针对每个分片执行查询。之后,所有分片的结果需要合并为一个结果-更多分片,更多的 cpu 工作要做…

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

对于写重索引情况,只有一个节点,索引和分片的最佳数量为 1 。

但是,对于搜索情况(不按ID进行访问),每个节点的最佳分片数是可用的CPU数。

这样,就可以在多个线程中进行搜索,从而获得更好的搜索性能。

分片的好处是什么呢?

  1. 可用性:通过将分片复制到其他节点,即使不再能够访问某些节点,我们仍然可以使用。
  2. 性能:将主分片分发到不同的节点,也将分配工作负载。

因此,如果方案写的很繁琐,就要让每个索引的分片数量保持较低。如果需要更好的搜索性能,就要增加分片的数量;如果需要可靠性,请考虑节​​点/副本的数量。

 

以上,是 Elasticsearch 搜索面试题【ElasticSearch 分片如何影响索引性能?】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧