一键科、什么是mysql分表闻丑,分區(qū)
什么是分表,從表面意思上看呢勋颖,就是把一張表分成N多個(gè)小表嗦嗡,具體請(qǐng)看:mysql分表的3種方法
什么是分區(qū),分區(qū)呢就是把一張表的數(shù)據(jù)分成N多個(gè)區(qū)塊饭玲,這些區(qū)塊可以在同一個(gè)磁盤上侥祭,也可以在不同的磁盤上
二、mysql分表和分區(qū)有什么區(qū)別呢
1茄厘、實(shí)現(xiàn)方式上
- mysql的分表是真正的分表矮冬,一張表分成很多表后,每一個(gè)小表都是完正的一張表次哈,都對(duì)應(yīng)三個(gè)文件胎署,一個(gè).MYD數(shù)據(jù)文件,.MYI索引文件窑滞,.frm表結(jié)構(gòu)
- 分區(qū)不一樣琼牧,一張大表進(jìn)行分區(qū)后,他還是一張表哀卫,不會(huì)變成二張表障陶,但是他存放數(shù)據(jù)的區(qū)塊變多了。
2聊训、提高性能上
- 分表重點(diǎn)是存取數(shù)據(jù)時(shí),如何提高mysql并發(fā)能力上恢氯;
- 而分區(qū)呢带斑,如何突破磁盤的讀寫能力,從而達(dá)到提高mysql性能的目的勋拟。
3勋磕、實(shí)現(xiàn)的難易度上
1毡鉴、分表的方法有很多目养,用merge來分表,是最簡(jiǎn)單的一種方式姻灶。這種方式根分區(qū)難易度差不多啸胧,并且對(duì)程序代碼來說可以做到透明的赶站。如果是用其他分表方式就比分區(qū)麻煩了幔虏。
2、分區(qū)實(shí)現(xiàn)是比較簡(jiǎn)單的贝椿,建立分區(qū)表想括,根建平常的表沒什么區(qū)別,并且對(duì)開代碼端來說是透明的烙博。
三瑟蜈、mysql分表和分區(qū)有什么聯(lián)系呢
1,都能提高mysql的性高渣窜,在高并發(fā)狀態(tài)下都有一個(gè)良好的表面铺根。
2,分表和分區(qū)不矛盾乔宿,可以相互配合的位迂,對(duì)于那些大訪問量,并且表數(shù)據(jù)比較多的表予颤,我們可以采取分表和分區(qū)結(jié)合的方式(如果merge這種分表方式囤官,不能和分區(qū)配合的話,可以用其他的分表試)蛤虐,訪問量不大党饮,但是表數(shù)據(jù)很多的表,我們可以采取分區(qū)的方式等驳庭。
四刑顺、 分庫分表存在的問題。
1饲常、事務(wù)問題蹲堂。
在執(zhí)行分庫分表之后,由于數(shù)據(jù)存儲(chǔ)到了不同的庫上贝淤,數(shù)據(jù)庫事務(wù)管理出現(xiàn)了困難柒竞。如果依賴數(shù)據(jù)庫本身的分布式事務(wù)管理功能去執(zhí)行事務(wù),將付出高昂的性能代價(jià)播聪;如果由應(yīng)用程序去協(xié)助控制朽基,形成程序邏輯上的事務(wù),又會(huì)造成編程方面的負(fù)擔(dān)离陶。
2稼虎、跨庫跨表的join問題。
在執(zhí)行了分庫分表之后招刨,難以避免會(huì)將原本邏輯關(guān)聯(lián)性很強(qiáng)的數(shù)據(jù)劃分到不同的表霎俩、不同的庫上,這時(shí),表的關(guān)聯(lián)操作將受到限制打却,我們無法join位于不同分庫的表杉适,也無法join分表粒度不同的表,結(jié)果原本一次查詢能夠完成的業(yè)務(wù)学密,可能需要多次查詢才能完成淘衙。
3、額外的數(shù)據(jù)管理負(fù)擔(dān)和數(shù)據(jù)運(yùn)算壓力腻暮。
額外的數(shù)據(jù)管理負(fù)擔(dān)彤守,最顯而易見的就是數(shù)據(jù)的定位問題和數(shù)據(jù)的增刪改查的重復(fù)執(zhí)行問題,這些都可以通過應(yīng)用程序解決哭靖,但必然引起額外的邏輯運(yùn)算具垫,例如,對(duì)于一個(gè)記錄用戶成績的用戶數(shù)據(jù)表userTable试幽,業(yè)務(wù)要求查出成績最好的100位筝蚕,在進(jìn)行分表之前,只需一個(gè)order by語句就可以搞定铺坞,但是在進(jìn)行分表之后起宽,將需要n個(gè)order by語句,分別查出每一個(gè)分表的前100名用戶數(shù)據(jù)济榨,然后再對(duì)這些數(shù)據(jù)進(jìn)行合并計(jì)算坯沪,才能得出結(jié)果。