數(shù)據(jù)庫橫向分表(基因法)

架構(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,就是分庫基因。

什么是基因法分庫?

  
image.png

如上圖所示,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)中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容