ElasticSearch路由哈希算法的实现

本文介绍了ElasticSearch如何利用djb2哈希算法进行路由分配,确保文档被索引到正确的shard。ElasticSearch在DjbHashFunction.java文件中实现了该算法,通过将哈希值与shard数量取模来决定文档存储位置。djb2算法因其高效计算特性被选用,但对于为何乘以33的原因未做详细解释。
摘要由CSDN通过智能技术生成

     “All problems in computer science can be solved by another level of indirection.” – David J. Wheeler


       学习ElasticSearch必须要认清ElasticSearch和Lucene的关系:ElasticSearch是建立在一组Lucene索引基础上的抽象层, 它的每一个 shard(无论primary 和 replica)都是一个完整和独立的Lucene索引实例。说白了,也就是在一组Lucene索引上建了 "another level of indirection",这层indirection带来的好处就是 : 分布式、可扩展和强容错的索引集群系统。其实,Lucene索引本身也是一层indirection, 真正的索引内容是存储在被称为segment单元中。一个Lucene索引由多个segment组成,segment是immutable的,也就是创建后不能再修改的,各种索引内容的缓存也都是基于每个segment的。

       所以,当ElasticSearch收到一个为文档建立索引的请求时,它首先要做出的决定就是要在哪一个shard上对文档进行索引并保存结果。在具体实现上,ElasticSearch采用的是djb2 哈希算法对要索引文档的指定(或者默认的)key进行哈希,得到哈希结果后取模上(mod) ElasticSearch索引shard数目 n,公式如下:

        

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值