本文介绍云数据库MongoDB 6.0版本推出的新特性和优化项。

速览

说明 MongoDB 6.0的更多新特性以及优化项,请参见MongoDB 6.0 release-notes

可查询加密(Queryable Encryption)

重要 可查询加密功能目前是预览(Preview)版本,不建议直接在生产环境使用。预览(Preview)版本的更多信息,请参见MongoDB Releases Queryable Encryption Preview

MongoDB 6.0新推出可查询加密功能,允许用户从客户端加密敏感数据,将其作为完全随机的加密数据存储在数据库服务器端,并对加密数据进行丰富的查询。

可查询加密只允许在客户端查看敏感数据的明文,在查询到达服务器端时会同时包含从KMS获取的加密密钥,然后在服务器端以密文进行查询并返回,最后在客户端利用密钥解密后以明文呈现。

可查询加密的特点如下:
  • 从客户端加密敏感数据,只有客户端拥有加密密钥。
  • 数据在整个生命周期(传输、存储、使用、审计和备份)中都是加密的。
  • 客户端可以直接对加密数据进行丰富的查询(包括等值匹配、范围、前后缀或子字符串等查询类型)。
  • 强大的数据隐私保护能力,只有能访问客户端的应用程序和加密密钥的授权用户才能看到明文数据。
  • 更轻量化的应用程序开发,涉及敏感数据的开发者无需考虑太多安全、合规的事情,数据库会直接提供综合加密解决方案。
  • 降低敏感数据上云的安全顾虑。
说明 可查询加密的更多信息,请参见Introducing Queryable Encryption

集群同步(Cluster-to-Cluster Sync)

无论是数据的同构同步(Mongo-to-Mongo)还是异构同步(Others-to-Mongo & Mongo-to-Others)都是MongoDB生态中的一部分,开源MongoDB推出了多种工具,比如mongoimport、mongoexport、mongodump和mongorestore等,但是这些工具并没有很好的规划数据同步。

MongoDB 6.0推出了新的同步工具mongosync,它能支持跨任何环境(包括混合环境、Atlas、本地以及边缘环境)的数据同步(两个MongoDB实例间连续且单向的数据同步)。用户还可以实时控制和监控整个同步过程,按需启动、停止、恢复甚至反转同步。
说明 mongosync工具的更多信息,请参见mongosync

时序集合(Time Series Collection)

时序集合是MongoDB 5.0版本发布的功能,主要应用于时序数据分析型场景。从5.0版本开始,时序集合的功能更新记录如下:
版本 更新说明
MongoDB 5.0 首次发布。
MongoDB 5.1 引入分片(Sharding),以支持更好地分布数据。
MongoDB 5.2 引入柱状压缩(Columnar Compression),以改善存储空间占用。
MongoDB 5.3 引入密集化和间隙填充(Densification and Gap-Filling),以支持部分数据点缺失情况下的时序分析。
MongoDB 6.0 分别从索引、查询以及排序多个方面增强了时序集合。
  • 引入二级和复合索引,以改善读取性能。
  • 引入针对时空数据的地理位置索引(Geo-Indexing),将地理信息添加到时序数据,有助于更好地分析涉及距离和位置的场景。

    场景示例:跟踪夏日冷链运输车的温度变化情况、监测特定航线上的货运船燃料消耗。

  • 优化对时序数据的last point查询,不再需要扫描整个集合后才能查询到最后一个数据点。
  • 优化对时序数据的排序,通过时间以及元数据字段上的聚簇索引(Clustered Index)和二级索引(Secondary Index)更高效地完成排序操作。

变更流(Change Streams)

变更流是MongoDB 3.6版本发布的用于支持CDC(Change Data Capture)的核心功能之一。变更流可以让业务更容易地实时获取数据库的变更,并基于此构建各种事件驱动型的应用或系统,不再需要依赖其他的数据同步中间件。

变更流的功能更新记录如下:
版本 更新说明
MongoDB 3.6
  • 首次发布。
  • 仅支持订阅集合(Collection)维度。
  • events类型有限。
  • 支持故障恢复。
  • 支持查看变更后的视图(Post-image)。
MongoDB 4.0
  • 支持订阅库(Database)以及集群(Cluster)维度。
  • 支持dropdropDatabaserename事件。
  • resumeToken格式从BinData变更为Hex
MongoDB 4.2
  • 支持$set$unset等更多pipeline操作符。
  • 新增startAfter选项,用于按时间点启动监听功能。
  • 修改事件的_id字段,变更流将抛出异常。
  • 移除对{readConcern: majority}的依赖。
MongoDB 5.1
  • 提升部分聚合框架下stage的执行效率。
  • 提升资源利用率。
MongoDB 5.3 支持在Chunk迁移期间过滤对孤儿文档的更新。
MongoDB 6.0
  • 支持查看变更前的视图(Pre-image)。
    说明 MongoDB 6.0之前的版本仅支持查看变更后的视图,从MongoDB 6.0版本开始,支持查看变更前后的视图。前后视图的更多信息,请参见Change Streams with Document Pre- and Post-Images
  • 支持createcreateIndexesmodifyshardCollection等DDL语句,更多信息,请参见Change Events
  • Change Events新增wallTime字段,时间戳支持多种转换和展示算子(包括$toDate$tsSecondstsIncrement)以方便业务消费。

聚合(Aggregation)

聚合功能允许用户处理多个文档并返回计算结果。通过将多个操作符组合到聚合管道中,用户可以构建出足够复杂的数据处理管道以提取数据并进行分析。MongoDB 6.0在原有聚合功能的基础上,推出了如下新特性以及优化项:
  • 分片集群实例支持$lookup$graphLookup
  • 改进$lookup对JOINS的支持。
  • 改进$graphLookup对图遍历的支持。
  • 提升$lookup性能,部分场景中性能提升可达百倍。
说明 $lookup$graphLookup的更多信息,请参见$lookup (aggregation)$graphLookup (aggregation)

查询(Query)

新增$maxN$topN$minN$bottomN$lastN$sortArray等操作符。通过操作符可以将更多的计算从业务层下沉到数据库中,使得业务层更加轻量化。
说明 操作符的更多信息,请参见Aggregation Pipeline Operators

弹性

MongoDB 6.0在原有弹性的基础上,推出了如下新特性以及优化项:
  • 将数据块(Chunk)规格的默认值从64 MB调整为128 MB,有效降低了数据迁移频率以及网络和路由层的开销。
  • 支持configureCollectionBalancing命令,此命令支持的功能如下:
    • 支持为不同的分片表设置不同的数据块规格。

      示例:数据规模特别大的分片表,将数据块规格调整到256 MB。数据规模相对较小但希望在分片上分布更均匀的分片表,将数据块规格调整到64 MB或32 MB。

    • 支持主动对集合进行碎片整理。

      相较于compact命令,configureCollectionBalancing命令提供了更好的碎片整理服务,有效降低了磁盘空间占用率。

    说明 configureCollectionBalancing命令的更多信息,请参见configureCollectionBalancing

安全性

MongoDB 6.0在原有安全性的基础上,对客户端字段级加密(CSFLE, Client-Side Field-Level Encryption)功能进行了优化。CSFLE将支持任何符合密钥管理互通协议(KMIP,Key Management Interoperability Protocol)的密钥管理提供商,即除了基于KeyFile的本地密钥管理外,MongoDB支持通过KMIP与第三方密钥管理设备集成,为用户提供更安全的保障。
说明 客户端字段级加密功能被广泛应用于敏感数据的管理中,尤其是数据迁移的场景。