本文介绍云数据库 MongoDB 版7.0版本推出的新特性和优化项。
速览
本文将从以下方面介绍云数据库 MongoDB 版 7.0版本:
新特性
优化项
MongoDB 7.0的更多新特性以及优化项,请参见MongoDB 7.0 release-notes。
可查询加密(Queryable Encryption)
在MongoDB 6.0版本中,可查询加密功能为预览(Preview)版本,该功能在MongoDB 7.0版本中正式发布(Generally Available),更多信息请参见Queryable Encryption。
支持分片元数据一致性校验
MongoDB 7.0版本中新增了checkMetadataConsistency命令,以检查不同分片中元数据不一致的情况,示例如下。
示例1:
// Command
db.runCommand( {
checkMetadataConsistency: 1,
checkIndexes: true
} )
示例2:
//mongosh
db.checkMetadataConsistency()
db.collection.checkMetadataConsistency()
sh.checkMetadataConsistency()
您可以在日常运维中增加该巡检项,尽早发现可能不一致的风险。更多信息请参见checkMetadataConsistency。
支持采样查询与分析分片键(analyzeShardKey)
支持基于采样查询(Sampled queries)的结果来分析集合的分片键是否合理,可以帮助您更好地设计Schema以及分片键、更合理使用分片架构。核心命令analyzeShardKey的语法如下:
db.adminCommand(
{
analyzeShardKey: <string>,
key: <shardKey>,
keyCharacteristics: <bool>,
readWriteDistribution: <bool>,
sampleRate: <double>,
sampleSize: <int>
}
)
尽管该命令并不会阻塞集合上的读写操作,但为了降低对业务的影响,建议配套使用secondary或secondaryPreferred模式的Read preference执行。mongos默认为secondaryPreferred模式。
更多信息请参考analyShardKey与configureQueryAnalyzer。
自动合并(AutoMerger)
MongoDB 7.0为自动均衡器(Balancer)实现了一个新的自动合并器(AutoMerger),当数据或索引分布不均衡、存在过多分片或进行数据迁移时,自动合并器会合并Chunks,以均衡数据并提高性能。MongoDB 7.0默认开启该功能,您也可以通过Balancer活动窗口的控制该功能。
之前版本引入用于单个集合数据均衡的configureCollectionBalancing命令也支持了AutoMerge:
db.adminCommand(
{
configureCollectionBalancing: "<db>.<collection>",
chunkSize: <num>,
defragmentCollection: <bool>,
enableAutoMerger: <bool>
}
)
除此之外,您也可以通过mergeAllChunksOnShard命令将一个分片上所有可合并的Chunk(或Range)进行手动合并:
db.adminCommand( { mergeAllChunksOnShard: "db.coll", shard: "Shard0" } )
分片(Sharding)
除了上文提到过的AutoMerger以外,还有以下优化项:
支持通过参数
rangeDeleterHighPriority
设置删除孤儿文档是否具备更高的优先级。通常业务的删除往往具有更高的优先级, 所以该参数默认为false。不再支持用于记录目录缓存刷新行为的
operationsBlockedByRefresh
监控指标,原因为基于mongos每个利用集合路由信息的操作都会增加该计数器的次数。新增关于Resharding的监控指标。
addShard命令不再支持
maxSize
选项。调整
config.settings
集合的chunksize时,增加了合理性校验,将值限制在[1,1024]。MongoDB在6.0.3版本后对Balancer策略进行若干调整:
Balancer不再依据分片间Chunks数量的差异,而是依据分片间数据量的差异进行均衡。
将Chunk的逻辑概念转为Range。
自动分裂(auto-splitting)只会在跨分片移动时发生。
安全性
支持KMIP 1.0和1.1。
支持OpenSSL 3.0以及OpenSSL FIPS。
聚合(Aggregation)
新增了以下操作符,支持位计算和百分位数:
字段名 | 描述 |
| 返回Int或Long类型数值的按位与运算的结果。 |
| 返回Int或Long类型数值的按位取反运算结果。 |
| 返回Int或Long类型数值的按位或运算的结果。 |
| 返回Int或Long类型数值的按位异或运算的结果。 |
| 返回近似中位数,相当于50百分位数。 |
| 返回指定的百分位数。 |
时序集合(Time-Series Collection)
移除了之前版本对于时序集合DELETE命令的操作限制。除了不能在多文档事务中使用相关删除命令外,当前DELETE命令再无其他限制。
COMPACT命令支持时序集合。
其他优化
慢日志新增了
catalogCacheIndexLookupDurationMillis
等字段,更多信息请参见log messages for slow queries。支持动态调整存储引擎事务并发度,之前默认是128,从MongoDB 7.0起,MongoDB会自动动态调整该并发度,更多信息请参见Concurrent Storage Engine Transactions。
currentOp新增了关于query sampling的全新字段,更多信息请参见currentop-metrics。
支持复合通配符索引,更多信息请参见Compound Wildcard Indexes。
新增
$changeStreamSplitLargeEvent
算子支持对超过16 MB的超大变更事件(change events)进行切分,更多信息请参见Large Change Stream Events。优化基于Slot查询执行引擎的性能。
新增Chunk迁移的指标,更多信息请参见New Sharding Statistics for Chunk Migrations。
支持通过
USER_ROLES
系统变量来获取当前User的角色。新增
analyzeShardKey
、balancer
、queryAnalyzers
相关的全局参数。serverStatus的返回结果新增更多字段,更多信息请参见serverStatus Output Change。