Elasticsearch分享与查询速度有关的基础知识

时间:2016-05-13 06:44:56

标签: elasticsearch sharding

如果这个问题过于宽泛或含糊,请原谅我的无知。我正在使用Elasticsearch在我的笔记本电脑上使用开箱即用的设置,它的效果非常好。

这是一个8核的Macbook和6G的堆给了Elasticsearch,它适用于大型数据集(只有超过7百万个文档)。

我很想建立一个多节点集群(2台机器),在我做一些事情之前,我想就几个关键点获得专家意见。

我理解“每个节点有多少个分片”是一个非常主观的问题,一个答案不适合所有情况。

据我所知,分片有助于将索引分发到多个节点,因此每个节点的存储占用空间最佳。 但主要是,我想了解分片对查询速度和影响的影响。有效的CPU核心利用率。

当单个搜索查询进入时,ES是否会并行启动所有分片的内部子查询,因此它可以使所有核心保持忙碌(如果没有分片等于核心数)?

我是否也可以指出一些对我有帮助的有用链接?感谢。

2 个答案:

答案 0 :(得分:1)

您的理解非常明确。

要理解的基本概念是单个分片上的一个查询将使用一个线程。一个线程归结为一个核心CPU。如果查询需要触摸多个分片,则ES将确保查询所涉及的分片。这意味着每个分片将使用一个线程完成其工作。

分片的大小和查询的复杂性转换为在该线程中花费了多少时间。但操作系统不会一直为该线程提供一个CPU核心,它调度作业的操作系统和其他进程可以获得CPU内核的一部分。

理想情况下,是的,您将拥有多个分片=核心数,但很少有群集使用此设置。主要是那些每秒有大量并发请求的集群,它们要求严格的响应时间。

答案 1 :(得分:0)

感谢您的回复。

只是总结我的理解才能验证它。

没有分片==核心数

( - )

  • 更大的碎片。
  • 线程可能需要更多时间来搜索单个分片 因此其他线程可以排队等待吗?

(+)

  • 最佳核心利用率。
  • 由于线程数量有限,因此上下文切换开销的可能性较小。

碎片数量>核心数

( - )

  • 将为查询生成更多线程,并且可能会应用上下文切换开销。
  • 更多线程可能需要更多内存用于线程堆栈等。
  • 更多分片可能需要更多内务处理(即管理文件句柄等),由elasticsearch。

(+)

  • 线程搜索单个碎片可能需要更少的时间(相对)
  • 可以处理更多并发请求(因为线程数量更多)。

最终,它取决于哪一个在以下两者之间达到最佳平衡: 可用的硬件,查询速度和并发因素,我认为它需要相当多的实验。或者用其他词来说,这很痛苦。