Mongo分庫(kù)方案兩種形式分析:
1. mongo sharding方式:
1.1. 深翻頁(yè)的問(wèn)題回俐。
舉例:當(dāng)mongo的分片是5片時(shí),分頁(yè)查詢(如果按照創(chuàng)建時(shí)間倒敘查詢)第一頁(yè)镐依,每頁(yè)50條數(shù)據(jù),則mongo sharding在每個(gè)分片上取50條數(shù)據(jù),一共50 * 5 = 250條數(shù)據(jù),然后進(jìn)行匯總,計(jì)算出前50條正確數(shù)據(jù)作為返回結(jié)果宅此。如果是翻頁(yè)到1000頁(yè)机错,那么mongo sharding需要從5個(gè)分片上分別查詢50 * 1000=5萬(wàn)條條數(shù)據(jù),然后匯總成50 * 1000 * 5 = 25萬(wàn)條數(shù)據(jù)父腕,然后計(jì)算第1000頁(yè)的數(shù)據(jù)弱匪,,這樣系統(tǒng)會(huì)占用很大的系統(tǒng)資源,很容易造成系統(tǒng)異常萧诫。這個(gè)問(wèn)題暫時(shí)沒(méi)有什么可以解決的辦法斥难。
1.2. mongo sharding再平衡時(shí),有可能查詢數(shù)據(jù)出現(xiàn)重復(fù)的問(wèn)題
當(dāng)mongo sharding根據(jù) sharding key帘饶,將數(shù)據(jù)存入mongo的5個(gè)片(1哑诊,2,3及刻,4镀裤,5)時(shí),一般會(huì)產(chǎn)生5個(gè)分片數(shù)據(jù)不均勻的問(wèn)題缴饭,假如1暑劝,2的分片數(shù)據(jù)較多,3颗搂,4担猛,5的分片數(shù)據(jù)量較少,那么mongo sharding再平衡策略會(huì)將1丢氢,2分片上的數(shù)據(jù)平衡到3傅联,4,5分片上卖丸,如果此時(shí)數(shù)據(jù)正在進(jìn)行平衡纺且,那么查詢1,2分片上的數(shù)據(jù)平衡到3稍浆,4载碌,5的那部分的數(shù)據(jù)時(shí),而且沒(méi)有命中索引的情況時(shí)衅枫,有可能出現(xiàn)重復(fù)數(shù)據(jù)的現(xiàn)象〖尥В現(xiàn)有的解決方式是,在晚上調(diào)用量少的時(shí)候進(jìn)行數(shù)據(jù)平衡弦撩,白天數(shù)據(jù)訪問(wèn)量大的時(shí)候關(guān)閉再數(shù)據(jù)平衡步咪。
1.3. mongo分片擴(kuò)展
分片不能夠無(wú)限擴(kuò)大,實(shí)際使用中一般分成個(gè)位數(shù)分片益楼,很難做到無(wú)限擴(kuò)展猾漫。
1.4. sharding的key不能變更
sharding key 一旦指定,不可更改感凤。更改之后悯周,訪問(wèn)數(shù)據(jù)的分片邏輯會(huì)變,導(dǎo)致服務(wù)不可用陪竿。
2. 采用物理分庫(kù)方式:
2.1 分庫(kù)要自己代碼實(shí)現(xiàn)
需要自己代碼中實(shí)現(xiàn)根據(jù)不同的context訪問(wèn)不同的數(shù)據(jù)庫(kù)禽翼,即實(shí)現(xiàn)根據(jù)分庫(kù)的key,路由到不同的物理庫(kù)上。
2.2 不同的分庫(kù)交叉訪問(wèn)問(wèn)題
不能夠像mongo sharding那樣直接交叉訪問(wèn)庫(kù)闰挡,如果要進(jìn)行交叉訪問(wèn)庫(kù)锐墙,只能在程序中自己實(shí)現(xiàn)。
2.3 負(fù)載均衡
mongo sharding內(nèi)部實(shí)現(xiàn)了負(fù)載均衡长酗,如果采用物理分成多個(gè)mongo庫(kù)溪北,實(shí)現(xiàn)負(fù)載均衡需要自己代碼實(shí)現(xiàn)。