如果这个问题过于宽泛或含糊,请原谅我的无知。我正在使用Elasticsearch在我的笔记本电脑上使用开箱即用的设置,它的效果非常好。
这是一个8核的Macbook和6G的堆给了Elasticsearch,它适用于大型数据集(只有超过7百万个文档)。
我很想建立一个多节点集群(2台机器),在我做一些事情之前,我想就几个关键点获得专家意见。
我理解“每个节点有多少个分片”是一个非常主观的问题,一个答案不适合所有情况。
据我所知,分片有助于将索引分发到多个节点,因此每个节点的存储占用空间最佳。 但主要是,我想了解分片对查询速度和影响的影响。有效的CPU核心利用率。
当单个搜索查询进入时,ES是否会并行启动所有分片的内部子查询,因此它可以使所有核心保持忙碌(如果没有分片等于核心数)?
我是否也可以指出一些对我有帮助的有用链接?感谢。
答案 0 :(得分:1)
您的理解非常明确。
要理解的基本概念是单个分片上的一个查询将使用一个线程。一个线程归结为一个核心CPU。如果查询需要触摸多个分片,则ES将确保查询所涉及的分片。这意味着每个分片将使用一个线程完成其工作。
分片的大小和查询的复杂性转换为在该线程中花费了多少时间。但操作系统不会一直为该线程提供一个CPU核心,它调度作业的操作系统和其他进程可以获得CPU内核的一部分。
理想情况下,是的,您将拥有多个分片=核心数,但很少有群集使用此设置。主要是那些每秒有大量并发请求的集群,它们要求严格的响应时间。
答案 1 :(得分:0)
感谢您的回复。
只是总结我的理解才能验证它。
没有分片==核心数
( - )
(+)
( - )
(+)
最终,它取决于哪一个在以下两者之间达到最佳平衡: 可用的硬件,查询速度和并发因素,我认为它需要相当多的实验。或者用其他词来说,这很痛苦。