BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

微软推出支持Microsoft Azure平台的NoSQL文档数据库

| 作者 Richard Seroter 关注 8 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2014年9月6日. 估计阅读时间: 8 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

由于微软的SQL Server已经成为它们的旗舰产品,因此人们总是倾向于将微软与关系型数据等同起来,不过这种情况即将因为一个新的NoSQL产品的到来而发生改变了。微软在上周宣布推出DocumentDB的预览版,这是一个依托于云端的托管文档型数据库,它对JavaScript有很好的支持,并且包括自动建立索引与事务等方面的特性。

DocumentDB是一个无结构的、基于SSD的数据库,它能够对JSON文档进行存取操作,并且通过一套REST API进行访问。根据微软的官方说辞,这个仅针对Microsoft Azure平台的服务将满足用户对非关系型数据库方面的需求,同时又保留了关系型数据库中一些有用的概念。

我们经常从用户那里倾听他们的需求,他们希望能有一个数据库可以跟上他们高速发展的应用的步伐,因此这个数据库必须高速、灵活并且可伸缩性强。随着越来越多的NoSQL数据库出现,它们也成为许多开发者首选的开发工具。但是运行与管理这些NoSQL数据库的成本高昂,尤其是在大规模使用的情况下。同时,我们也听到用户另一方面的需求,他们希望能利用关系型数据库系统的天然优势,例如复杂的查询功能与事务处理,这些特性对他们依然非常重要。大多数数据库为开发者提供的选择都显得有些极端,要么是强一致性,要么是最终一致性;要么使用查询功能十分有限的无结构形式,要么使用具有丰富查询功能但高度格式化的形式;在事务及扩展性等方面同样要面对两难的选择。事实上,在许多真实世界的场景中,我们需要在这些极端方案中寻找一种折衷以达到目的。

那么DocumentDB与传统的关系型数据库在哪些方面具有相似之处呢?首先可以使用一种轻量级的SQL语法对文档进行查询,并且支持原生的JavaScript类型,例如对象和数组。其次,大多数流行的NoSQL数据库只支持数据存储的最终一致性,而DocumentDB则提供了四种不同的一致性模型可供选择

DocumentDB为读写与查询提供了四种不同的一致性级别:强制一致、有限过期(Bounded Staleness)一致、会话一致以及最终一致。这四种完整定义的一致性级别使你能够在一致性、可用性及延迟等方面进行合理的权衡。有限过期能够保证完整的写入顺序,这种一致性适用于处理时间以及按顺序操作的应用程序。而会话一致性能够读取属于你自己的写入保证,它适用于以用户为中心的应用。

同样,在文档索引与事务方面的特性也能够找到关系型数据库常见的能力,其中索引方面具有如下特性:

当你往集合中加入文档时,DocumentDB会自动为这些文档建立索引,以便你进行查询。能够在不设定结构,并且不提供第二级索引的情况下实现文档的自动索引,这是DocumentDB的一项关键特性。而实现这一特性的关键是由乐观写入、无锁并且使用日志结构的索引维护技术决定的。

对于DocumentDB的索引维护存在多种选项,虽然在默认的情况下会进行自动索引,但你也可以选择关闭这一行为,或者对其进行微调,例如可以指定将处于某个路径下或符合某个模式的特定文档从索引中去除,或是加入到索引中。还可以设定以同步或者是异步方式对索引进行更新。

DocumentDB服务为配合服务端业务逻辑也提供了多种选择,它支持用户定义函数、存储过程和触发器。

由于DocumentDB的数据库引擎对JavaScript和JSON进行了深入支持,因此它能够以一种非常直观的编程模型,通过存储过程及触发器的方式直接执行基于JavaScript的应用程序逻辑。这使得以下两点成为可能:(a)能够以一种高效的方式实现在数据库引擎中直接进行并发控制、恢复、以及对JSON对象的自动索引。(b)能够以JavaScript编程语言自然地表控制流、参数变量、赋值,异常处理等基本功能,并且直接与数据库事务进行交互。

在某个牵涉到同一集合中多个文档的ACID事务操作中,DocumentDB能够以快照隔离级别将基于JavaScript的存储过程与触发器进行封装。在执行过程中,如果某个JavaScript抛出异常,则整个事务将被撤消。

请注意,在DocumentDB处理多个文档时,它并不要求任何特殊形式的JSON规范以实现文档之间的关系建立,DocumentDB的SQL查询语言提供了一套非常强大的结构化关系查询操作,能够在无需特殊标注的情况下对文档进行查询及转换,并且也不需要使用特别的属性以建立文档之间的关系。

那么这个数据库的性能如何呢?GigaOm表示,DocumentDB使用了SQL Server 2014中名为Hekaton的内存引擎,微软的副总裁Scott Guthrie也透露了这项技术已经在微软内部被大量使用的事实。

过去一年中,我们已经在微软内部的一些常用服务中使用了DocumentDB,现在运行中的每个DocumentDB数据库都具有几百TB容量的数据,每天都要复杂百万级的复杂查询,并且依然保持性能良好,在延误方面至多只有几个毫秒而已。

那么这一产品对Microsoft Azure平台上其它的NoSQL工具会产生什么影响呢?微软目前依然提供了一套基于键-值对的NoSQL产品,名为Azure Table Storage,而且他们不久前才发布了一个基于Redis的缓存服务。而MongoDB最近刚刚在Microsoft Azure平台上创建了一个托管服务,它的走向还有待观察。不过,有一个基于Windows的NoSQL产品发言人对于DocumentDB提出了尖锐的批评,即RavenDB的创建人Oren Eini。他在一篇博客中表示DocumentDB并未给他留下什么深刻的印象,并且将他的吐槽一一列举如下:

  • 缺乏排序选项,也没有良好的分页功能
  • 容易遭受SQL注入攻击,并且没有其它的替代方案可以避免
  • 难以部署,也难以配合现有的代码进行使用
  • 在开发与测试两方面的感觉都很糟糕
  • 糟糕的客户端API
  • 大量的表扫描
  • 在查询与优化方面的选择太少
  • 在客户端只能发起单表事务操作
  • 完全不支持跨集合的事务操作
  • 只支持极小的文档尺寸

虽然DocumentDB只刚刚发布了一个“预览”版本,但微软还是为它发布了.NET、Node.js、JavaScript和Python等方面的SDK。该产品的价格是基于“能力单元”进行计算的,每个单元级别支持每秒2000次读取、每秒500次插入、替换或删除操作、以及10GB的存储空间。在预览阶段,每个能力单元的价格为每天0.73美元,比起预计的正式商用版价格大约便宜了50%。DocumentDB现在Microsoft Azure的美国西部、欧洲北部以及欧洲西部地区可以使用。

查看英文原文:Microsoft Introduces NoSQL Document Database for Microsoft Azure

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT