MongoDB 3.6中的新功能 (1) - 发展的速度

New in MongoDB 3.6. What’s New in MongoDB 3.6. Part 1 – Speed to Develo

作者:Mat Keep

翻译:TJ

我们都知道MongoDB 最新的版本3.6刚刚于去年12月发布,目前的最新版本是3.6.2。按照MongoDB一个月一个小版本的节奏,年后马上就是3.6.3,基本过了新版本的危险期,各位可以考虑升级你们的MongoDB了。

那么3.6到底有什么东东值得让我们升级呢? 我们将通过一个轻博客序列来为大家介绍。今天我们就来这个序列的第1部分,来了解一下3.6版本MongoDB在核心数据库产品上做的功能改善,包括变更流,可重试写操作,更强的数组操作能力及开发者工具。

在第2部分中,我们将深入了解DevOps世界和分布式系统管理,Ops Manager的改进,模式管理能力和压缩等话题

第3部分将介绍面向开发人员,数据科学家和业务分析师的全新SQL连接器,更丰富的数据库内分析和聚合框架,以及新推荐的R语言

如果您想要了解新版本提供的所有内容,请下载“MongoDB 3.6新增功能指南”。

开发者优先

MongoDB一直是开发者优先的技术。其文档数据模型自然映射到应用程序代码中的对象,使开发人员可以轻松学习和使用。文档模式可以动态地创建和修改,并且无需对数据库进行停机,使构建和衍变应用程序变得非常快速。MongoDB为10多种语言提供原生的,符合程序语言规范的驱动程序 - 社区也提供了数十种语言驱动的支持 - 包括即时查询,实时聚合和丰富的索引,提供强大的编程方法来访问和分析任何结构的数据。

MongoDB 3.6基于这些核心功能,允许开发人员可以用较少的代码来创建丰富的应用程序和提高客户体验。

变更流

变更流有些类似于关系型数据库中的触发器。它允许开发人员构建响应式,实时,Web,移动和IoT应用程序,以便查看,过滤数据更改,并在数据库中进行操作。变更流可实现跨分布式数据库和应用程序的无缝数据移动,使用完全的反应式编程风格,可以简单地在任何需要的地方流式数据更改和触发操作。

变更流是在MongoDB的操作日志(oplog)之上作为一个API实现的,消费者可以打开集合的变更流,并使用$ match,$ project和$ redact 聚合操作对相关事件进行过滤。只要文档或集合被修改,应用程序就可以监听到通知,从而使下游应用程序和消费者能够实时处理新数据,而无需不断查询整个集合来对数据改动做处理。应用程序可以直接使用,或者通过消息队列,或者通过MongoDB Stitch(即将推出)等后端服务来使用变更流。

MongoDB变更流启用的用例包括:

  • 股票价格涨跌时候需要实时处理的交易类应用。
  • 在插入或修改文档时通过触发API调用来实现微服务架构中的数据同步。比如说,一条刚写入数据库的新客户订单可以自动触发生成发票和交货计划的操作。
  • 数据变化时实时更新仪表板,分析系统及搜索引擎等。
  • 创建强大的物联网数据管道,只要物理对象的状态发生变化,就可以做出反应。例如,每当连接的车辆移动到地理围栏区域外时就会发出警报。
  • 将新的信用卡交易推给机器学习训练模型来重新调整欺诈分类算法。
  • 在多人游戏中刷新记分牌。

MongoDB变更流使消费者能够实时响应数据的变化

图1:MongoDB变更流使消费者能够实时响应数据更改

一些需要实时数据变更通知的MongoDB用户已经基于“Oplog Tailling”的技术开发了自己的数据触发器机制。使用更改流以后,这些用户可以减少对这些代码的开发和维护开销,提高可用性,并提高数据的可靠性。和其他数据库实现的类似功能或者Oplog Tailing方式相比,MongoDB的变更流提供了许多优势:

  • 灵活性 - 用户可以注册以接收从文档更改中的增量变化,或者接收完整文档的数据。
  • 一致性 - 通过利用全局逻辑时钟,变更流确保整个分片上事件通知的总排序。因此,MongoDB保证更改顺序将被妥善保持,并且可以由消费应用程序按照从流接收的顺序安全地处理。
  • 安全性 - 用户只能在自己有访问权限的集合上创建变更流。
  • 可靠性 - 通知只在大多数提交的写入操作上发送,并在节点或网络出现故障时持续使用。
  • 可恢复性 - 当节点在故障后恢复时,假设应用程序接收到的最后一个事件还在oplog记录内,变更流可以自动恢复。
  • 熟悉的语法 - 变更流的API利用已有的MongoDB驱动程序和查询语言,并且独立于底层oplog格式。
  • 高并发 - 可以针对每个MongoDB实例打开多达1,000个变更流而无显著的性能影响

查看MongoDB变更流文档以了解更多信息。

可重试写入

向MongoDB添加可重写的写操作会将处理临时系统故障的复杂性从应用程序转移到数据库。从现在开始,程序员不再需要实现自定义的客户端容错代码,而是可以在出现瞬时网络故障或主副本选举时由MongoDB驱动程序自动重试写入,MongoDB服务器会提供写入操作会执行一次并只有一次的语义保证。

通过为每个写入操作分配一个唯一的事务标识符,驱动程序将重新发送该ID以使服务器能够评估先前的写入尝试是否已经成功,还是需要重试刚才的写入操作。这种可重写写入的实现相对于其他数据库采用的方法提供了许多好处:

  • 可重写的写入不仅限于幂等操作。它们也可以应用于诸如递增或递减计数器的操作,或处理库存盘点的订单。
  • 对于由于超时异常(例如由于暂时的网络故障)而无法确认成功返回到应用程序的操作,可重试写操作是安全的。
  • 可重试写操作不要求开发人员为其应用程序添加任何额外的代码,例如重试逻辑或保存点。

无法接受任何写入数据丢失的应用程序(如电子商务应用程序,交易交换和物联网传感器数据摄取)可立即受益于可重试写功能。当MongoDB的可重试写操作和具有自动恢复功能(通常在2秒或更短时间内)的MongoDB复制集结合使用时,可以使开发人员实现全局始终可用的写操作,而不会造成那些最终一致系统或Multi-Master系统会引起的数据丢失或过时数据的问题。

可调一致性

通过可调一致性,MongoDB为开发人员提供了对分布式集群的路由查询的精确控制,在数据的一致性和性能需求见找到一个平衡点。 MongoDB 3.4添加了线性化读,这个是MongoDB能够通过Jepsen测试,数据库行业中最严格的数据安全性和正确性测试,的关键特性。

现在,MongoDB 3.6版本引入了对因果一致性的支持- 保证客户端会话中的每个读取操作始终会看到先前的写入操作,而不管是哪个节点正在为请求提供服务。通过对会话中的操作进行严格的因果排序,因果一致性确保了每个读取在逻辑上始终一致,从而实现了分布式系统的单一读取 - 保证了大很多分布式数据库都无法做到的功能。

因果一致性使开发人员能够保持由传统单节点关系数据库强制执行的严格数据一致性的好处,同时使其基础架构现代化,以充分利用现代分布式数据平台的可扩展性和高可用性优势。

开发人员工具:MongoDB Compass

作为MongoDB的GUI,Compass已经成为开发人员和DBA不可或缺的工具,支持图形界面下的模式管理的和查询优化。Compass现在提供了几个新功能:

  • 自动补齐:使开发人员能够使用Compass简化查询开发,提供字段名称和MongoDB运算符的建议,以及在代码中匹配大括号和引号。
  • 查询历史记录:允许开发人员重新运行他们最近执行的查询,并保存常用查询以按需运行。
  • 表视图:现在开发人员可以将文档视为常规表格来查看,在JSON文档基础之上。

MongoDB Compass不仅仅是一个单独的工具 - 它是一个允许添加模块化组件的框架。Compass现在将其作为Compass插件框架公开,使得Compass可以由任何用户使用和MongoDB软件工程师一样的方法进行扩展。使用插件API,用户可以构建插件来向Compass添加新功能。如GridFS查看器,示例数据生成器,硬件状态查看器,日志采集器/分析器等。

您可以在MongoDB Compass文档中了解更多关于这些新功能的信息。

MongoDB Compass 社区版

随着MongoDB 3.6的发布,Compass系列已经扩展到现在包括新的,免费的Compass社区版本。

Compass社区为开发人员提供了一个直观的可视化界面,与MongoDB shell一起使用。它包含了Compass的核心功能,使用户能够查看数据库和集合的层次和大小,检查文档以及插入/更新/删除文档。开发人员可以使用GUI来构建查询,检查它们的执行方式以及添加或删除索引以提高性能。Compass社区还支持MongoDB 3.6提供的最新Compass功能,使开发人员更有效率。

MongoDB Compass社区版

图2:MongoDB Compass社区版,MongoDB开发者的新型免费GUI

MongoDB Compass社区版可以从MongoDB下载中心下载。

完整的数组更新能力

数组是MongoDB文档数据模型中的一个强大的数据结构,它允许开发人员在一个文档中表示复杂的对象,在一次调用数据库时就可以高效地检索这些对象。但是,在MongoDB 3.6之前,更新操作只能只能更新数组中第一个匹配的数组元素。

通过3.6的改善,开发人员现在可以对数组中的匹配元素(包括嵌套数组中的元素)执行复杂的数组操作,所有操作都在一次原子更新操作中。MongoDB 3.6添加了一个新arrayFilters选项,允许更新指定在数组字段中修改哪些元素。这种增强功能使得MongoDB数据建模更加灵活,并且性能也比支持JSON的其他数据库更加优秀:毕竟在MongoDB中可以只更新数组的部分元素而无需更新整个文档。

从数组更新文档中了解更多信息。

下一步

这是该博客系列的第一部分。 如果想要了解新版本提供的所有内容,请下载MongoDB 3.6新增功能指南。你也可以马上试用3.6的新功能:

  • 在MongoDB Atlas数据库服务上启动MongoDB 3.6 。
  • 下载MongoDB 3.6来评估你自己的环境中的新版本。
  • 注册MongoDB大学的免费3.6培训。

原文发布于微信公众号 - Mongoing中文社区(mongoing-mongoing)

原文发表时间:2018-01-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Rainbond开源「容器云平台」

好雨云帮更新志( 2017.04.03-2017.04.16)

1282
来自专栏IT技术精选文摘

MongoDB和数据流:使用MongoDB作为Kafka消费者

数据流 在当今的数据环境中,没有一个系统可以提供所有必需的观点来提供真正的洞察力。从数据中获取完整含义需要混合来自多个来源的大量信息。 与此同时,我们不耐烦地...

5446
来自专栏大史住在大前端

webpack4.0各个击破(3)—— Assets篇

Assets,指项目中被引用的资源,通常为各种格式的图片和字体文件,当然也可能包含各式各样其他扩展名的文件(.json,.xml等),常见的图片和文字资源的处理...

1062
来自专栏老九学堂

进程与线程的区别?

进程是什么? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是...

37011
来自专栏進无尽的文章

基础篇-服务器工作实现的浅析

对于一个前端开发的人员来说,了解服务器的基础知识,个人觉得是非常必要的,于是就有一个这篇侧重于Java的服务器相关知识的文章,只是简单介绍对于我也是一个拓展。

1352
来自专栏Linyb极客之路

浅谈分布式事务

普通事务就是一般所说的数据库事务,大家对数据库事务应该都很了解,这里再简单介绍下。

1152
来自专栏北京马哥教育

一篇了解爬虫技术方方面面

传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬...

1913
来自专栏恰童鞋骚年

《大型网站技术架构》读书笔记之五:万无一失之网站的高可用架构

此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。

1433
来自专栏腾讯Bugly的专栏

手Q Android缓存监控与优化实践

死锁问题对产品的影响是巨大的,那么是否会有效的方法能够监控Android应用的死锁呢?

77012
来自专栏Python

计算机基础之计算机硬件系统

一.计算机硬件系统概述 所谓计算机硬件系统,就是指构成计算机看得见的,摸得着的实际物理设备。 常见的计算机硬件组成主要由下图各部件组成: ? 现代计算机的结构更...

2285

扫码关注云+社区

领取腾讯云代金券