https://blog.csdn.net/kingcat666/article/details/78324678
1膊夹,實(shí)現(xiàn)方式上?
mysql的分表是真正的分表壕探,一張表分成很多表后博肋,每一個(gè)小表都是完正的一張表,都對(duì)應(yīng)三個(gè)文件(MyISAM引擎:一個(gè).MYD數(shù)據(jù)文件,.MYI索引文件,.frm表結(jié)構(gòu)文件)傲霸。
2,數(shù)據(jù)處理上?
分表后數(shù)據(jù)都是存放在分表里,總表只是一個(gè)外殼昙啄,存取數(shù)據(jù)發(fā)生在一個(gè)一個(gè)的分表里面。分區(qū)則不存在分表的概念寸五,分區(qū)只不過(guò)把存放數(shù)據(jù)的文件分成了許多小塊梳凛,分區(qū)后的表還是一張表,數(shù)據(jù)處理還是由自己來(lái)完成梳杏。
3韧拒,提高性能上?
分表后,單表的并發(fā)能力提高了十性,磁盤I/O性能也提高了叛溢。分區(qū)突破了磁盤I/O瓶頸,想提高磁盤的讀寫能力劲适,來(lái)增加mysql性能楷掉。
在這一點(diǎn)上,分區(qū)和分表的測(cè)重點(diǎn)不同霞势,分表重點(diǎn)是存取數(shù)據(jù)時(shí)烹植,如何提高mysql并發(fā)能力上;而分區(qū)呢愕贡,如何突破磁盤的讀寫能力草雕,從而達(dá)到提高mysql性能的目的。?
4固以,實(shí)現(xiàn)的難易度上?
分表的方法有很多墩虹,用merge來(lái)分表,是最簡(jiǎn)單的一種方式憨琳。這種方式和分區(qū)難易度差不多诫钓,并且對(duì)程序代碼來(lái)說(shuō)可以做到透明的。如果是用其他分表方式就比分區(qū)麻煩了栽渴。分區(qū)實(shí)現(xiàn)是比較簡(jiǎn)單的尖坤,建立分區(qū)表,跟建平常的表沒什么區(qū)別闲擦,并且對(duì)代碼端來(lái)說(shuō)是透明的慢味。
分表能夠解決單表數(shù)據(jù)量過(guò)大帶來(lái)的查詢效率下降的問題,但是墅冷,卻無(wú)法給數(shù)據(jù)庫(kù)的并發(fā)處理能力帶來(lái)質(zhì)的提升纯路。面對(duì)高并發(fā)的讀寫訪問,當(dāng)數(shù)據(jù)庫(kù)master服務(wù)器無(wú)法承載寫操作壓力時(shí)寞忿,不管如何擴(kuò)展slave服務(wù)器驰唬,此時(shí)都沒有意義了。因此,我們必須換一種思路叫编,對(duì)數(shù)據(jù)庫(kù)進(jìn)行拆分辖佣,從而提高數(shù)據(jù)庫(kù)寫入能力,這就是所謂的分庫(kù)搓逾。
與分表策略相似卷谈,分庫(kù)可以采用通過(guò)一個(gè)關(guān)鍵字取模的方式,來(lái)對(duì)數(shù)據(jù)訪問進(jìn)行路由霞篡,如下圖所示
五世蔗、分庫(kù)分表存在的問題
1 事務(wù)問題。
在執(zhí)行分庫(kù)分表之后朗兵,由于數(shù)據(jù)存儲(chǔ)到了不同的庫(kù)上污淋,數(shù)據(jù)庫(kù)事務(wù)管理出現(xiàn)了困難。如果依賴數(shù)據(jù)庫(kù)本身的分布式事務(wù)管理功能去執(zhí)行事務(wù)余掖,將付出高昂的性能代價(jià)寸爆;如果由應(yīng)用程序去協(xié)助控制,形成程序邏輯上的事務(wù)浊吏,又會(huì)造成編程方面的負(fù)擔(dān)而昨。
2 跨庫(kù)跨表的join問題。
在執(zhí)行了分庫(kù)分表之后找田,難以避免會(huì)將原本邏輯關(guān)聯(lián)性很強(qiáng)的數(shù)據(jù)劃分到不同的表歌憨、不同的庫(kù)上,這時(shí)墩衙,表的關(guān)聯(lián)操作將受到限制务嫡,我們無(wú)法join位于不同分庫(kù)的表,也無(wú)法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í)行問題,這些都可以通過(guò)應(yīng)用程序解決樊破,但必然引起額外的邏輯運(yùn)算愉棱,例如,對(duì)于一個(gè)記錄用戶成績(jī)的用戶數(shù)據(jù)表userTable哲戚,業(yè)務(wù)要求查出成績(jī)最好的100位奔滑,在進(jìn)行分表之前,只需一個(gè)order by語(yǔ)句就可以搞定顺少,但是在進(jìn)行分表之后朋其,將需要n個(gè)order by語(yǔ)句王浴,分別查出每一個(gè)分表的前100名用戶數(shù)據(jù),然后再對(duì)這些數(shù)據(jù)進(jìn)行合并計(jì)算梅猿,才能得出結(jié)果氓辣。
解決方案
1.?使用類似JTA提供的分布式事物機(jī)制