重慶分公司
重慶分公司
MySQL分庫(kù)分表-創(chuàng)新互聯(lián)
北海街道ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!ong>分庫(kù)分表的種類:
這里說(shuō)的分庫(kù)分表是把數(shù)據(jù)庫(kù)中的數(shù)據(jù)物理地拆分到多個(gè)實(shí)例或者多臺(tái)服務(wù)器上,而不是MySQL原生的Partitioining。
MySQL官方的Partitioning可以將一張表的數(shù)據(jù)庫(kù)分別存儲(chǔ)為多個(gè)文件,如果在寫SQL的時(shí)候遵從了分區(qū)規(guī)則,就能把原本需要遍歷全表的工作轉(zhuǎn)化為只需要遍歷表里一個(gè)或者部分分區(qū)的工作,這樣就降低了查詢對(duì)服務(wù)器的壓力。但是這樣不管怎么分區(qū),所有數(shù)據(jù)都在一個(gè)服務(wù)器上邊,沒(méi)有辦法通過(guò)水平擴(kuò)展物理服務(wù)的方法把壓力分?jǐn)偝鋈ァ?br />垂直拆分:
考慮數(shù)據(jù)庫(kù)拆分的時(shí)候,首先考慮垂直拆分,其次考慮水平拆分。垂直拆分可以理解為分出來(lái)的庫(kù)表結(jié)構(gòu)是互相獨(dú)立各不相同的。
1)如果有多個(gè)業(yè)務(wù),業(yè)務(wù)之間的關(guān)聯(lián)性不大,就可以把不同業(yè)務(wù)拆分為單獨(dú)的實(shí)例,庫(kù)或表。
2)如果在一個(gè)實(shí)例上邊,有多個(gè)數(shù)據(jù)庫(kù),可以把每個(gè)數(shù)據(jù)庫(kù)拆分到單獨(dú)的實(shí)例上。
3)如果一個(gè)庫(kù)中有多張表,可以把每張表拆分到不同的實(shí)例上。
4)如果有一張表,但表里字段太多,當(dāng)表太大的時(shí)候,可以把每個(gè)或者幾個(gè)字段拆分為一個(gè)表。
水平拆分:
水平拆分是針對(duì)一張表說(shuō)的,在經(jīng)過(guò)垂直拆分之后,如果表的數(shù)據(jù)庫(kù)依然過(guò)大,例如注冊(cè)用戶量超過(guò)10億,那只好通過(guò)某種算法進(jìn)行水平拆分。拆分之后結(jié)果是多張具有相同表結(jié)構(gòu)的表,每張表里存儲(chǔ)一部分?jǐn)?shù)據(jù)。拆分的方法依據(jù)很多,例如通過(guò)取模100、2014等。
分庫(kù)分表的原則:
原則零:能不分就不分
如果能對(duì)系統(tǒng)進(jìn)行升級(jí)來(lái)提升數(shù)據(jù)庫(kù)的性能,例如升級(jí)硬盤、cpu、內(nèi)存、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)版本、讀寫分離、負(fù)載均衡等方面解決問(wèn)題,就不要做分表分庫(kù)。也就是說(shuō)做分表分庫(kù)的前提是這些已經(jīng)做好了。
原則一:數(shù)據(jù)量太大,正常的運(yùn)維影響正常的業(yè)務(wù)訪問(wèn)。
1)對(duì)數(shù)據(jù)庫(kù)的備份,如單個(gè)表太大,做數(shù)據(jù)庫(kù)備份的時(shí)候需要大量的磁盤IO或者網(wǎng)絡(luò)IO資源。
2)對(duì)數(shù)據(jù)表的修改,如表數(shù)據(jù)庫(kù)太大,做DDL時(shí)候會(huì)對(duì)表加鎖,這個(gè)時(shí)間會(huì)很長(zhǎng)。
3)整個(gè)表的熱點(diǎn)數(shù)據(jù),如某表的user_last_login字段,頻繁進(jìn)行update操作,導(dǎo)致此表壓力過(guò)大。
原則二:表設(shè)計(jì)不合理,對(duì)某些字段垂直拆分
1)用戶數(shù)從100萬(wàn)飆升到10億,user_last_login字段不斷被update,最好的辦法就是把該字段垂直拆分出去。
2)用戶表的person_info 表本來(lái)沒(méi)什么用,但是有些用戶會(huì)把個(gè)人信息填寫的分成完善,更糟糕的是產(chǎn)品經(jīng)理心血來(lái)潮,要把該字段開放,其他所有人都可以訪問(wèn),而該字段的類型是text,這個(gè)必須要進(jìn)行拆分。
原則三:某些數(shù)據(jù)出現(xiàn)了無(wú)窮盡的增長(zhǎng)
比如聊天系統(tǒng)的聊天記錄,充值系統(tǒng)的充值記錄等等。
原則四:安全性和可用性的考慮
不要把所有雞蛋都放在一個(gè)籃子里,我們不希望數(shù)據(jù)庫(kù)出問(wèn)題,或者不希望100%的用戶受到影響。如把用戶、庫(kù)存、訂單等本來(lái)統(tǒng)一的資源進(jìn)行拆分。
原則五:業(yè)務(wù)耦合性考慮
火車票業(yè)務(wù)和烤羊腿業(yè)務(wù)不沾邊,完全可以拆分為不同的數(shù)據(jù)庫(kù)。
網(wǎng)頁(yè)標(biāo)題:MySQL分庫(kù)分表-創(chuàng)新互聯(lián)
鏈接地址:http://weahome.cn/article/ccpijd.html
-
在線咨詢
微信咨詢
電話咨詢
-
028-86922220(工作日)
18980820575(7×24)
-
提交需求
-
返回頂部