最近,隨著大數據時代的到來,NoSQL數據庫作為數據庫行業的后起之秀,在短短的幾年之間,得到了迅猛的發展,而如今還大有取代RDBMS之勢。在眾多的NoSQL數據庫中,名氣最大的莫過于MongoDB了。MongoDB于2009年2月推出第一個版本,至今的5年多時間,其已經發展
最近,隨著“大數據時代”的到來,NoSQL數據庫作為數據庫行業的后起之秀,在短短的幾年之間,得到了迅猛的發展,而如今還大有取代RDBMS之勢。在眾多的NoSQL數據庫中,名氣最大的莫過于MongoDB了。MongoDB于2009年2月推出第一個版本,至今的5年多時間,其已經發展成為在DB Engine影響力排行世界第5位的數據庫。
MongoDB具有以下幾個特點:
1) 非結構化的數據結構,保證了適應多種多樣的數據類型和形式,無需預先設計數據結構和表模式。
2) 水平擴張,理論上是可以無限擴展的水平擴展性。
3) 多樣的功能和平臺架構支持,經過其開發團隊的自身推進以及Mongo開源社區的蓬勃發展,使得MongoDB支持越來越多的開發語言和大數據架構,同時也不斷豐富了他的功能。
而本人作為一個大數據相關的從業人員,在工作中不斷地學習MongoDB的知識,我自己也將其運用到了一些實際應用場景當中。
在使用MongoDB的過程中,其性能表現雖然中規中矩,也很好的體現了NoSQL的基本特性,但是實際應用場景之中,MongoDB仍然有不少功能上的不足以及性能上可改進之處。
1. 性能
首先我想談談MongoDB的性能表現。作為NoSQL數據庫,MongoDB的讀寫查等許多操作的性能方面自然是領先于RDBMS的,然而在與其他的NoSQL產品比較時,MongoDB其實并沒有太大的優勢。
根據網上之前公布的一些權威機構的測試結果,MongoDB的性能在眾多NoSQL數據庫中只能說是一般般。讀寫性能方面,相比于HBase,MongoDB在少分區下還能基本持平,但是在多分區的情情景下性能表現也只有HBase的1/3甚至1/5。而與這方面的佼佼者Cassandra相比,Mongo在各項對比中,也只能達到Cassandra的1/10甚至更少。
http://planetcassandra.org/nosql-performance-benchmarks
而與存儲方式同類的Couchbase相比,MongoDB似乎也不占優勢。
http://www.csdn.net/article/2013-04-15/2814886-nosql-benchmark
http://www.couchbase.com/press-releases/couchbase-blows-past-competition-nosql-performance-benchmark
從以上兩個測試報告也可以看出,作為NoSQL領軍人物的MongoDB,在性能表現上確實差強人意。
2. 功能
2.1 事務
事務作為RDBMS一個非常實用的特性,在處理高可用性高安全性的情景,如企業級的應用時,事務有它獨到的優點。
MongoDB并沒有事務處理的功能,而在原子性的保證方面,其只能做到單個文檔級別,不能支持多文件的原子性。
如今,MongoDB在開源之后應用層也有民間開發的集成了事務功能的組件,但是應用層的實現在數據庫的通信上面不能保證性能和可靠性,也就很難提供更專業和完善的支持。
2.2 SQL支持
SQL作為已經使用了幾十年的數據庫操作語言,不僅在應用上,有著完善多樣的接口和驅動,同時,SQL的思維在眾多數據庫使用者和DBA的腦中已經根深蒂固,想要迅速的改變這種思維方式是困難也沒有必要的。所以,NoSQL對于SQL語句的支持也很重要。MongoDB并不具備這樣的原生支持,同樣,應用層的一些驅動并不能很好的結合數據庫本身,完全發揮它的能量。
相反,有許多的同類產品已經提供自帶的SQL語句處理,例如通過對接PostgreSQL來實現SQL語句支持,這樣能讓開發者更快的熟悉和轉入NoSQL。
2.3 鎖
MongoDB 只有庫級粒度的鎖,這意味著當 MongoDB 一個寫鎖處于占用狀態時,其它的讀寫操作都需要等待。雖然因為改動過的鎖處理機制讓其能保證較高的并發量和高性能(感興趣可以另外介紹)。
可是基本保證并能完全避免問題,如果數據操作不當,依然會導致長時間占用寫鎖,比如前臺創建索引操作,當出現這種情況的時候,整個數據庫就處于完全阻塞狀態,無法進行任何讀寫操作,情況十分嚴重。
2.4 自動分區
體現MongoDB水平擴展能力的重要一個功能就是自動分區(auto-sharding),然而MongoDB的自動分區在實際應用當中也存在著不少問題。1)在高負載的情況下,MongoDB的自動分區功能會出現不可用或者運行緩慢的情況。2)可以看到網上有不少使用者在系統自動分區后出現數據錯誤或者數據丟失的情況(最出名的當然是Foursquare的宕機事件)。3)我自己在實際應用中也出現過類似問題,也就是MongoDB在高負載下,出現了數據的丟失,并且還沒辦法恢復。
2.5 Join
MongoDB不支持Join操作,需要在多個Collection中查找時,不能使用Join將多個Collection合并,只能分別在每個Collection中運行一次存儲操作。
3. 安全性
MongoDB的原生數據庫系統安全性雖然也是它極力展示的一個特性之一,但是事實上
MongoDB的安全性設計仍有缺陷。首先,MongoDB的默認安全設置為否,這給了很多不熟悉MongoDB特點的新人或是第一次轉換NoSQL的企業用戶一個非常大的安全隱患。此外,MongoDB也在網上被報道一些安全漏洞或者黑客攻擊事件,包括非法數據獲取、數據的無故丟失等這些事件究其原因也是安全保障設計的缺陷。
4. 易用性
易用上來說,MongoDB的表現也是中規中矩,雖然可以使用Javascript的Shell工具以及界面化的MMS,但是其操作仍有優化的空間。此外,MongoDB不具備自動安裝部署功能。MongoDB的安裝部署必須全手動操作,這樣不僅比較耗時,對于新手來說可能因為不熟悉而忽略或不能完成一些系統配置的工作,導致安裝失敗或是使用過程中出現異常。
以上是我個人在實踐中發現的MongoDB的幾點不足,我認為,MongoDB雖然是作為NoSQL的領軍人物在與關系型數據庫華山論劍,但是其實他并不完善,所以我希望未來MongoDB自身能做出改進,當然我更希望能有新的數據庫產品能后來居上,這樣才能加快NoSQL數據庫的更快進步。聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com