Mysql分片,大數(shù)據(jù)量時擴容解決方案
分片概念
分片(Sharding)就是用來確定數(shù)據(jù)在多臺存儲設備上分布的技術。
Shard這個詞的意思是“碎片”,如 果將一個數(shù)據(jù)庫當作一塊大玻璃,將這塊玻璃打碎,那么每一小塊都稱為數(shù)據(jù)庫的碎片(Database Sharding)。
將一個數(shù)據(jù)庫打碎成多個的過程就叫做分片,分片是屬于橫向擴展方案。
分片與分表的區(qū)別
分片:表示分配過程,是一個邏輯上概念,表示如何實現(xiàn)。
分庫分表:表示分配結(jié)果,是一個物理上概念,表示最終實現(xiàn)的結(jié)果
分片策略
基于范圍分片
根據(jù)特定的字段進行拆分,比如ID0-100到 Cluster A節(jié)點中,100-200的到Cluster B節(jié)點中...
- 優(yōu)點:新的數(shù)據(jù)可以落在新的存儲節(jié)點上,如果集群擴容,數(shù)據(jù)無需遷移。
- 缺點:熱點數(shù)據(jù)分部不均勻則會導致機器負荷程度的不均勻,會浪費資源也會導致部分機器過載。
哈希取模分片(離散分片)
根據(jù)Hash算法取模對應一些機器編號進行入庫。
- 優(yōu)點:數(shù)據(jù)分配比較均勻,不容易出現(xiàn)冷熱不均,負荷不均的情況。
- 缺點:比較均勻,但是在擴容時會產(chǎn)生大量的數(shù)據(jù)遷移(因為Hash算法取模要整體重新計算),比如從n臺設備擴容到n+1,絕大部分數(shù)據(jù)需要重新分配和 遷移。
一致性哈希分片
相比較傳統(tǒng)的Hash算法,通過環(huán)的方式在添加節(jié)點(擴容)或者刪除節(jié)點時,只對增加節(jié)點的單個環(huán)上進行添加,則無須進行大面積的數(shù)據(jù)遷移。

在數(shù)據(jù)庫容量有限的情況下,分片,分庫,分表也會達到瓶頸,而這時候的擴容方式則需要去橫向增加節(jié)點擴容處理。

一,初期方案(停機擴容)
停機擴容,關閉服務不符合現(xiàn)階段高可用的價值觀,并且如果有問題沒有及時測試出來啟動了服務,運行后發(fā)現(xiàn)問題,數(shù)據(jù)會丟失一部分,難以回滾。
該方案雖然簡單但只適合小型網(wǎng)站或者對高可用要求不高的程序,或是測試上線階段。
二,平滑擴容(上線運行之后)
平滑擴容也稱之為成倍擴容,例如從兩個節(jié)點擴到四個節(jié)點,通過雙主配置雙寫進行數(shù)據(jù)同步。

雙主雙寫之后進行同步,在可容忍的延遲下,保證數(shù)據(jù)的同步完成。
(因為高可用要求高的程序下,隨時都會存在寫的數(shù)據(jù)錄入,所以會有延遲情況)

同步完成后,則取消掉雙主同步,重啟即可。

平滑擴容雖然做到了高可用的要求,但是配置程序很復雜、配置雙主同步、雙主雙寫、檢測數(shù)據(jù)同步等,且后期數(shù)據(jù)庫擴容,因為是成倍擴容,代價會不斷變大。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL數(shù)據(jù)查看SELECT條件大于?小于(小白入門篇)
這篇文章主要為大家介紹了MySQL數(shù)據(jù)查看SELECT條件大于和小于的語句學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
mysql中的find_in_set字符串查找函數(shù)解析
這篇文章主要介紹了mysql中的find_in_set字符串查找函數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
mysql使用Haversine 公式和ST_Distance_Sphere 函數(shù)實現(xiàn)附近的人功能
使用 MySQL 來實現(xiàn)“附近的人”功能,可以通過Haversine 公式和ST_Distance_Sphere 函數(shù)兩種方式來實現(xiàn),這篇文章主要介紹了mysql實現(xiàn)附近的人功能,需要的朋友可以參考下2023-08-08

