没猜出来,对吗!没关系,翻开一本新华字典,它的目录编排方式,就是一种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,不能不上一张图: