go分庫分表 主從分離例子


網上有很多介紹分庫分表的文章,方法很多:

分區表切分
垂直切分
水平切分
區間切分
取模切分

這里不細說

分庫分表簡單,但后期會帶來一系列的難題:

事務
Join
分頁

數據庫:

master和slave是一個主從架構
imagespider_db:[ImageSpider]項目采集回來的數據,不需要部署主從分離。
imageshow_db_1、imageshow_db_2、imageshow_db_3、imageshow_db_4:
四個分庫的結構一模一樣。(注意,分庫的個數最好是2的N次方,不然基因取模算法可能會失效)

t_users用戶表:

用戶登錄和注冊時,需要用name來定位分庫;查看用戶資料時,需要用uid定位分庫,
所以,把name的基因加入到uid中,uid的最后2bit為name的crc32的最后2bit,這樣通過uid和name都能定位到分庫。

t_images圖片表:

按 id % 4分庫,分頁時采用“禁止跳頁法”。

t_comments評論表:

id的最后2bit為imgid的2bit,保證一張圖片的所有評論和圖片切分到同一個數據庫中。
用戶評論時,t_images表的comment_count字段加1,因為是同一個數據庫,仍然可以使用事務處理;
所有評論都切分到同一個數據庫,分頁時可以使用傳統方法。

t_likes點贊表:

和t_comments表一樣,也使用imgid最后2bit作為分庫基因。
在某些場景下,使用基因切分法,把相關表都切分到同一個數據庫中,在后期的操作中仍然可以使用事務,Join等操作,
但可能會導致分庫數據不均衡。
ImageShow只是一個水平切分的例子,功能,代碼都很簡單,肯定不能涵蓋分庫分表的所有應用場景。

源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM