大家好,给大家介绍一下,这是我男神@VAGE
吕海波
国内知名数据库技术专家、数据架构师
曾任阿里/京东/ebay高级专家、首席DBA
Oracle传奇技术大师
ITPUB Oracle 管理版版主
噔噔噔,吕大主笔数据库系列文章——《数据库传奇》,从数据库选型例子入手,介绍SQL和NoSQL数据库的特点,把所有数据库的特性、适用范围,加上一些业内故事、传说,写上一遍。
本着“一般不出手,出手就是大作”的原则,文章更新不定期。本期推出《数据库传奇》第一章:Digg启示录----你选对数据库了吗?




业内第一家分库分表的公司,是美国电商ebay。ebay的架构师早在2003年,率先提出了分库分表的方案,并成功实施。不过,要说影响力最大的,还是阿里巴巴。





(对,就是白宫,看图片一点都不宏伟)假设一共有30个办公室,规则如下,按人名笔画数,除以30,余数为几,就在几号办公室工作。
比如,总统先生,唐纳德·特朗普,应该在几号办公室?
总统先生在4号办公室办公。
前总统奥巴马呢,贝拉克·侯赛因·奥巴马,笔画数一共68,除以30,余数为8,按照我们的规则,前总统先生在8号办公室。
怎么样,这样一来,每次你去白宫找人办事,只需要根据人名笔划数计算一下,就知道要找的人在哪里了。通过这种方式,不再有“传达室”,可以少花纳税人的钱。路由方式,则变成了“规则”(即笔划数除以30取余)。
规则式路由,是分布式数据库最常采用的。而“笔划数除以30取余”这样的规则,则属于HASH规则类。
在IT领域中,根据某种确定的方式,将一个数字进行计算,得到另一个数字,这就是HASH算法的本质,对HASH在这里不必深究,以后再专门开篇文章好好讲讲这些著名的算法。
我们例子中的HASH规则,像不像一样生活中常见的东东,给你三秒想一下,是什么:
没猜出来,对吗!没关系,翻开一本新华字典,它的目录编排方式,就是一种HASH规则。
Oracle、MySQL等SQL型数据库的分布式就是这样,基于某种HASH规则,将数据存储在某一个Sub Database(子数据库中)。操作数据时,同样根据HASH规则,计算得出数据存储在哪一个Sub Database中,然后到相应的Sub database中执行操作。
说白了,就是先查一下目录再翻书。
这里有一个问题,比如随着人员的扩展,白宫的办公室不够用了,预算部门决定明年新增1间办公室。这就是分布式数据库的扩容了。也叫横向扩展。
办公室数量增加到31之后,原来的规则“笔划数除以30取余”,要改为“笔划数除以31取余”了,除以30,要改为除以31了。因为现在办公室数量已经由30增至31了。
总统先生唐纳德·特朗普的笔划数是64,基于原来的HASH规则,是在4号办公室,但现在,他应该在2号办公室。64除以31余数是2了。
前总统奥巴马呢,贝拉克·侯赛因·奥巴马,笔画数一共68,除以31,余数为6。前总统先生的新办法室在6号。
不但总统先生,副总统、各位参赞、秘书,所有人的办公室都变了。除以30取余,和除以31取余,结果将大不相同。
这就是为什么分布式数据库扩容这么难了。本来30个子库,扩展到31个子库,所有数据要全部改变一下它所属的子库。所有数据都要辗转腾挪一边,这当然是个大工程了。
而Cassandra有一个非常好的特性,它的分布式是按照一致性HASH算法,计算数据应该存储在哪个Sub Database(子数据库)。一致性HASH,英文名称Consistent Hashing。它是普通HASH算法的修正,目的就是为了解决HASH算法在扩容(或缩容)时,要对所有数据重新计算HASH值的问题。
说到Consistent Hashing,不能不上一张图:
这次咱们又要到五角大楼找人了。假设五角大楼只有5个办公室,分别分布在5个角上。
这次又要怎么安排办公室呢?姓名笔画数除以5取余吗?先别急做除法,虽然目前五角大楼办公室数少,但它目标宏大:
据说,很快就会发展到30间办公室。可目前只有5间,没关系,要面向未来吗!
具体怎么做呢?先把5间办公室的编号改的大气点:

(图中的1到5,7到11,都是虚拟办公室)
而前总统贝拉克•侯赛因•奥巴马先生,笔画数一共68,除以30取余是8。
如上图,从8开始,顺时针向后找,奥巴马在12号办公室。
这就是一致性HASH的计算过程。现在,让我们把背景碍眼的五角大楼图去掉:
(特别说明:文中虚拟办公室和Cassandra中的虚拟节点并不是一个概念)。
相较普通的HASH,一致性HASH的优点是扩/缩容的时候影响小,这一点如何表现出来的呢?看下图:
现在要在18到24之间增加一间实际办公室。本来19到23号虚拟办公室的人,都按排在24号实际办公室办公的。或者说,19到23,属于24。
假设21变为了实际办公室:


















