mongodb的優勢在於文檔存儲:
1.業務經常變化,需要不時添加字段,因此mongodb更適合,在關系數據庫中添加字段的復雜性也不錯。
2.嵌套文檔,業務數據比較復雜,適合嵌套文檔存儲,所以mongodb很適合,這種關系型數據庫比較難做,雖然MySQL和pg也有文檔存儲,但是MySQL不成熟,pg在生產中使用的還是比較少的,我也不懂,這裏就不說了。但這不僅僅是這個優點,下面將詳細介紹。
3.支持upsert,而且查詢速度也不慢。
4.高可用性副本集支持
5.查詢語法非常豐富,嵌套的文檔查詢功能非常強大,可能不重的用戶看不懂。
讓我們來談談壹個具體的使用案例:
項目中的壹條數據約為10kb。如果您使用關系數據庫,您需要將這些數據分成數百份,並構建多個表。設計復雜,這種數據大概壹百萬。想想拆分後的數據量就很可怕。抽簽後,妳可以贏得任何DB,但把壹百萬變成十幾億是很可怕的。
如果使用MySQL存儲,每次查詢都需要使用外鍵來查詢多個表,從這些表中拉取數據的性能肯定會下降很多,這還不如只查詢壹個表而只拉取少兩個數量級的數據。查詢也很好,業務允許您緩存結果並將其放在redis中。
然而,關鍵是壹些數據需要增量更新。此時需要更新多個表,不可能實現原子性(註意事務不是原子操作)。當然,也可以使用cas和其他技術來補償最終的壹致性。但是使用mongodb只存儲壹條數據需要更新,相應嵌套文檔中的內容可以原子更新。是不是很方便?
建議學習python教程。
詳細說說這個項目的難度,查詢不能用緩存可能會讓人驚訝,但是業務確定做不到,增量更新量達到幾萬。如果它不能保證原子性,想想它有多可怕!
所以mongodb在這裏幫了大忙。關系數據庫不能解決這個問題。
有人可能會問,mongodb沒有事務,寫入上遊數據會有問題。妳不能把所有的數據都存儲在壹個表中,對嗎?
當然不是。mongodb中的數據從MySQL中清除並存儲在mongodb中。mongodb只做單點業務需求,綜合數據還在MySQL。
在這個項目中,我們使用了數百個副本集來確保系統的高可用性。這些副本集只能配置壹個shell。如果MySQL的主從不知道怎麽搭配(我自己也不懂),估計DBA會很忙,項目根本不需要也用不到DBA。
說了這麽多mongo的優點,我也說說他的缺點:
1.查詢優化器比不上MySQL。
2.不支持重裝,只能冷重啟,初始化配置時比較麻煩。
3.沒有交易,我不敢存儲第壹手數據,而大多用它來存儲備份數據。
Mongodb可以做很多事情,這取決於妳的大腦。它的性能還不錯,可以存儲壹些相對不重要的數據。mongodb嵌套文檔功能強大。看官方文檔挖掘有用信息,每次都能發現驚喜。