Azure DocumentDB对比MongoDB
(此文章同时发表在本人微信公众号“dotNET每日精华文章”)
今天推荐的文章对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的世界。
由于原文信息量巨大,更多详情还是“阅读原文”。
原文地址:http://justazure.com/mongodb-vs-azure-documentdb/
Azure DocumentDB对比MongoDB的更多相关文章
- Azure DocumentDB 正式发布
DocumentDB 简介 一种 NoSQL JSON 数据库 Azure DocumentDB 提供完全托管的 NoSQL 数据库服务,高度可用,自动缩放,开发简易,可以加速并预测性能.它适合诸如 ...
- Azure CosmosDB (11) MongoDB概念
<Windows Azure Platform 系列文章目录> Azure Cosmos DB兼容MongoDB的API,下表将帮助我们更容易理解MongoDB中的一些概念: SQL概念 ...
- 教程:使用 MongoDB、WCF、OData 和 PowerBI 构建 Azure 上的商业智能解决方案
发布于 2014-05-20 作者 陈 忠岳 目录 概述 前提条件 创建 Windows Server 2012 Datacenter 虚拟机 通过 WCF(Windows Communicat ...
- mongodb与mysql命令详细对比
传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象(docu ...
- mongodb,redis,memcached,mysql对比
1.性能都比较高,性能对我们来说应该都不是瓶颈总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2.操作的便利性memcache数据结构单一redis丰富一些,数据操作方面 ...
- MongoDB、Redis、elasticSearch、hbase的对比
MongoDB.Redis.elasticSearch.hbase的对比 MongoDB 优点: (1) 最大的特点是表结构灵活可变,字段类型可以随时修改. (2) 插入数据时,不必考虑表结构的限制. ...
- 基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用
在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各 ...
- mongodb系列3 mongo mongoskin 连接以及连接数的问题进阶
1)使用mongodb连接mongo var mongo = require('mongodb'), //引入mongodb dbHost = '127.0.0.1', dbPort = 27017; ...
- mongodb在WEB开发中的应用与实践
一.mongodb是什么? 一套高性能.易开发的文档型数据库.他使用键值对形式存放数据,能够存放包括字符串.数组.数据序列.图片.视频等在内的大多数数据文档.MongoDB完善的设计,搞笑的可编程性使 ...
随机推荐
- Unity3d三大光照渲染介绍
重要:在目前市面上常见的游戏引擎中,主要采用以下三种灯光实现方式: 顶点照明渲染路径细节 Vertex Lit Rendering Path Details 正向渲染路径细节 Forward Re ...
- C# ManualResetEvent的使用
using System; using System.Threading; public class Example { // mre is used to block and release thr ...
- UICollectionViewController用法
在iOS 6 发布前,开发人员习惯使用UITableView来展示几乎所有类型的数据集合.ios 6 为 IOS 引入了全新的控制器,用来显示数据集合,集合视图控制器是与表视图控制器类似的全新UI框架 ...
- linux的cgroup控制
cgroup:control group-控制群组:将用户(的进程)加入某个群组(又叫控制器controller), 通过 指定群组对资源-cpu 内存 network等的使用,来限制用户对计算机资源 ...
- NodeJs教程(介绍总结!)终于在网上找到一个靠谱点的了T_T
本人吐槽!本人是学渣,然后网上关于nodeJS的大多都是坑,简直让人要奔溃了.若非最近总是被要求要nodeJS,坚决不会去碰的...天生对cmd命令觉得无比的高大上,尽管一直在用git版本控制器!然后 ...
- Flume-NG(1.5版本)中SpillableMemoryChannel源码级分析
SpillableMemoryChannel是1.5版本新增的一个channel.这个channel优先将evnet放在内存中,一旦内存达到设定的容量就使用file channel写入磁盘.然后读的时 ...
- Scheme笔记(1)
(define pi 3.14159) (define radius 10) (* pi (* radius radius)) (define circumference (* 2 pi radius ...
- 关于Eclipse部署openfire3.8.2源码的体会
因为公司要做人际银行的一个项目需要openfire(服务器)+asmack(客户端),所以需要对消息的推送及消息发送知识的积累.所以需要研究xmpp,以前不是很了解这个技术,现在需要学习.首先就得部署 ...
- windows下的文件到linux下乱码 iconv 修改文件编码
conv [选项...] [文件...] 有如下选项可用: 输入/输出格式规范:-f, --from-code=名称 原始文本编码-t, --to-code=名称 输出编码 信息:-l, --list ...
- 《C#高级编程》学习笔记------C#中的事件和委托
本文转载自张子阳 目录 委托的作用 将方法绑定到委托 事件的来由 Observer设计模式 .Net Framework中的委托与事件 引言 委托 和 事件在 .Net Framework中的应用 ...