mongo犧牲空間,把內存管理交給操做系統去管理。本身作一些內存的映射,而且記住哪一種方式的查詢最優。除此以外,把不少文檔加工的工做交給了客戶端(好比事務)。除此以外數據的傳輸使用mongo協議,而不是HTTP之類的。這些都在查詢的速度上有了必定的保證。mysql
豐富的數據類型(PS:mongodb後臺的字符編碼都是utf-8的),正則表達式和函數直接保存,太可怕了。豐富的索引,複合索引,內嵌文檔索引。豐富的查詢方式,並且除了有像關係型數據庫那樣的group的聚合功能以外,還提供了強大的MapReduce支持。固然最具誘惑力的仍是它的自我管理,很是的強大,集羣(想起mysql的集羣一陣後怕),主從,數據分片,只要作一些配置,後續的工做mongo都會幫你處理。固然這些自動化可能帶來的一些反噬可能須要後面漸現。正則表達式
使用每一個數據庫,固然都會考慮讀寫的比例。mongodb有個比較蛋疼的就是全局鎖,支持併發讀,而後寫的時候就會阻塞其餘的讀寫。這個基因使業界不少人都認爲mongodb適合高讀少寫的環境。固然2.0以後的mongodb也作了一些優化。可是,目前依然是server級別的鎖(沒錯,不是db級別,collection級別)。sql
那麼爲何使用mongodb:mongodb
一、讀併發,讀比例很高數據庫
二、須要安全性高的熱備份安全
三、讀效率要求比較高數據結構
四、對磁盤的高佔用能夠忍受併發
五、管理、使用方便(mongodb集羣分片很智能)函數
六、數據結構變更比較大,不可知優化
七、數據量龐大,甚至還要存儲大文件(mongodb有GridFS)
歡迎抨擊,小人不才,小敬mongodb看法.