MongoDB 各版本差异

MongoDB 各版本差异

存储引擎:

存储引擎 说明 适用场景
WiredTiger 基于 BTree 结构组织数据,相比 MongoDB 早期的 MMAPv1 存储引擎性能提升明显,且支持数据压缩,存储成本更低。 默认存储引擎,适用于大多数业务场景。
RocksDB(已下线) 基于 LSM tree 结构组织数据,针对性优化数据写入,将随机写入转换成了顺序写入,能保证持续高效的数据写入。 适用于大量写且少读的场景。
TerarkDB(已下线) 借助 TerarkDB 的全局压缩技术,在提高压缩率的同时,能大幅提高随机查询的性能。 适用于多读少写或批量写大量读的场景。

备注:

WiredTiger 采用了 BTree 来组织管理数据,为写操作使用文档级并发控制。因此多个客户端可以同时修改集合的不同文档。对于大多数读写操作,WiredTiger 使用乐观并发控制。WiredTiger 仅在全局数据库和集合级别使用意向锁。当存储引擎检测到两个操作之间的冲突时会发生写入冲突,导致 MongoDB 透明地重试该操作。一些全局操作(通常是涉及多个数据库的短期操作)仍需全局“实例范围”锁定。 其他一些操作(例如删除集合)仍需要独占数据库锁。

阿里 MongoDB 云数据库版本及说明:

3.4 版本在性能和安全性等方面较 3.2 版本均有不同程度的提升;4.0 版本更适用于金融等对事务有依赖且使用 NoSQL 特性的场景;4.2 版本采用二段提交方式,保证分片集群事务的 ACID 特性,极大拓展了适用的业务场景;4.4 版本针对之前版本中用户呼声最高的痛点重点进行了改进。

2.x 版本(已下线):

采用 mmapv1 存储引擎,不支持数据压缩,仅支持 DB 级别锁,在高并发时存在性能问题。

3.4 版本:

更快的主备同步:

在同步数据的同时建立所有索引(以前的版本仅建立 _id 索引)。同时在同步数据阶段 Secondary 节点不断读取新的 oplog 信息,确保 Secondary 节点的 local 数据库具备足够的存储空间来存储临时数据。

更高效的负载均衡:

3.2 及以前版本中,分片集群的负载均衡由 Mongos 节点负责,多个Mongos 节点会抢一个分布式锁,由抢锁成功的 Mongos 节点执行负载均衡任务,在 Shard 节点间迁移块;而在 3.4 版本中,负载均衡由 ConfigServer 节点中的 Primary 节点负责,负载均衡的并发度和效率均有大幅提升。

更丰富的 aggregation 操作:

在 3.4 版本增加了大量的 aggregation 操作符,可支持更强的数据分析能力。例如 bucket 能便捷地对数据进行分类;$grahpLookup 相较于 3.2 版本的 $lookup 能支持更复杂的关系运算;$addFields 使得文档操作更丰富(例如将某些字段求和存储为新的字段)。

支持 Sharding Zones:

分片集群里引入了 Zone 的概念,主要取代现在的 tag-aware sharding机制,能将某些数据分配到指定的一个或多个 Shard 节点中,该特性极大的方便 sharding cluster 的跨机房部署。

支持 Collation:

在之前的版本里,文档里存储的字符串不论是中英文还是大小写,一律按字节来对比;引入 Collation 后,支持对字符串的内容进行解读,可以按使用的 locale 进行对比,也支持在对比时忽略大小写。

支持只读视图(Read-only views):

在 3.4 中增加了对只读视图的支持,可以将集合中满足某个查询条件的数据虚拟成一个特殊的集合,用户可以在特殊的集合上做进一步的查询操作。

4.0 版本:

跨文档事务支持:

首个支持跨文档事务的 NoSQL 云数据库,将文档模型的速度,灵活性、功能与 ACID 保证相结合。

迁移速度提升40%:

并发的读取和写入,使得新增的 Shard 节点能更快地完成数据迁移以承载业务压力。

读性能大幅扩展:

借助事务特性,Secondary 节点不再因为同步日志而阻塞读取请求。全体系版本支持多节点扩展功能,可大幅提升业务读取能力。

4.2 版本:

分布式事务:

采用二段提交方式,保证分片集群事务的 ACID 特性,极大拓展了MongoDB 的业务场景,实现从 NoSQL 到 NewSQL 的飞跃。

可重试读:

增加可重试读功能,提供弱网环境下自动重试能力,降低业务端的逻辑复杂性,保证用户业务的连续性。

通配符索引:

对于非确定字段,支持创建通配符索引覆盖一个文档下的多个特征字段,管理方便且使用灵活。

字段级加密:

驱动层面支持字段级加密,可以针对特定的敏感信息(例如账号、密码、价格、手机号等)单独加密。避免全库加密,提升业务灵活性和安全性。

物化视图:

通过最新的物化视图可以缓存计算结果,避免重复计算提升运行效率,减少逻辑复杂度。

4.4 版本:

Hidden Indexes:

隐藏现有的索引,保证该索引在后续的查询中不会被使用,用来观察目标低效率索引的删除是否会导致业务性能抖动,如不造成影响即可放心删除该低效率索引。

Refinable Shard Keys:

增加一个或多个 Suffix Field 来改善现有的文档在 Chunk 上的分布问题,避免所有访问集中在某个单一分片上,分散服务器的压力。

Compound Hashed Shard Keys:

支持在复合索引中指定单个哈希字段,在极大程度上简化业务逻辑的复杂性。

Hedged Reads:

在分片集群实例下,支持将一个读请求同时发送给某个分片中的两个副本集成员,并选择响应最快的返回结果来恢复客户端,以实现降低请求延迟的目的。

Streaming Replication:

主库 Oplog 主动流向备库,相比之前版本的备库轮询方式,节省了近一半的往返时间,提升了主备复制的性能。

Simultaneous Indexing:

主库与备库的索引创建操作同步进行,大幅减少主备库在索引创建过程中产生的延迟,保证备库能及时访问到最新的数据。

Mirrored Reads:

主节点会按一定的比例把读流量复制到备库上执行,保证从节点承载一定的读流量,缓解业务的访问延迟。

Resumable Initial Sync:

在主备库全量同步过程中,提供断点续传功能,避免因网络断连而导致全量同步工作从头进行。

Time-Based Oplog Retention:

支持自定义指定 Oplog 的保留时长,避免主库 Oplog 被清理触发全量同步。

Union:

新增 $unionWith stage 用于实现类似于 SQL 的 union all 功能,增强了 MongoDB 的查询能力。

Custom Aggregation Expressions:

新增 $accumulator 和 $function 用来实现自定义的 Aggregation Expression,完善接口统一性和用户体验。

备注:

发布于 2023-06-26 07:34 ・IP 属地陕西