首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB5.0版本新特性速览

MongoDB5.0版本新特性速览

原创
作者头像
phoenix、
修改2021-07-16 20:49:30
3.4K0
修改2021-07-16 20:49:30
举报
文章被收录于专栏:MongoDB 学习MongoDB 学习

总览

MongoDB到现在已经走过了12个年头了。就在今天刚刚发布了5.0版本。来看一下新版本发布了哪些新功能和特性~官方选择从4.4直接跳到5.0可能也是为了表达出该版本变化比较大(调整了发布节奏)的含义。

mongodb version history.png
mongodb version history.png

从上图加粗的几点特性来看,主要功能包括:

  • Time-Series collections 原生时序表支持
  • Clustered indexes 聚簇索引
  • Window functions 窗口函数
  • New temporal operators 新的时间相关操作符
  • Live resharding 实时重新分布
  • Multi-cloud 混合云

在发布会上展示了更多,一起来看看细节。😃


server 新功能列表

Native Time Series

本地时间序列,本质上是 扩展和加强MongoDB在时序数据处理方面的能力 。(可能因为发现很多客户都把原本存在MongoDB的数据迁移到ElasticSearch中去做时序数据的分析所以才想去着重加强这一块的能力。)

什么是时间序列集合? 本质上,MongoDB5.0新引入了一种集合类型(回想一下,之前有capped collection,普通集合,系统集合以及基于普通集合的视图),并且对这种集合进行了针对性的支持和优化。

哪些数据适合? 所有跟时序有关的都可以,比如金融交易,各种智能终端/传感器的监控数据。官方使用的例子是全美各地的天气数据(温度、湿度等)。

创建时序集合会在后台创建一个普通集合和一个自动创建的对应的可写非物化视图( non-materialized view ),该视图作为抽象层。该抽象层允许用户始终将数据作为原始的单个文档来进行处理,因此用户不需要再关系时序数据是如何存储和持久化的,只需要关注业务层该如何使用或分析这些时序数据即可。

如何使用?

使用方式一如既往的简单,基本上跟使用普通集合没有什么差异。只是需要在特定的字段上补充 timeseries 关键字即可。

创建一个名为weather的时序集合:

db.createCollection("weather", {
	timeseries: {
		timeField: "ts",
		metaField: "source",
		granularity: "minutes"
  	},
	expireAfterSeconds: 9000 
}); 

其中:

  • timeField 字段为时序字段,其类型必须为MongoDB支持的时间类型比如 ISODate("2021-05-20T10:24:51.303Z")
  • metaField 为元数据字段,可用来创建二级索引,比如标记时序数据的来源等。MongoDB会自动将一段时间内具有相同metaField的测量值聚合到一起并做,以消除存储层中该字段的重复。
  • granularity 为粒度字段,即时序数据的更新频率,默认为秒级( seconds )。
  • expireAfterSeconds 过期字段,并非新增字段。时序数据配上TTL索引,让时序数据可以自动淘汰。

如果建时序表的时候指定了 expireAfterSeconds ,则不需要再创建TTL索引了。之后想修改时间需要使用 collMod 命令。未来还可以配合Atlas在线归档( Online Archive )功能来进行使用。

作为初期版本,时序表还有一些 限制 ,比如:

  • append only,不支持更新/删除
  • 不支持Change Streams,Realm Sync 或 Atlas Search
  • 只能在metaField上创建二级索引等
  • 等等

Versioned API

主要是为了解决版本更新的难题

很多线上业务希望使用新版本的新特性,但是出于各种原因考虑,普遍不太敢去做线上数据库的升级。数据库升级对于运维同事而言也是不小的挑战。中间涉及到的代码变更,驱动升级,全面的兼容性测试等等都带来了大量的工作量。Versioned API可以在这样的场景下发挥作用,也就是说数据库升级到了更新的版本,但是存量业务还是会使用旧版的API来进行访问。不会存在不兼容的问题。换句话说,该功能 将应用程序的生命周期与数据库的更新彻底解耦了

versioned API.png
versioned API.png

Live Resharding

尝试彻底解决数据库初始建模不合理的问题

在4.4以前的版本,shard key一旦定义好就是不可改变的。很多业务在运行了很长时间,积累了大量数据后发现自己的shard key不合理,想变更就很困难了。普遍只有两种方式:1)停服搬迁(dump&load);2)在线迁移(live migration)。前者需要很长的停机维护时间,后者需要花费较长时间而且需要业务自行处理各种复杂的逻辑(DDL,孤儿文档,数据一致性问题等),均不是最优解决方案。

我们看到在4.4版本官方推出了refinable shard keys。但是只是通过在shard key上添加后缀的方式来实现数据分布的调整。正如其名所展示的,这只是refine,并不能彻底解决shard key不合理的问题。

Live Resharding 可以理解为官方自己在MongoDB内部实现了 live migration 并处理了各种复杂的情况和一致性问题,对于那些初始shard key不合理但是又拥有庞大数据量的业务非常友好。

使用方式也很简单,只是一条mongos上执行的command而已:

db.adminCommand({
  reshardCollection: "<database>.<collection>",
  key: <shardkey>
})

当然,此功能也会有一些限制,仅列举一部分,细节可参考官方文档:

  • 同时只能有一个分片表在resharding
  • 不支持有唯一限制的表
  • resharding期间不能做一些操作,比如集群级别的 addShard 以及表级别的 createIndexes/renameCollection

Atlas 更新

MongoDB Ops Manager 5.0

  • 支持 MongoDB 5.0 部署的自动化、监控和备份/恢复。
  • 通过并行化客户端还原提高负载性能。
  • 使用 Ops Manager 在 Kubernetes 中部署 MongoDB 的快速入门体验。
  • 引导用户完成 Atlas 迁移体验,引导用户配置迁移主机,将数据从其现有环境推送到完全托管的 Atlas 云服务。

Online Archive

在线归档功能,目的是为了解决 数据降冷 的需求。

  • 有效降低数据存储成本;
  • 自动化数据分层,无需手动迁移或者删除有价值的数据;
  • 可查询的归档数据,支持对业务数据和归档数据的联合查询;
online archive.png
online archive.png
Online-Archive-Animation.gif
Online-Archive-Animation.gif

Serverless Model (preview)

基于serverless理念的无服务器实例,暂时还没正式上线Atlas平台。可能会主推两个产品: elastic database model & serverless model

和其他serverless的产品(比如 LambdaDynamoDBcloud function )类似,支持以下能力:

  • 使用简单,仅需选择托管的云区域
  • 无需关心后端基础设施
  • 弹性伸缩
  • 按量付费
  • 自动更新server版本,会利用 Versioned API 的能力

可能是看到其他云服务提供商基于MongoDB在做类似的事情,官方决定自己下场做了,让我们期待一下。

serverless.png
serverless.png

Atlas Data Lake & Charts

两者能力集成 。可以基于data lake中的数据快速创建和分享可视化图表。

datalake.png
datalake.png
charts.png
charts.png

Atlas Search

底层基于lucene,支持全文搜索功能。

新增了对函数评分的支持 ,允许在文档字段上应用数学公式来计算相关性,比如受欢迎程度或距离——例如,据有更多或更好评论的较近餐厅将在搜索的结果列表中会更靠前。另外新支持了 自定义搜索同义词集合 来支持更普遍的用户查询。

atlas search.png
atlas search.png

Realm SDK

Realm 让用户在手机、平板电脑和树莓派等物联网设备上拥有简单、强大的本地持久性。其本质是为了解决终端数据同步的问题。让开发人员可以直接与存储对象交互,而不需要考虑ORM或者数据库语法。今年早些时候发布了 Realm Sync,支持终端设备与atlas数据库后端之间同步数据。

新增功能为:

  • 支持Unity ,可以看出MongoDB在游戏行业的进一步动作:smile:
  • 未来支持跨平台框架——Kotlin & Flutter
  • 更精细控制同步数据的方法——Realm Flexible Sync (未发布)
realm.png
realm.png

new MongoDB Shell(mongosh)

新的mongo shell,引入了语法突出显示、智能自动补全、上下文帮助以及有帮助的错误信息,可以为MongoDB用户创建更直观的交互式体验。

  • 与4.0以上的MongoDB集群兼容 ,你不需要将自己的mongoDB集群升级到5.0就能体验到。
  • 更有用的错误帮助信息(有的时候复杂命令少一个大括号很抓狂。。)
mongosh 1.png
mongosh 1.png
  • 交互更好的shell提示信息
Mongosh 2.png
Mongosh 2.png
  • 甚至你还能像mysql一样看到table可视化的库表schema(这真的很不NoSql哈哈哈)
Mongosh 3.png
Mongosh 3.png

其他

  • 更快的发布频率(从年度改变为季度)
    releases in the future.png
    releases in the future.png
  • 支持了 window function
  • 新的时间相关操作符,比如$dateAdd,$dateDiff,$dateSubtract,也是为了更好支持时序数据的处理
  • 读关注快照( read concern "snapshot" ),而且可以设置保留时长
  • dbstatsserverStatus 命令输出结果更新,会展示更多系统/库表相关信息
  • 更多变更请参考release notes

总结

仅代表个人意见,欢迎交流~

  • 数据库的融合趋势(无论是OLAP和OLTP,还是SQL与NoSQL)
  • 原生时序数据的支持算是5.0版本的最大亮点,至于与ES的差别和对比还有待体验后深入研究
  • Atlas的功能越来越强大,MongoDB期望能通过这些能力绑定用户。

参考链接

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总览
  • server 新功能列表
    • Native Time Series
      • Versioned API
        • Live Resharding
        • Atlas 更新
          • MongoDB Ops Manager 5.0
            • Online Archive
              • Serverless Model (preview)
                • Atlas Data Lake & Charts
                  • Atlas Search
                    • Realm SDK
                      • new MongoDB Shell(mongosh)
                      • 其他
                      • 总结
                      • 参考链接
                      相关产品与服务
                      云数据库 MongoDB
                      腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档