如何计算弹性碎片碎片计数?

时间:2015-07-22 05:16:48

标签: java performance optimization elasticsearch sharding

我正在努力将elasticsearch旧索引迁移到新索引。索引用作用户存储,因此将来用户数将增加。常见的方法 - 从索引中选择文件。因此很明显,更多用户 - 搜索过程较慢,因为弹性需要循环遍历大量文档。

假设currentRate是弹性搜索每秒的当前请求率,currentUserNumber是弹性搜索中的总用户,currentNumberOfShards是当前的分片数(假设为了简单起见,只有2个分片是放在一个物理节点上。)

此外,预计会futureRatefutureUserNumber

估计弹性搜索的新分片数量是正确的:

futureNumberOfShards = (futureRate / currentRate) * (futureUserNumber / currentUserNumber)

我还有其他一些我不计算的情况吗?

注意

据我所知,elasticsearch可以执行一些优化,但是这些条件很难在弹性搜索之外进行计算,因此在最坏情况下计算分片数量更为正确。

注2

实际上用户可以拥有不同数量的字段。对于搜索,仅使用4-5个字段(并非所有用户都拥有所有字段)。这会影响搜索性能吗?怎么样?

2 个答案:

答案 0 :(得分:0)

对于elasticsearch,最佳性能是当分片计数相等的数据节点数时。但这使得将来很难增加数据节点数量。所以你可以选择 - 现在有更好的性能,或为未来的节点留出一些空间。在我的集群中 - 开始时有两个节点,但我已经制作了4个分片,现在我有4个数据节点,性能也很完美。

答案 1 :(得分:0)

更少的3M文档:1个分片 介于3M和5M之间的文档,预计将超过5M:2个分片。 超过5M:int(预期文档数/ 5M +1)

您可以在此链接中找到所有内容:

https://thoughts.t37.net/designing-the-perfect-elasticsearch-cluster-the-almost-definitive-guide-e614eabc1a87#9898