mongodb的優缺點

2021-08-18 11:42:36 字數 2671 閱讀 3938

對比mysql, mongo的優缺點有:

缺點l  不支援事務操作

l  占用空間過大

l  mongodb沒有如mysql那樣成熟的維護工具

l  無法進行關聯表查詢,不適用於關係多的資料

l  複雜聚合操作通過mapreduce建立,速度慢

| 模式自由,自由靈活的檔案儲存格式帶來的資料錯誤

|預分配模式帶來的磁碟瓶頸。

mongodb採用資料檔案預分配模式來生成資料檔案,資料檔案的大小從64m開始,每增加乙個檔案,大小翻倍,直到2g,以後每次增加資料就會生成2g左右的資料檔案,結合mongodb的mmap記憶體模型,對於寫資料檔案,將隨機寫轉換為順序寫,一定程度上緩解了磁碟的io壓力。

但在實際使用中,遇到了在預分配2g的資料檔案時,如果磁碟io較慢,則mongodb基本鎖死,無法響應請求的情況。持續時間則根據磁碟io的效能來確定。這個問題在2.0之後版本可能會有些改善,但在磁碟效能低的伺服器上,該問題依舊存在.

這個問題目前沒有太好的解決方案,只能建議使用讀寫效能比較好的伺服器來跑mongodb。

在資料存量大於記憶體大小時,mongodb遇到冷資料查詢速度變慢。

mongodb使用mmap的記憶體管理模式,如果查詢的都是熱資料,那麼會在記憶體中直接查詢,如果遇到冷資料,就需要從磁碟讀取,並將一部分熱資料從記憶體解除安裝掉.

有人曾經說mongodb記憶體管理是載入固定大小的檔案塊到記憶體,即如果冷資料在磁碟上,他會根據請求的資料,載入一定大小的資料塊到記憶體,並解除安裝掉同樣的熱資料,這個操作本身會帶來一定io.

因為mongodb使用的是全域性鎖,在某個操作緩慢時,整個操作佇列會全部變慢。這個問題造成了mongodb會出現偶發性堵塞問題,連帶整個庫的效能下降。

該問題在應用需要盡量避免出現,需要將mongodb的資料大小規劃好,盡量不要使資料量超過記憶體的大小,如果超過記憶體大小後,盡量不要去請求冷資料。

mongodb全域性鎖機制。

mongodb最大的問題或者可以說是它的鎖機制,在2.2版本之前,乙個例項只有乙個讀寫鎖,不管有多少資料庫和資料集合,當乙個操作進行時其他操作只能等待,在2.2版本後,mongodb鎖降低了粒度,改為按庫鎖。

mongodb 使用的是「readers-writer」鎖, 可以支援併發但有很大的侷限性,當乙個讀鎖存在,許多讀操作可以使用這把鎖,然而, 當乙個寫鎖的存在,乙個單一的寫操作會exclusively 持有該鎖,同時其它讀,寫操作不能使用共享這個鎖;舉個例子,假設乙個集合裡有 10 個文件,多個 update 操作不能併發在這個集合上,即使是更新不同的文件。

刪除資料集合後空間不會自動釋放

mongodb刪除集合後磁碟空間不釋放,只有用db.repairdatabase()去修復才能釋放。

修復可能要花費很長的時間,在使用db.repairdatabase()去修復時一定要停掉讀寫,並且mongodb要有備機才可以,不然千萬不要隨便使用db.repairdatabase()來修復資料庫,切記。

但是在修復的過程中如果出現了非正常的mongodb的掛掉,再次啟動時啟動不了的,需要先修復才可以,可以利用./mongod --repair --dbpath=/data/mongo/ 如果你是把資料庫單獨的放在乙個資料夾中指定dbpath時就指向要修復的資料庫就可以。

7. replica set一些隱含問題

a) replica set模式最多支援12臺伺服器,而有投票權的伺服器只支援7臺,如果超過7臺伺服器,需設定部分伺服器為無投票權伺服器

b) replica set模式中,乙個set伺服器如果小於2臺伺服器,則自動故障恢復不會起作用,如果4臺伺服器出現2/2互相ping不通的情況,同樣不會自動故障恢復。一般來說,乙個set中盡量是有單數伺服器。

c). replica set中,因為mongodb是按照時間進行操作,如果set中某個伺服器時間超前或者延遲,很容易出現secondaries不斷嘗試更新oplog或者同步延遲的問題。甚至造成某些操作失敗,如drop操作。

8. 分片模式的一些隱含問題

1. config server盡量按照官方的要求,有3個configserver,如果只有2個configserver,則shard的自動負載均衡和自動切片功能不可用。

2. api中的nearest模式在shard中,判斷的是set到mongos的距離而非set到client的距離,在切片模式下,盡量不要使用nearest模式,可能會造成一些請求延遲增加的問題。

優點l  文件結構的儲存方式,能夠更便捷的獲取資料

l  內建gridfs,支援大容量的儲存

l  內建sharding,分片簡單

l  海量資料下,效能優越

l  支援自動故障恢復(複製集)

mongodb是乙個介於nosql資料庫和mysql資料庫之間的乙個資料儲存系統,它沒有嚴格的資料格式,但同時支援複雜查詢,而且自帶sharding模式和replica set模式,支援分片模式,複製模式,自動故障處理,自動故障轉移,自動擴容,全內容索引,動態查詢等功能。擴充套件性和功能都比較強大。

mongodb在資料查詢方面,支援類sql查詢,可以乙個key多value內容,可以組合多個value內容來查詢,支援索引,支援聯合索引,支援複雜查詢 ,支援排序,基本上除了join和事務型別的操作外,mongodb支援所有mysql支援的查詢,甚至某個客戶端api支援直接使用sql語句查詢mongodb。

mongodb的sharding功能目前日漸完善,支援自定義範圍分片,hash自動分片等,分片自動擴容,shard之間自動負載均衡等功能。實際使用中功能還不錯。

剛構橋的優缺點 橋梁的優缺點

梁式橋 主梁為主要承重構件,受力特點為主梁受彎。主要材料為鋼筋混凝土 預應力混凝土,多用於中小跨徑橋梁。簡支梁橋合理最大跨徑約 公尺,懸臂梁橋與連續梁橋合宜的最大跨徑約 60 70 公尺。優點 採用鋼筋砼建造的梁橋能就地取材 工業化施工 耐久性好 適應性強 整體性好且 美觀 這種橋型在設計理論及施工...

演算法的優缺點 邏輯回歸演算法的優缺點

邏輯回歸演算法是最經典的幾個機器學習演算法之一,本文對它的優點,缺點進行總結。sigmoid函式 表示式如下 1.實現簡單,廣泛的應用於工業問題上 2.分類時計算量非常小,速度很快,儲存資源低 3.便利的觀測樣本概率分數 4.對邏輯回歸而言,多重共線性並不是問題,它可以結合l2正則化來解決該問題 5...

Struts的優缺點

struts是開源軟體,使開發者能更深入的了解其內部實現機制。struts 優點 業界 標準 很多成功案例 學習資源豐富。struts的優點主要集中體現在兩個方面 taglib和頁面導航。a 利用struts提供的taglib可以大大節約開發時間。b 維護擴充套件比較方便。通過乙個配置檔案,即可把握...