架構(gòu)-水平切分架構(gòu)之基因法
https://blog.csdn.net/weixin_30470857/article/details/95320795
假設(shè)我們一條帖子的字段包含:帖子ID,發(fā)起的用戶ID
先考慮一個業(yè)務(wù),用戶要發(fā)帖子,數(shù)量很大,需要分庫分表,如何進行拆分
業(yè)務(wù):查詢用戶的所有帖子、查詢帖子詳情。
普通水平切分:
根據(jù)帖子ID切分則無法一次查詢用戶的所有帖子;
根據(jù)用戶ID切分則需要先查帖子所屬用戶;
什么是分庫基因?
通過uid分庫,假設(shè)分為16個庫,采用uid%16的方式來進行數(shù)據(jù)庫路由,這里的uid%16,其本質(zhì)是uid的最后4個bit決定這行數(shù)據(jù)落在哪個庫上,這4個bit,就是分庫基因。
什么是基因法分庫?

如上圖所示,uid=666的用戶發(fā)布了一條帖子(666的二進制表示為:1010011010):
使用uid%16分庫,決定這行數(shù)據(jù)要插入到哪個庫中
分庫基因是uid的最后4個bit,即1010
在生成tid時,先使用一種分布式ID生成算法生成前60bit(上圖中綠色部分)
將分庫基因加入到tid的最后4個bit(上圖中粉色部分)
拼裝成最終的64bit帖子tid(上圖中藍色部分)
這般,保證了同一個用戶發(fā)布的所有帖子的tid,都落在同一個庫上,tid的最后4個bit都相同,于是:
通過uid%16能夠定位到庫
通過tid%16也能定位到庫
基因法為什么能實現(xiàn)這個特性和其他應(yīng)用
利用了基因的思想,從一個維度的信息里,摘取了一個分庫基因,其他維度信息里也全會帶上
,使得所有維度的信息都能通過此分庫基因完成分庫
此思想也可以用于這類分流系統(tǒng)中