MongoDB 从4.4到7.0各个版本特性概览

MongoDB 从4.4到7.0各个版本特性概览

速览

本文将从以下方面介绍数据库 MongoDB 4.4、5.0、6.0、7.0版本:

MongoDB4.4 新特性

隐藏索引(Hidden Indexes)

重定义分片键(Refinable Shard Keys)

复合哈希分片键(Compound Hashed Shard Keys)

对冲读(Hedged Reads)

同步建索引(Simultaneous Indexing)

复制读请求(Mirrored Reads)

基于时间保留Oplog(Time-Based Oplog Retention)

MongoDB5.0 新特性

原生时间序列平台

在线数据重新分片

Write Concern默认Majority级别

连接管理优化

长时间运行的快照查询

新版MongoDB Shell

可恢复的索引创建任务

MongoDB6.0 新特性

可查询加密(Queryable Encryption)

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

时序集合(Time Series Collection)

变更流(Change Streams)

聚合(Aggregation)

查询(Query)

弹性

安全性

MongoDB7.0 新特性

支持分片元数据一致性校验

支持采样查询与分析分片键(analyzeShardKey)

自动合并(AutoMerger)

MongoDB7.0 优化项

其他优化

安全性

聚合(Aggregation)

时序集合(Time-Series Collection)

分片(Sharding)

引言

在数据库技术日新月异的今天,MongoDB作为领先的NoSQL数据库之一,持续地推出新版本以满足不断变化的企业需求和技术挑战。从MongoDB 4.4至7.0,每一版都融入了创新特性,旨在提升性能、扩展性、安全性和易用性,同时也反映了行业趋势和用户反馈。本文旨在全面剖析这些版本中的关键新特性,不仅是为了记录技术演进的历史,更是为了赋能数据库管理员、开发者和架构师,使他们能够充分理解并利用这些新功能,从而优化数据管理和应用性能。

MongoDB 4.4版本新特性

隐藏索引

MongoDB 4.4版本中新增了隐藏索引,众所周知数据库维护太多的索引会导致写性能下降,但是往往业务上的复杂性导致了运维人员不敢轻易去删除一个潜在的低效率索引,担心误删除会带来业务性能的抖动,而重建索引的代价也非常大。

为了解决上述问题。该功能支持通过collMod命令隐藏现有的索引,保证该索引在后续的查询中不会被使用。在观察一段时间后,确定业务没有异常即可以放心删除该索引。

db.runCommand( {

collMod: 'testcoll',

index: {

keyPattern: 'key_1',

hidden: false

}

} )

重定义分片键

MongoDB4.4版本中,您可以通过refineCollectionShardKey命令给现有的Shard Key增加一个或多个Suffix Field来改善现有的文档在Chunk上的分布问题。例如在上面描述的订单业务场景中,通过refineCollectionShardKey命令把Shard key更改为{customer_id:1, order_id:1},即可避免单一分片上的访问热点问题。

并且,refineCollectionShardKey命令的性能开销非常低,仅更改Config Server节点上的元数据,不需要任何形式的数据迁移,数据的打散仍然在后续正常的Chunk自动分裂和迁移的流程中逐步进行。此外,Shard Key需要有对应的Index来支撑,因此refineCollectionShardKey命令要求提前创建新Shard Key所对应的Index。

由于并不是所有的文档都存在新增的Suffix Field,因此在4.4版本中隐式支持了Missing Shard Key功能,即新插入的文档可以不包含指定的Shard Key Field。但是由于很容易产生Jumbo Chunk,因此并不建议使用。

db.adminCommand( {

refineCollectionShardKey: "test.orders",

key: { customer_id: 1, order_id: 1 }

} )

复合哈希分片键

在最新的4.4版本中加入了复合哈希索引,即您可以在复合索引中指定单个哈希字段,位置不限,可以作为前缀,也可以作为后缀,进而也就提供了对复合哈希片键的支持。

sh.shardCollection(

"examples.compoundHashedCollection",

{ "region_id" : 1, "city_id": 1, field1" : "hashed" }

)

sh.shardCollection(

"examples.compoundHashedCollection",

{ "_id" : "hashed", "fieldA" : 1}

)

对冲读

页面的响应

相关数据