在Elasticsearch(ES)中,为什么我们不能在创建索引后更改主分片的数量,而我们可以随时更改副本分片的数量。我理解,与主分片相比,更改副本分片的开销更少,但它似乎不是一项不可能的任务?
是否有任何分布式系统概念或性能增益不允许它?
答案 0 :(得分:1)
我本来打算自己解释一下,但我发现它已经在官方Elasticsearch official guide中得到了适当的解释:
用户经常会问为什么Elasticsearch不支持分片分割 - 将每个分片分成两个或多个部分的能力。原因是碎片分裂是一个坏主意:
拆分分片几乎等同于重新索引数据。这比将一个碎片从一个节点复制到另一个节点要重得多。
分裂是指数级的。你从一个碎片开始,然后分成两个,然后是四个,八个,十六个,依此类推。拆分不允许您将容量增加50%。
分片分割要求您有足够的容量来保存索引的第二个副本。通常,当您意识到需要向外扩展时,您没有足够的可用空间来执行拆分。
在某种程度上,Elasticsearch确实支持分片分割。您始终可以使用适当数量的分片将数据重新索引到新索引(请参阅重新索引数据)。它仍然是一个比移动碎片更密集的过程,并且仍然需要足够的可用空间来完成,但至少你可以控制新索引中的碎片数量。