繁体   English   中英

Elasticsearch路由:每个分片只有一个路由密钥的文档

[英]Elasticsearch routing: only documents with one routing key per shard

我们目前正在优化Elasticsearch索引的分片设置,以(减少)减少响应时间。 当前,路由键的数量等于分片的数量。 我们正在寻找一种设置,其中分片中的所有文档仅具有一个路由键

目前就是这样,看起来应该是这样

当前

  • 碎片:0->路线:bmx,crosscrosser
  • 碎片:1->路线:单车径
  • 分片:2->路线:
  • 碎片:3->路线:下坡

通缉

  • 分片:0->路由:bmx
  • 碎片:1->路线:单车径
  • 分片:2->路线:crosscrosser
  • 碎片:3->路线:下坡

是否有可能确保将一个路由密钥仅路由到一个分片 当前,我们面临的是空碎片 ,这似乎不是一个合适的解决方案。

我们知道路由基于版本5.50中的Murmur(请参阅:Murmur3HashFunction.java)。 是否可以选择任何方法来影响此行为,并且有人可以提供更深入的见解以及路由在内部如何工作。

总结结果: 这是不可能的。

为什么? 对于大多数用例来说,路由不是直接基于路由键,因为如果路由键的分配是这样的,那么文档的分发可能会以非常不平等的方式结束(不是我的情况,但通常是这样)可能)。 路由键的散列实现了这一目的,即使具有特定路由的文档消失也不会以空碎片结尾。

您可以基于使用的哈希函数(Murmur)的知识来创建解决方法,但是如果Elasticsearch团队决定更改哈希函数,则可能会失败。 而且这已经发生了,因此依靠这样的隐藏功能已经不省钱了。

实现此目的的唯一方法是为Val指出的每个路由键创建一个索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM