(此文章同时发表在本人微信公众号“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/