分庫分表是實際應用中,之前介紹的「讀寫分離」和快取等已經不能解決資料量呈幾何級數增長導致資料庫效能降低不能滿足生產需求的問題。目前比較普遍的方案就是使用nosql/newsql或者採用分庫分表。
使用分庫分表時,主要有垂直拆分和水平拆分兩種拆分模式,都屬於物理空間的拆分。
分庫分表方案:只分庫、只分表、分庫又分表。
垂直拆分:由於表數量多導致的單個庫大,將表拆分到多個庫中。
水平拆分:由於表記錄多導致的單個庫大,將表記錄拆分到多個表中(。
一、拆分方式
1、垂直拆分
垂直拆分又稱為縱向拆分,垂直拆分是將表按庫進行分離,或者修改表結構按照訪問的差異將某些
列拆分出去。應用時有垂直分庫和垂直分表兩種方式,一般談到的垂直拆分主要指的是垂直分庫。
按列進行垂直拆分,即把一條記錄分開多個地方儲存,每個子表的行數相同。把主鍵和一些列放到
乙個表,然後把主鍵和另外的列放到另乙個表中。
2、水平拆分
水平拆分又稱為橫向拆分。 相對於垂直拆分,它不再將資料根據業務邏輯分類,而是通過某個字
段(或某幾個字段),根據某種規則將資料分散至多個庫或表中,每個表僅包含資料的一部分,如
下圖所示:
水平分表是將一張含有很多記錄數的表水平切分,不同的記錄可以分開儲存,拆分成幾張結構相同
的表。如果一張表中的記錄數過多,那麼會對資料庫的讀寫效能產生較大的影響,雖然此時仍然能
夠正確地讀寫,但讀寫的速度已經到了業務無法忍受的地步,此時就需要使用水平分表來解決這個
問題。水平拆分:解決表中記錄過多問題。
垂直拆分:解決表過多或者是表字段過多問題。
日常工作中,通常會同時使用兩種拆分方式,垂直拆分更偏向於產品/業務/功能拆分的過程,在技
術上更關注水平拆分的方案。
二、擴容方案
當系統使用者進入了高速增長期時,即便是對資料進行分庫分表,但資料庫的容量,還有表的資料量也總
會達到天花板。當現有資料庫達到承受極限時,就需要增加新伺服器節點數量進行橫向擴容。
從上圖看就是增加了乙個硬體,沒什麼難的。實際真這麼簡單麼?需要解決的主要技術問題如下:
1)資料遷移問題
2)分片規則改變
3)資料同步、時間點、資料一致性
如果這些都能處理的很好,那是比較簡單。
上述問題時,通常使用以下兩種方案(實踐地比較成熟):
1、停機擴容
這是一種生產初期都會使用的方案,尤其是初期只有幾台資料庫的時候。
停機擴容的具體步驟如下:
1)站點發布乙個公告,例如:「為了為廣大使用者提供更好的服務,本站點將在今晚00:00-2:00之間公升
級,給您帶來不便抱歉";
2)時間到了,停止所有對外服務;
3)新增n個資料庫,然後寫乙個資料遷移程式,將原有x個庫的資料匯入到最新的y個庫中。比如分片
規則由%x變為%y;
4)資料遷移完成,修改資料庫服務配置,原來x個庫的配置公升級為y個庫的配置
5)重啟服務,連線新庫重新對外提供服務
回滾方案:萬一資料遷移失敗,需要將配置和資料回滾,改天再掛公告。
優點:簡單
缺點:停止服務,缺乏高可用
程式設計師壓力山大,需要在指定時間完成
如果有問題沒有及時測試出來啟動了服務,執行後發現問題,資料會丟失一部分,難以回滾。
適用場景:
小型**、
大部分遊戲、
對高可用要求不高的服務。
2、
平滑擴容
資料庫擴容的過程中,如果想要持續對外提供服務,保證服務的可用性,平滑擴容方案是最好的選擇。
平滑擴容就是將資料庫數量擴容成原來的2倍,比如:由2個資料庫擴容到4個資料庫,具體步驟如下:
1)新增2個資料庫
2)配置雙主進行資料同步(先測試、後上線)
3)資料同步完成之後,配置雙主雙寫(同步因為有延遲,如果時時刻刻都有寫和更新操作,會存在不
準確問題)
4)資料同步完成後,刪除雙主同步,修改資料庫配置,並重啟
5)此時已經擴容完成,但此時的資料並沒有減少,新增的資料庫跟舊的資料庫一樣多的資料,此時還
需要寫乙個程式,清空資料庫中多餘的資料。如:
user1去除 uid % 4 = 2的資料;
user3去除 uid % 4 = 0的資料;
user2去除 uid % 4 = 3的資料;
user4去除 uid % 4 = 1的資料;
平滑擴容方案能夠實現n庫擴2n庫的平滑擴容,增加資料庫服務能力,降低單庫一半的資料量。其核心
原理是:成倍擴容,避免資料遷移。
優點:1)擴容期間,服務正常進行,保證高可用
2)相對停機擴容,時間長,專案組壓力沒那麼大,出錯率低
3)擴容期間遇到問題,隨時解決,不怕影響線上服務
4)可以將每個資料庫資料量減少一半
缺點:1)程式複雜、配置雙主同步、雙主雙寫、檢測資料同步等
2)後期資料庫擴容,比如成千上萬,代價比較高
適用場景:
大型**、
對高可用要求高的服務。
MYSQL集群架構
1 讀寫分離架構 主從架構 一寫多讀,一主多從 問題 應用程式需要連線多個資料來源 mycat可以解決 主從之間同步是非同步的 資料時弱一致性的 pxc集群 2 中介軟體 問題 主從之間同步是非同步的 資料時弱一致性的 pxc集群 中介軟體的效能將成為系統的瓶頸 3 多個中介軟體的架構 問題 主從之...
mysql知識擴充套件之分庫分表
mysql知識擴充套件之分庫分表 mysql網際網路oracle企業應用資料結構 資料庫的複製能解決訪問問題,並不能解決大規模的併發寫入問題,要解決這個問題就要考慮mysql資料切分了 www.2cto.com 資料切分,顧名思義,就是資料分散,將一台主機上的資料分攤到多台,減輕單台主機的負載壓力,...
mysql集群架構 MySQL企業常用集群架構
在中小型網際網路的企業中。mysql的集群一般就是上圖的架構。web節點讀取資料庫的時候讀取dbproxy伺服器。dbproxy伺服器通過對sql語句的判斷來進行資料庫的讀寫分離。讀請求負載到從庫 也可以把主庫加上 寫請求寫主庫。這裡的dbproxy是資料庫集群的唯一出口所以也需要做高可用。drpr...