架構(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)中