Mysql分片,大數(shù)據(jù)量時(shí)擴(kuò)容解決方案
分片概念
分片(Sharding)就是用來(lái)確定數(shù)據(jù)在多臺(tái)存儲(chǔ)設(shè)備上分布的技術(shù)。
Shard這個(gè)詞的意思是“碎片”,如 果將一個(gè)數(shù)據(jù)庫(kù)當(dāng)作一塊大玻璃,將這塊玻璃打碎,那么每一小塊都稱(chēng)為數(shù)據(jù)庫(kù)的碎片(Database Sharding)。
將一個(gè)數(shù)據(jù)庫(kù)打碎成多個(gè)的過(guò)程就叫做分片,分片是屬于橫向擴(kuò)展方案。
分片與分表的區(qū)別
分片:表示分配過(guò)程,是一個(gè)邏輯上概念,表示如何實(shí)現(xiàn)。
分庫(kù)分表:表示分配結(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ù)可以落在新的存儲(chǔ)節(jié)點(diǎn)上,如果集群擴(kuò)容,數(shù)據(jù)無(wú)需遷移。
- 缺點(diǎn):熱點(diǎn)數(shù)據(jù)分部不均勻則會(huì)導(dǎo)致機(jī)器負(fù)荷程度的不均勻,會(huì)浪費(fèi)資源也會(huì)導(dǎo)致部分機(jī)器過(guò)載。
哈希取模分片(離散分片)
根據(jù)Hash算法取模對(duì)應(yīng)一些機(jī)器編號(hào)進(jìn)行入庫(kù)。
- 優(yōu)點(diǎn):數(shù)據(jù)分配比較均勻,不容易出現(xiàn)冷熱不均,負(fù)荷不均的情況。
- 缺點(diǎn):比較均勻,但是在擴(kuò)容時(shí)會(huì)產(chǎn)生大量的數(shù)據(jù)遷移(因?yàn)镠ash算法取模要整體重新計(jì)算),比如從n臺(tái)設(shè)備擴(kuò)容到n+1,絕大部分?jǐn)?shù)據(jù)需要重新分配和 遷移。
一致性哈希分片
相比較傳統(tǒng)的Hash算法,通過(guò)環(huán)的方式在添加節(jié)點(diǎn)(擴(kuò)容)或者刪除節(jié)點(diǎn)時(shí),只對(duì)增加節(jié)點(diǎn)的單個(gè)環(huán)上進(jìn)行添加,則無(wú)須進(jìn)行大面積的數(shù)據(jù)遷移。
在數(shù)據(jù)庫(kù)容量有限的情況下,分片,分庫(kù),分表也會(huì)達(dá)到瓶頸,而這時(shí)候的擴(kuò)容方式則需要去橫向增加節(jié)點(diǎn)擴(kuò)容處理。
一,初期方案(停機(jī)擴(kuò)容)
停機(jī)擴(kuò)容,關(guān)閉服務(wù)不符合現(xiàn)階段高可用的價(jià)值觀,并且如果有問(wèn)題沒(méi)有及時(shí)測(cè)試出來(lái)啟動(dòng)了服務(wù),運(yùn)行后發(fā)現(xiàn)問(wèn)題,數(shù)據(jù)會(huì)丟失一部分,難以回滾。
該方案雖然簡(jiǎn)單但只適合小型網(wǎng)站或者對(duì)高可用要求不高的程序,或是測(cè)試上線階段。
二,平滑擴(kuò)容(上線運(yùn)行之后)
平滑擴(kuò)容也稱(chēng)之為成倍擴(kuò)容,例如從兩個(gè)節(jié)點(diǎn)擴(kuò)到四個(gè)節(jié)點(diǎn),通過(guò)雙主配置雙寫(xiě)進(jìn)行數(shù)據(jù)同步。
雙主雙寫(xiě)之后進(jìn)行同步,在可容忍的延遲下,保證數(shù)據(jù)的同步完成。
(因?yàn)楦呖捎靡蟾叩某绦蛳拢S時(shí)都會(huì)存在寫(xiě)的數(shù)據(jù)錄入,所以會(huì)有延遲情況)
同步完成后,則取消掉雙主同步,重啟即可。
平滑擴(kuò)容雖然做到了高可用的要求,但是配置程序很復(fù)雜、配置雙主同步、雙主雙寫(xiě)、檢測(cè)數(shù)據(jù)同步等,且后期數(shù)據(jù)庫(kù)擴(kuò)容,因?yàn)槭浅杀稊U(kuò)容,代價(jià)會(huì)不斷變大。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql聯(lián)合查詢(xún)UNION和UNION ALL的使用介紹
本文詳細(xì)介紹了Mysql的聯(lián)合查詢(xún)命令UNION和UNION ALL,總結(jié)了使用語(yǔ)法和注意事項(xiàng),以及學(xué)習(xí)例子和項(xiàng)目例子,需要的朋友可以參考下2014-04-04MySQL執(zhí)行事務(wù)的語(yǔ)法與流程詳解
這篇文章主要介紹了MySQL執(zhí)行事務(wù)的語(yǔ)法與流程的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01MySQL中如何查詢(xún)某年某月的數(shù)據(jù)
這篇文章主要介紹了MySQL中如何查詢(xún)某年某月的數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07MySQL中常見(jiàn)關(guān)鍵字的用法總結(jié)
這篇文章主要為大家詳細(xì)介紹了MySQL中常見(jiàn)關(guān)鍵字的用法,例如GROUP BY、ORDER BY和LIMIT,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-09-09MySQL命令行界面中出現(xiàn)字符錯(cuò)誤提示的原因及解決方法
這篇文章主要介紹了MySQL命令行界面中出現(xiàn)字符錯(cuò)誤提示的原因及解決方法,同時(shí)文中還附帶了MySQL導(dǎo)入亂碼問(wèn)題的解決辦法提示,需要的朋友可以參考下2016-03-03mysql sql99語(yǔ)法 內(nèi)連接非等值連接詳解
在本篇文章里小編給大家整理的是一篇關(guān)于mysql sql99語(yǔ)法 內(nèi)連接非等值連接的相關(guān)知識(shí)點(diǎn)文章,有需要的朋友們可以學(xué)習(xí)下。2019-09-09MySQL性能優(yōu)化之路---修改配置文件my.cnf
mysql數(shù)據(jù)庫(kù)的優(yōu)化,算是一個(gè)老生常談的問(wèn)題了,網(wǎng)上也有很多關(guān)于各方面性能優(yōu)化的例子,今天我們要談的是MySQL 系統(tǒng)參數(shù)的優(yōu)化即優(yōu)化my.cnf文件2014-06-06