作者:赵红杰
DBLE 项目测试负责人,主导分布式中间件的测试,在测试中不断发现产品和自身的 bug。迭代验证,乐在其中。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
背景
社区有大佬分享过跳增 hash 的文章,但是当时并不理解跳增 hash 使用的场景。刚接触分布式数据库中间件 dble 的时候,最迷惑的概念之一是 hash 分片算法。看到哈希,第一印象是散列表,感觉是存储相关的。hash 一个重要的特征是需要不同输入产生不同输出,但是在分片算法里,是需要多个值映射到一个分片节点上。这么大的差异,为什么可以用 hash 来对分布式数据库做逻辑分片,并且还命名叫 hash 分片!!!它们之间有哪些神似呢?
概念
散列表
要理解他们之间的相似和差异,先从对 hash 最初的认识——散列表说起。散列表是一种数据结构,通过散列函数(也就是 hash 函数)将输入映射到一个数字,一般用映射出的数字作为存储位置的索引。数组在查找时效率很高,但是插入和删除却很低。而链表刚好反过来。设计合理的散列函数可以集成链表和数组的优点,在查找、插入、删除时实现 O(1) 的效率。散列表的存储结构使用的也是数组加链表。执行效率对比可以看下图 1.3:



本文围绕分布式数据库的hash分片算法展开。先介绍散列表特点,包括映射数字、输出唯一等。接着阐述hash分片设计要点,如数据固定映射、分布均匀、方便扩容。还提及一致性hash和跳增hash。最后介绍取模hash,其简单均衡但范围查询效率低、扩容不便。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



