【发布时间】:2017-11-10 20:53:23
【问题描述】:
我们目前正在优化 Elasticsearch 索引的分片设置,以(意外地)缩短响应时间。目前路由键的数量等于分片的数量。我们正在寻找一种设置,其中分片中的所有文档都只有一个路由键。
这就是现在的样子,应该是这样的
当前
- shard:0 -> 路线:bmx, cyclocrosser
- shard:1 -> 路线:track-bike
- 分片:2 -> 路线:
- shard:3 -> 路线:下坡
通缉
- shard:0 -> 路线:bmx
- shard:1 -> 路线:track-bike
- shard:2 -> 路线:越野车
- shard:3 -> 路线:下坡
是否有可能确保一个路由键只路由到一个分片?目前我们面临空分片,这似乎不是一个合适的解决方案。
我们知道路由是基于 5.50 版本的 Murmur(参见:Murmur3HashFunction.java)。是否有任何选项可以影响这种行为?有人可以提供更深入的见解,说明路由在内部是如何工作的。
【问题讨论】:
-
内置路由已经实现了文档在所有分片上的平均分布。只有当每个路由值的文档数量相等时,基于特定值的自定义路由才能实现相同的效果。
-
文档或多或少平均分布在路由键上。这就是为什么要为一个分片“分配”一个路由键的原因。
-
您确定您的路由密钥集将永远稳定吗?即如果出于某种原因您在某个时候需要新的路由密钥会发生什么?
-
每个分片不需要有一个路由键来提高性能。路由键的目标只是将搜索定向到一个特定的分片(而不是 5 或 6 个不同的分片),但每个分片不必有自己的路由键。
-
是的,我知道。问题是:是否有机会在一个分片中只有一个路由键的文档?我们已经拥有具有不同路由设置的非常先进的负载计量,我们想知道我们是否可以以更严格的方式影响路由。
标签: elasticsearch routing