溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mongodb數(shù)據(jù)庫(kù)的優(yōu)缺點(diǎn)是什么

發(fā)布時(shí)間:2020-08-03 14:54:55 來(lái)源:億速云 閱讀:454 作者:清晨 欄目:編程語(yǔ)言

小編給大家分享一下mongodb數(shù)據(jù)庫(kù)的優(yōu)缺點(diǎn)是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家學(xué)習(xí),希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學(xué)習(xí)方法吧!

一年多一直在使用mongodb,基本上從對(duì)mongodb不懂的小白,到現(xiàn)在操作mongodb無(wú)任何壓力,最近的一個(gè)項(xiàng)目在做mongodb副本集的管理,三組機(jī)器做一個(gè)副本集,大概要管幾十臺(tái)上百臺(tái)副本集,主要用來(lái)自動(dòng)化發(fā)布,構(gòu)建副本集(我們的mongo副本集部署在docker中),所以在寫(xiě)各種mongo shell的代碼實(shí)現(xiàn),說(shuō)白了就是調(diào)用mongo的commands??吹竭@個(gè)問(wèn)題特來(lái)回答一下。

mongodb眾所周知不支持事務(wù),所以需要強(qiáng)事務(wù)的業(yè)務(wù)根本不能考慮mongodb。

mongodb的優(yōu)勢(shì)就是文檔存儲(chǔ):

1. 業(yè)務(wù)經(jīng)常變動(dòng),需要不時(shí)的添加字段,那么mongodb比較適合,關(guān)系型數(shù)據(jù)庫(kù)添加字段的復(fù)雜度也還好

2. 嵌套文檔,業(yè)務(wù)數(shù)據(jù)比較復(fù)雜,適合嵌套文檔式存儲(chǔ),那么mongodb非常合適,這個(gè)關(guān)系型數(shù)據(jù)庫(kù)比較難搞,雖然MySQL和pg也有文檔存儲(chǔ),但MySQL的不成熟,pg畢竟現(xiàn)在生產(chǎn)中使用還是偏少,個(gè)人也不了解,這里不談。但這不僅僅這一點(diǎn)優(yōu)勢(shì),具體下面會(huì)細(xì)說(shuō)。

3. upsert支持,查詢速度也不慢

4. 高可用的副本集支持

5. 查詢語(yǔ)法非常豐富,嵌套文檔查詢功能非常強(qiáng)大,不是重度用戶可能不能理解

下面說(shuō)說(shuō)一個(gè)具體的使用事例:

項(xiàng)目的一條數(shù)據(jù)在10kb左右,如果使用關(guān)系型數(shù)據(jù)庫(kù)那么需要將這條數(shù)據(jù)拆分成大概幾百條左右,建造多個(gè)表,設(shè)計(jì)較復(fù)雜,這種數(shù)據(jù)大概在一百萬(wàn)條左右,想想拆分后在十幾億的數(shù)據(jù)量就可怕。打平后的數(shù)據(jù)什么DB也都可以拿下,只是一百萬(wàn)變十幾億比較恐怖而已。

如果采用MySQL存儲(chǔ),每次查詢需要使用外鍵查詢多個(gè)表,從這些表中拉取數(shù)據(jù),性能肯定要下降很多,比不上只在一個(gè)表查詢,而且只拉取少兩個(gè)數(shù)量級(jí)的數(shù)據(jù)。查詢也還好,業(yè)務(wù)允許可以對(duì)結(jié)果做緩存,放到redis里去。

但是重點(diǎn)來(lái)了,需求要增量更新部分?jǐn)?shù)據(jù),這時(shí)候需要更新多個(gè)表,根本沒(méi)法做到原子性(注意事務(wù)不是原子操作),當(dāng)然也可以使用cas等技術(shù)補(bǔ)償,達(dá)到最終一致性。但使用mongodb存儲(chǔ)只需要update一條數(shù)據(jù),對(duì)相應(yīng)的嵌套文檔中內(nèi)容更新,可以做到原子性,是不是很方便?

具體說(shuō)說(shuō)該項(xiàng)目的難點(diǎn),查詢無(wú)法使用緩存,可能會(huì)很吃驚,但是業(yè)務(wù)決定了確實(shí)做不了,而且增量更新的量達(dá)到上萬(wàn)的QPS,如果不能保證原子性想想多么可怕!

所以mongodb在這里幫了大忙,關(guān)系型數(shù)據(jù)庫(kù)解決不了這個(gè)難題。

有人可能要問(wèn),mongodb沒(méi)有事務(wù),上游數(shù)據(jù)寫(xiě)入也會(huì)有問(wèn)題,你不可能所有數(shù)據(jù)都存一個(gè)表吧?

當(dāng)然不是的,我們mongodb里的數(shù)據(jù)是從MySQL中清洗出來(lái)存到mongodb中的,mongodb只做單點(diǎn)的業(yè)務(wù)需求,綜合的數(shù)據(jù)還是在MySQL中。

此項(xiàng)目我們用了上百個(gè)副本集,保證系統(tǒng)的高可用,這些副本集配置只要一條shell就搞定,如果用MySQL的主從不知道怎么配(我自己不懂),估計(jì)DBA得忙死,而該項(xiàng)目完全不需要也沒(méi)用到DBA。

說(shuō)了這么多mongo的優(yōu)點(diǎn),也說(shuō)說(shuō)他的缺點(diǎn):

1. 查詢優(yōu)化器和MySQL沒(méi)法比

2. 不支持reload,只能冷重啟,初始化配置的時(shí)候比較麻煩

3. 沒(méi)有事務(wù),不敢存儲(chǔ)第一手?jǐn)?shù)據(jù),多用來(lái)做備份數(shù)據(jù)的存儲(chǔ)

mongodb可以做很多事情,取決于你腦洞,性能不差,存一些相對(duì)不重要的數(shù)據(jù),mongodb嵌套文檔功能強(qiáng)大,多看看官方文檔挖掘挖掘有用信息,每次都能發(fā)現(xiàn)驚喜。

以上是mongodb數(shù)據(jù)庫(kù)的優(yōu)缺點(diǎn)是什么的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI