(此文章同時發表在本人微信公衆號「dotNET每日精華文章」)mongodb
今天推薦的文章對Azure DocumentDB和MongoDB的進行了比較,也給出了一些使用建議。數據庫
我想不少朋友都應該知道Azure,不過估計也有不少人不知道微軟還推出了本身的NoSQL數據庫產品。固然這個產品僅限以PaaS的方式來在Azure中提供。DocumentDB去年秋天開始預覽,這個正式上線(按照Azure的說法是Generally Available)。固然,在NoSQL市場上,混戰激烈,尤爲MongoDB佔了將近一半的市場份額。本文做者David Green特地拿DocumentDB同MongoDB進行了比較。編程
相同點微信
他首先分析了二者的相同點。NoSQL數據庫一般分爲以下幾種:Key-Value存儲,列存儲,圖存儲,文檔存儲,或者混合模型。而DocumentDB和MongoDB都同屬文檔存儲類別,都具有以下特色:使用分區來容錯,反範式組織數據集合來避免傳統關係結構,模仿面向對象編程中的實體對象來突出人可讀的數據格式。架構
除了上面的這些共同特色外,二者都具有一些特別的優點。首先,二者都支持多種編程語言的客戶端SDK,DocumentDB支持主流的.NET、Node.js、JavaScript、Python和Java,固然MangoDB的支持更爲豐富。其次,二者都使用了相似的數據格式——JSON(MongoDB使用的是JSON的擴展BSON)。最後,二者使用的通用語都是JavaScript。併發
不一樣和優點運維
David在談完二者的相同點以後,着重介紹了不一樣之處和DocumentDB的某些優點。異步
- PaaS:DocumentDB是直接以PaaS提供的。這樣帶來的好處是配置、管理、維護都更爲簡單。MongoDB則須要自行部署到VM中,須要花費成本運維。因爲PaaS有諸多好處,做者都建議即便要使用MongoDB都最好使用第三方搭建好的現成PaaS。
- 伸縮能力:因爲DocumentDB是PaaS驅動的架構,因此其處理水平擴展的方式和MongoDB徹底不一樣。DocumentDB分區後無需管理複製,MongoDB還需同時處理複製。這點也是得利於DocumentDB後臺依賴於Azure的伸縮能力。
- 原生REST接口:雖然二者都爲開發人員提供了多種語言的SDK,可是DocumentDB是原生提供REST接口的,其實SDK也是REST接口的包裝。相反,MongoDB沒有原生REST接口,不過其有Wire協議和元數據驅動(基於TCP),能夠語言無關的訪問到數據。不過在有些狀況下基於HTTP的REST接口顯然更加方便(好比物聯網)。
- 數據交換格式:DocumentDB使用JSON更加標準(RFC 7159 和 ECMA-404)。
- 索引處理:二者雖然都是基於B-Tree來進行索引,不過DocumentDB提供了兩類索引Hash和Range,Range暫時不支持時間字段的索引,DocumentDB也不支持地理位置信息的索引而是依靠Azure Search來解決這個問題。從產品的角度看,在這點上MongoDB具有優點,不過實際使用過程當中不會有太大的問題。
- 異步處理:因爲DocumentDB原生提供REST接口,而這些接口或者.NET SDK都提供了async/await的支持,以提供併發處理能力。
- 訂價:雖然MongoDB是開源免費,不過運維的費用也不會少。DocumentDB是基於使用量付費,不過費用不高,且能夠經過DreamSpark和BizSpark來獲取Azure免費訂閱。
- 一致性:MongoDB的一致性能夠配置來是否啓用一致性,DocumentDB能夠配置4級一致性等級。
- 二進制大對象存儲:MongoDB依賴GridFS來實現Blob的存儲,DocumentDB依賴Azure Blob Storage。
- 監控:Azure爲DocumentDB提供了豐富的監控指標,MongoDB經過Mongo Monitoring Service (MMS)來跟蹤宿主主機的狀況。
- 可編程性:二者都支持JavaScript,DocumentDB的.NET SDK對LINQ支持更好,不過對debug支持很差(主要沒有本地模擬器)。
- 其餘的不一樣:DocumentDB對聚合操做暫時有必定限制,無服務端排序,工具還不夠豐富。MongoDB狀況要稍好些。
最後,做者給出了一些使用上的建議:DocumentDB能夠知足NoSQL的基本需求,不過文檔和應用案例都還須要繼續改善。無論怎麼樣,DocumentDB可讓你(在使用Azure的狀況)很快進入NoSQL的世界。async
因爲原文信息量巨大,更多詳情仍是「閱讀原文」。編程語言
原文地址:http://justazure.com/mongodb-vs-azure-documentdb/