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

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

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

雙主雙寫之后進(jìn)行同步,在可容忍的延遲下,保證數(shù)據(jù)的同步完成。
(因?yàn)楦呖捎靡蟾叩某绦蛳?,隨時(shí)都會(huì)存在寫的數(shù)據(jù)錄入,所以會(huì)有延遲情況)

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

平滑擴(kuò)容雖然做到了高可用的要求,但是配置程序很復(fù)雜、配置雙主同步、雙主雙寫、檢測數(shù)據(jù)同步等,且后期數(shù)據(jù)庫擴(kuò)容,因?yàn)槭浅杀稊U(kuò)容,代價(jià)會(huì)不斷變大。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql-connector-java驅(qū)動(dòng)jar包下載方式
訪問MySQL官網(wǎng)下載對應(yīng)語言驅(qū)動(dòng),Java選Connector/J,Python選Python后綴,選擇版本和系統(tǒng)后下載zip包,解壓獲取jar文件,此為個(gè)人經(jīng)驗(yàn)分享,供參考學(xué)習(xí)2025-07-07
mysql下的max_allowed_packet參數(shù)設(shè)置詳解
本文主要介紹了mysql下的max_allowed_packet參數(shù)設(shè)置詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
mysql給字段添加默認(rèn)值的實(shí)現(xiàn)
在MySQL中可以使用語句來為現(xiàn)有字段添加默認(rèn)值,或者在創(chuàng)建表時(shí)直接指定默認(rèn)值,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
mysql優(yōu)化的重要參數(shù) key_buffer_size table_cache
MySQL服務(wù)器端的參數(shù)有很多,但是對于大多數(shù)初學(xué)者來說,眾多的參數(shù)往往使得我們不知所措,但是哪些參數(shù)是需要我們調(diào)整的,哪些對服務(wù)器的性能影響最大呢2016-05-05
mysql自動(dòng)備份多個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)
本文主要介紹了mysql自動(dòng)備份多個(gè)數(shù)據(jù)庫的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
關(guān)于useSSL=false和true的區(qū)別及說明
這篇文章主要介紹了關(guān)于useSSL=false和true的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

