分表分庫(kù)雖然能解決大表對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的壓力,但它并不是萬(wàn)能的,也有一些不利之處,因此首要問(wèn)題是,分不分庫(kù),分哪些庫(kù),什么規(guī)則分,分多少分片。
原則一:能不分就不分,1000萬(wàn)以內(nèi)的表,不建議分片,通過(guò)合適的索引,讀寫分離等方式,可以很好的解決性能問(wèn)題。
原則二:分片數(shù)量盡量少,分片盡量均勻分布在多個(gè)DataHost上,因?yàn)橐粋€(gè)查詢SQL跨分片越多,則總體性能越差,雖然要好于所有數(shù)據(jù)在一個(gè)分片的結(jié)果,只在必要的時(shí)候進(jìn)行擴(kuò)容,增加分片數(shù)量。
原則三:分片規(guī)則需要慎重選擇,分片規(guī)則的選擇,需要考慮數(shù)據(jù)的增長(zhǎng)模式,數(shù)據(jù)的訪問(wèn)模式,分片關(guān)聯(lián)性問(wèn)題,以及分片擴(kuò)容問(wèn)題,最近的分片策略為范圍分片,枚舉分片,一致性Hash分片,這幾種分片都有利于擴(kuò)容
原則四:盡量不要在一個(gè)事務(wù)中的SQL跨越多個(gè)分片,分布式事務(wù)一直是個(gè)不好處理的問(wèn)題
原則五:查詢條件盡量?jī)?yōu)化,盡量避免Select * 的方式,大量數(shù)據(jù)結(jié)果集下,會(huì)消耗大量帶寬和CPU資源,查詢盡量避免返回大量結(jié)果集,并且盡量為頻繁使用的查詢語(yǔ)句建立索引。
如果某個(gè)表的數(shù)據(jù)有明顯的時(shí)間特征,比如訂單、交易記錄等,則他們通常比較合適用時(shí)間范圍分片,因?yàn)榫哂袝r(shí)效性的數(shù)據(jù),我們往往關(guān)注其近期的數(shù)據(jù),查詢條件中往往帶有時(shí)間字段進(jìn)行過(guò)濾,比較好的方案是,當(dāng)前活躍的數(shù)據(jù),采用跨度比較短的時(shí)間段進(jìn)行分片,而歷史性的數(shù)據(jù),則采用比較長(zhǎng)的跨度存儲(chǔ)。
總體上來(lái)說(shuō),分片的選擇是取決于最頻繁的查詢SQL的條件,因?yàn)椴粠魏蜽here語(yǔ)句的查詢SQL,會(huì)便利所有的分片,性能相對(duì)最差,因此這種SQL越多,對(duì)系統(tǒng)的影響越大,所以我們要盡量避免這種SQL的產(chǎn)生。
網(wǎng)站欄目:Mycat分表分庫(kù)原則-創(chuàng)新互聯(lián)
分享地址:
http://weahome.cn/article/pdgio.html