一.水平切分
水平切分又稱為 Sharding 策略,它是將同一個表中的記錄拆分到多個結構相同的表中。
當一個表的數(shù)據(jù)不斷增多時,Sharding 是必然的選擇,它可以將數(shù)據(jù)分布到集群的不同節(jié)點上,從而緩存單個數(shù)據(jù)庫的壓力。
Sharding 策略
- 哈希取模: hash(key) % NUM_DB
- 范圍: 可以是 ID 范圍也可以是時間范圍
- 映射表: 使用單獨的一個數(shù)據(jù)庫來存儲映射關系
Sharding 存在的問題及解決方案
1.事務問題
使用分布式事務來解決,比如 XA 接口。
2. 鏈接
可以將原來的 JOIN 分解成多個單表查詢,然后在用戶程序中進行 JOIN。
3.ID 唯一性
- 使用全局唯一 ID: GUID
- 為每個分片指定一個 ID 范圍
- 分布式 ID 生成器 (如 Twitter 的 Snowflake 算法)
二.垂直切分
垂直切分是將一張表按列切分成多個表,通常是按照列的關系密集程度進行切分,也可以利用垂直切分將經(jīng)常被使用的列和不經(jīng)常被使用的列切分到不同的表中。
在數(shù)據(jù)庫的層面使用垂直切分將按數(shù)據(jù)庫中表的密集程度部署到不同的庫中,例如將原來的電商數(shù)據(jù)庫垂直切分成商品數(shù)據(jù)庫、用戶數(shù)據(jù)庫等。
我的工作還沒接觸到這個,等后面再去深入研究....
更多內容請參考:文章來源:http://www.zghlxwxcb.cn/news/detail-564480.html
- How Sharding Works在新窗口打開
- 大眾點評訂單系統(tǒng)分庫分表實踐
分庫分表完如何生成唯一ID
分庫分表時唯一ID如何生成 - 知乎 (zhihu.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-564480.html
到了這里,關于Mysql的分庫分表策略的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!