架構 水平切分架構之基因法

2021-08-31 23:24:57 字數 723 閱讀 9796

業務:查詢使用者的所有帖子、查詢帖子詳情。

字段:使用者id、帖子id。

普通水平切分:

根據帖子id切分則無法一次查詢使用者的所有帖子;

根據使用者id切分則需要先查帖子所屬使用者;

什麼是分庫基因?

通過uid分庫,假設分為16個庫,採用uid%16的方式來進行資料庫路由,這裡的uid%16,其本質是uid的最後4個bit決定這行資料落在哪個庫上,這4個bit,就是分庫基因。

什麼是基因法分庫?

如上圖所示,uid=666的使用者發布了一條帖子(666的二進位制表示為:1010011010):

使用uid%16分庫,決定這行資料要插入到哪個庫中

分庫基因是uid的最後4個bit,即1010

在生成tid時,先使用一種分布式id生成演算法生成前60bit(上圖中綠色部分)

將分庫基因加入到tid的最後4個bit(上圖中粉色部分)

拼裝成最終的64bit帖子tid(上圖中藍色部分)

這般,保證了同乙個使用者發布的所有帖子的tid,都落在同乙個庫上,tid的最後4個bit都相同,於是:

通過uid%16能夠定位到庫

通過tid%16也能定位到庫

全域性唯一id也可以通過表自增位置和自增範圍實現,比如使用者id雜湊為 1 的表,自增位置為1,自增範圍為 10。

架構漫談(四) 如何做好架構之架構切分

前一篇已經講了如何識別問題。在識別出是誰的問題之後,會發現,在大部分情況下,問題都迎刃而解,不需要做額外的動作。很多時候問題的產生都是因為溝通的誤解,或者主觀上有很多不必要的利益訴求導致的。但是總還有一部分確實是有問題的,需要做調整,那麼就必須要有所動作,做相應的調整。這個調整就是架構的切分。我們要...

架構漫談(四) 如何做好架構之架構切分

2016 02 23 王概凱 聊聊架構 架構漫談是由資深架構師王概凱kevin執筆的系列專欄,專欄將會以kevin的架構經驗為基礎,逐步討論什麼是架構 怎樣做好架構 軟體架構如何落地 如何寫好程式等問題。本文是漫談架構專欄的第四篇,作者將會介紹架構的切分,並直戳切分的本質其實就是利益的調整。文中作者...

架構漫談(四) 如何做好架構之架構切分

架構漫談是由資深架構師王概凱kevin執筆的系列專欄,專欄將會以kevin的架構經驗為基礎,逐步討論什麼是架構 怎樣做好架構 軟體架構如何落地 如何寫好程式等問題。本文是漫談架構專欄的第四篇,作者將會介紹架構的切分,並直戳切分的本質其實就是利益的調整。文中作者將會討論為什麼需要切分 切分的原則 切分...