大单碎片与多碎片

时间:2018-06-29 10:23:41

标签: performance elasticsearch

ElasticSearch分片有两种最佳实践:

  • 每个节点的最佳分片数量为1。
  • 碎片大小最多为50 GB。

就我而言,它们有些争议。更具体地说,假设索引大小为2 TB,并且有10个节点。我应该配置多少个碎片:

选项1:10个分片,每个分片200GB

选项2:40个分片,每个分片50GB

哪个是查询延迟性能更好的选择?

2 个答案:

答案 0 :(得分:2)

无论哪种“最佳”通常在理论上都是最佳的,实际上,您需要进行一些权衡。大多数时候,您肯定会希望每个主分区至少有一个副本(容错),因此每个节点至少有2个分区(除非您有5个主分区,每个分区400GB)。为了达到最佳效果,让我们踏踏实实...

您没有提到每个节点的堆容量,但是由于您不应该超过每个节点30.5GB的堆容量限制,因此您应该明显倾向于拥有最多约50GB数据的碎片。 50个分片@ 40GB也可以。

我不会尝试200GB的碎片,因为那可能太大了。我也不会尝试拥有1000个2GB的分片,因为分片会太多。

最终,这取决于您的用例和硬件。您的索引正在承受沉重的搜索负担,还是主要处理索引请求?您的集群需要处理多少个并发搜索/索引请求?最好的了解方法是对所有这些进行测试,但是如果没有更多信息,第二种选择显然比第一种更好。并且不要忘记,每个主分区可能也需要一个副本,这会使您的存储需求增加一倍(即每个节点400GB)

答案 1 :(得分:0)

添加到Val的答案:如果您想添加节点以获得更好的性能,则更多的分片可以使分片分布更加平滑。 10个节点上的10个分片不允许将分片分发到其他节点。 40个碎片将允许轻松扩展更多节点。

此外,如果磁盘空间变紧,较小的分片可能仍然允许Elasticsearch来回移动分片,因为它至少需要一个空间来再做一个分片。