您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)mongodb數(shù)據(jù)庫優(yōu)勢是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
mongodb眾所周知不支持事務(wù),所以需要強事務(wù)的業(yè)務(wù)根本不能考慮mongodb。
mongodb的優(yōu)勢就是文檔存儲:
1. 業(yè)務(wù)經(jīng)常變動,需要不時的添加字段,那么mongodb比較適合,關(guān)系型數(shù)據(jù)庫添加字段的復(fù)雜度也還好
2. 嵌套文檔,業(yè)務(wù)數(shù)據(jù)比較復(fù)雜,適合嵌套文檔式存儲,那么mongodb非常合適,這個關(guān)系型數(shù)據(jù)庫比較難搞,雖然MySQL和pg也有文檔存儲,但MySQL的不成熟,pg畢竟現(xiàn)在生產(chǎn)中使用還是偏少,個人也不了解,這里不談。但這不僅僅這一點優(yōu)勢,具體下面會細說。
3. upsert支持,查詢速度也不慢
4. 高可用的副本集支持
5. 查詢語法非常豐富,嵌套文檔查詢功能非常強大,不是重度用戶可能不能理解
下面說說一個具體的使用事例:
項目的一條數(shù)據(jù)在10kb左右,如果使用關(guān)系型數(shù)據(jù)庫那么需要將這條數(shù)據(jù)拆分成大概幾百條左右,建造多個表,設(shè)計較復(fù)雜,這種數(shù)據(jù)大概在一百萬條左右,想想拆分后在十幾億的數(shù)據(jù)量就可怕。打平后的數(shù)據(jù)什么DB也都可以拿下,只是一百萬變十幾億比較恐怖而已。
如果采用MySQL存儲,每次查詢需要使用外鍵查詢多個表,從這些表中拉取數(shù)據(jù),性能肯定要下降很多,比不上只在一個表查詢,而且只拉取少兩個數(shù)量級的數(shù)據(jù)。查詢也還好,業(yè)務(wù)允許可以對結(jié)果做緩存,放到redis里去。
但是重點來了,需求要增量更新部分數(shù)據(jù),這時候需要更新多個表,根本沒法做到原子性(注意事務(wù)不是原子操作),當(dāng)然也可以使用cas等技術(shù)補償,達到最終一致性。但使用mongodb存儲只需要update一條數(shù)據(jù),對相應(yīng)的嵌套文檔中內(nèi)容更新,可以做到原子性,是不是很方便?
推薦學(xué)習(xí)《python教程》
具體說說該項目的難點,查詢無法使用緩存,可能會很吃驚,但是業(yè)務(wù)決定了確實做不了,而且增量更新的量達到上萬的QPS,如果不能保證原子性想想多么可怕!
所以mongodb在這里幫了大忙,關(guān)系型數(shù)據(jù)庫解決不了這個難題。
有人可能要問,mongodb沒有事務(wù),上游數(shù)據(jù)寫入也會有問題,你不可能所有數(shù)據(jù)都存一個表吧?
當(dāng)然不是的,我們mongodb里的數(shù)據(jù)是從MySQL中清洗出來存到mongodb中的,mongodb只做單點的業(yè)務(wù)需求,綜合的數(shù)據(jù)還是在MySQL中。
此項目我們用了上百個副本集,保證系統(tǒng)的高可用,這些副本集配置只要一條shell就搞定,如果用MySQL的主從不知道怎么配(我自己不懂),估計DBA得忙死,而該項目完全不需要也沒用到DBA。
說了這么多mongo的優(yōu)點,也說說他的缺點:
1. 查詢優(yōu)化器和MySQL沒法比
2. 不支持reload,只能冷重啟,初始化配置的時候比較麻煩
3. 沒有事務(wù),不敢存儲第一手數(shù)據(jù),多用來做備份數(shù)據(jù)的存儲
mongodb可以做很多事情,取決于你腦洞,性能不差,存一些相對不重要的數(shù)據(jù),mongodb嵌套文檔功能強大,多看看官方文檔挖掘挖掘有用信息,每次都能發(fā)現(xiàn)驚喜。
關(guān)于mongodb數(shù)據(jù)庫優(yōu)勢是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。