Mongo分庫(kù)方案選型

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)象?,F(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)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容