MongoDB有必要升级新版本吗?

请添加图片描述

如今MongoDB已经发布了7.0版本,对于还在使用MongoDB低版本的用户来说,是否有必要升级?

为了促进MongoDB开源社区的发展,我们不断发布新版本,为用户提供更多优势特性,例如更快的性能、更好的安全性、更多的功能等。同时,MongoDB开源社区也陆续停止对低版本MongoDB的支持和维护,例如MongoDB 4.4版本已于2024年2月正式EOL,更多信息可以查看官网的Lifecycle Schedules。

在这里插入图片描述

如果你使用的是阿里云版数据库 MongoDB 版,则可以获得相对更加持久的支持和维护。

点击查看阿里云数据库MongoDB的生命周期策略

如今MongoDB已经发布了7.0版本,那么对于还在使用MongoDB低版本的用户来说,是否有必要升级?本文将帮助您更清晰地了解这个问题。

旧版本存在的风险和隐患

MongoDB和阿里云自2019年起保持着紧密的战略合作关系,双方携手为中国乃至全球用户提供卓越的数据库服务,以下风险和隐患是阿里云数据库 MongoDB 版团队根据长期的云数据库运维经验整理得出。

分片实例的孤立文档导致在实例间数据迁移时校验不一致

受影响的版本及架构:4.2及以下版本的分片集群实例。

简要描述:在分片集群实例中,若未及时清理孤立文档,可能会导致在迁移数据时出现数据不一致的问题。

推荐版本:4.4及以上版本。

推荐理由:当一个Chunk成功迁移到新的分片后,源分片中的该Chunk会延期删除。孤立文档通常是因为迁移过程中断而产生的。孤立文档并不会影响mongos节点上的正常业务请求,因为请求会经过配置服务器(ConfigServer)的路由数据检查。

从4.4版本开始,MongoDB实现了能够自恢复的Chunk迁移和孤立文档清理。就算节点出现异常,MongoDB也会自动恢复之前中断的迁移过程。用户不再需要主动执行命令来清理孤立文档,也可以通过执行该命令来确认后台线程是否已经成功清理。

compact阻塞业务读写

受影响的版本及架构:4.2及以下版本实例。

简要描述:需要回收磁盘碎片的场景下,低版本实例执行compact命令会阻塞业务读写,而且compact操作不能被中断,只能重启,从而对业务造成影响。

推荐版本:4.4及以上版本。

推荐理由:从4.4版本开始,优化了compact的加锁行为,不再会阻塞业务正常的读写(CURD)操作,只会阻塞一些DDL操作(例如等)。业务侧不再需要等到维护窗口期再来执行compact命令。

更多信息请参考回收磁盘碎片以提升磁盘利用率和compact Blocking。

如果你需要回收磁盘碎片,阿里云数据库 MongoDB版提供了空间分析功能。

compact导致节点进入RECOVERING异常状态

受影响的版本及架构:4.2及以下版本实例(小版本低于4.2.18版本)。

简要描述:需要回收磁盘碎片的场景下,低版本实例执行compact命令会导致节点临时进入RECOVERING状态,如果持续时间过长,该节点会被阿里云MongoDB侧实例探活组件认定为节点不健康从而触发相应的重搭操作。

推荐版本:4.4及以上版本。

推荐理由:从4.2.18版本开始,在mongod节点上执行compact命令将不再导致节点进入异常的RECOVERING状态,从而避免了节点不可用和上述非预期的重搭任务流问题。

更多信息请参考回收磁盘碎片以提升磁盘利用率和compact RECOVERING。

如果你需要回收磁盘碎片,阿里云数据库 MongoDB 版提供了空间分析功能。

hidden节点物理备份带来的空间膨胀问题

受影响的版本及架构:4.2及以下版本的本地盘版实例。

简要描述:受限于物理备份的机制,备份上传期间磁盘文件大小依然在增长,长期积累会导致hidden节点磁盘空间膨胀。当发生节点故障或切换节点时,可能会触发磁盘使用率的误告警。

推荐版本:5.0及以上版本的云盘版实例。

推荐理由:云盘版架构实例的全量备份是基于物理备份结合云盘快照的方式。从原理上缩短了需要在WiredTiger引擎侧维持备份检查点(Backup checkpoint)的时间,有效解决了hidden节点因备份而导致空间膨胀的问题。

此外,云盘版的快照备份以及基于快照备份的恢复具备更好的性能。当副本集实例的数据规模达到2 TB以上时,本地盘版实例的物理备份耗时久、失败率高、期间无法执行其他运维操作等问题也能得到解决。

分片实例重建同名库表时遇到残留路由数据的问题

受影响的版本及架构:4.4及以下版本的分片集群实例。

简要描述:分片集群实例上执行命令后又重建同名库表时,由于ConfigServer节点上路由数据有残留,导致实例无法完整正常读写操作。

推荐版本:5.0及以上版本。

推荐理由:从5.0版本开始,MongoDB优化了命令对于路由数据的处理,不再会导致路由数据的残留。在4.2及以下版本中,不仅需用户重复执行命令,还需要额外在所有mongos上通过命令刷新路由信息,否则就会有残留数据导致问题。

更多信息请参考dropDatabase和flushRouterConfig。

Balancer均衡速度慢横向扩缩容性能差业务高峰期无法横向扩展

受影响的版本及架构:5.0以下版本实例。

简要描述:Balancer迁移速度无法提升,导致需要横向扩展的场景无法快速均衡数据,热点无法快速缓解,影响业务。

推荐版本:5.0及以上版本。

推荐理由:从5.0版本开始,MongoDB新增了和两个可调整参数,用于调整Balancer的迁移并发度和性能。

更多信息请参考chunkMigrationConcurrency和balancerMigrationsThrottlingMs。

如果你使用的数据库实例已经是5.0版本却不支持这两个参数,可以通过升级数据库小版本解决该问题。

分片实例数据不均衡而导致的负载不均

受影响的版本及架构:5.0及以下版本实例(小版本低于6.0.3版本)。

简要描述:Balancer按照分片间的Chunks数量来判断是否均衡,在存在Jumbo Chunk、Empty Chunks、热点数据的情况下会导致分片间的数据分布不均以及相应的负载不均问题。

推荐版本:6.0及以上版本。

推荐理由:从6.0.3版本开始,Balancer会根据分片间数据量的差异均衡数据,而不是根据分片间Chunks数量的差异来均衡数据。从而有效解决了之前版本因为Jumbo Chunk、Empty Chunk等原因而导致数据、负载不均匀的问题。

更多信息请参考MongoDB 6.0.3版本Balancer改动。

点击参考其他内核相关缺陷

新版本的新特性及优化

MongoDB致力帮助开发人员简化操作、提高开发效率和增强安全性,不断丰富产品功能,提升产品性能。以下我们梳理了MongoDB 5.0、6.0和7.0版本的新特性及优化:

MongoDB 5.0

时序集合:从5.0版本开始,MongoDB可以更好地处理时序数据,适配车联网、物联网等广泛场景。

查询长时间运行快照:从5.0版本开始,MongoDB提供了读取历史快照的能力。阿里云MongoDB基于此能力扩展了按Key闪回的高效恢复手段,该能力正在免费公测,欢迎试用体验。

版本化API:从5.0版本开始,MongoDB正式提供了版本化API的能力,通过将应用程序生命周期和数据库生命周期解耦,提供了完备的兼容性保证。用户无需担心升级数据库版本而带来的兼容性风险了。

MongoDB 6.0

changeStream若干优化:从6.0版本开始,ChangeStream包含了诸多优化,包括支持查看变更前的视图;提升执行效率和资源利用率;支持过滤孤立文档更新;支持更多DDL的变更事件等。使得MongoDB对CDC场景的支持更加完善。

join查询优化:从6.0版本开始,MongoDB分片实例也开始支持和算子来进行Join查询,并且提升了相关算子的性能。

分片实例支持自动整理分片集合的磁盘碎片空间:从6.0版本开始,MongoDB分片实例支持通过命令为不同的分片集合设置不同的chunkSize并支持自动碎片整理。大幅简化了之前需要通过compact命令来整理磁盘碎片空间的运维动作。

时序集合若干优化:从6.0开始,时序集合包含了诸多优化,包括支持 分片;支持柱状压缩来改善存储空间占用;引入了二级和复合索引,改善读性能;引入针对时空数据的地理位置索引;时序数据排序优化等。使得时序集合能够应用在更多时序场景中并且性能得到了很大提升。

compact性能大幅提升:阿里云MongoDB在6.0版本的基础上,在WT引擎层对compact命令进行了全方位优化,大幅提升了compact的性能,同时也降低了compact执行期间受eviction压力而失败的概率。

MongoDB 7.0

分片键分析:从7.0版本开始,支持基于采样查询(Sampled queries)的结果来分析集合的分片键是否合理,可以帮助您更好地设计Schema以及分片键、更合理使用分片架构。

可查询加密(Queryable Encryption):从7.0版本开始,可查询加密使得敏感数据在其整个生命周期中(传输中、静止中、使用中、日志中和备份中)都是加密的,并且只在客户端解密。提供了更强大且全面的数据安全保障,有效避免被“拖库”的数据泄露风险。

元数据一致性检查:从7.0版本开始,在数据库维护期或者异常(OOM或故障切换等)结束后能够主动发现潜在的元数据/索引不一致风险。

ChangeStream支持超大变更事件:从7.0版本开始,新增了算子支持对超过16 MB的超大变更事件(change events)进行切分,解决了之前版本中changeStream无法支持超大变更事件的问题。

wt引擎动态限流:从7.0版本开始,MongoDB会自动动态调整WT存储引擎的事务并发度(之前默认是128)来实现限流的效果。缓解了之前版本中数据库异常后因请求堆积而导致雪崩的问题。

点击查看更多MongoDB 5.0、6.0、7.0版本新特性介绍

如何轻松升级数据库版本

在升级数据库版本时,通常需要经过环境评估、测试、制定回滚计划并确定升级步骤,可以参考数据库升级版本的帮助文档:

点击查看数据库升级版本帮助文档

如果你在 MongoDB 升级时需要协助,阿里云的专家还将为您提供升级规划建议,识别和缓解升级时可能出现的障碍、不兼容问题和潜在的性能问题。

同类文章推荐:

《阿里云:为什么要升级到MongoDB的新版本》

《mongodb 4 有必要升级高版本吗》

《如何规划 MongoDB 升级》

《7 Big Reasons to Upgrade to MongoDB 6.0》


👉点击访问 MongoDB中文官网
👉立即免费试用 MongoDB Atlas
☎️需要支持?欢迎联系我们:400-8662988
✅欢迎关注MongoDB微信订阅号(MongoDB-China),及时获取最新资讯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/660042.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶 | 仿真测试-HiL测试全解析

1.HiL 的定义 HiL(Hardware-in-the-Loop)硬件在环是计算机专业术语,也即是硬件在回路。通过使用 “硬件在环”(HiL) ,可以显著降低开发时间和成本。在过去,开发电气机械元件或系统时,使用计算机仿真和实际的实验就已经…

金蝶云星空与阿里宜搭对接集成其他往来单位连通新增表单实例(basic-KY其他往来单位)

金蝶云星空与阿里宜搭对接集成其他往来单位连通新增表单实例(basic-KY其他往来单位) 来源系统:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人…

Multi-Head Multi-Loss Model Calibration论文速读

文章目录 Multi-Head Multi-Loss Model Calibration摘要方法Multi-Head Ensemble Diversity 实验结果 Multi-Head Multi-Loss Model Calibration 摘要 当然,我会按照你的要求逐步列出: 背景: 提供有意义的不确定性估计对于机器学习模型在…

ORACLE 11G RAC 访问SQLSERVER

平时都是单机,RAC有点不一样,其实也一样。 目录 1.操作环境信息 2.安装GATEWAY 3.配置实例信息 4.配置监听 5.配置网络别名 6.创建到SQLSERVER的DBLINK 7.测试DBLINK有效性 1.操作环境信息 HIS PACS 数据库版本 ORACLE 11.2.0.4 RAC MS SQLSE…

Spring AOP详解,简单Demo

目录 一、Spring AOP 是什么? 二、学习AOP 有什么作用? 三、AOP 的组成 四、 Spring AOP 简单demo 一、Spring AOP 是什么? Spring AOP(Aspect-Oriented Programming in Spring)是Spring框架中的一个重要组件&…

Go 学习笔记

Go 学习相关笔记 Go 官方的教学文档顺序不怎么友好,这里根据我自己的学习曲线来记录文档的查看顺序 基础知识 文档预备 新手先要看 Go 的模块管理介绍,这样才知道基础 Go 怎么导入外部包和进行本地的包管理 https://go.dev/doc/modules/managing-dep…

C语言贪吃蛇项目

今天给大家带来一款简单的贪吃蛇游戏,一起随我来看看吧 游戏效果: 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能:(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分…

Linux-进程间通信(进程间通信介绍、匿名管道原理及代码使用、命名管道原理及代码使用)

一、进程通信介绍 1.1进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某…

【Android】SharedPreferences阻塞问题深度分析

前言 Android中SharedPreferences已经广为诟病,它虽然是Android SDK中自带的数据存储API,但是因为存在设计上的缺陷,在处理大量数据时很容易导致UI线程阻塞或者ANR,Android官方最终在Jetpack库中提供了DataStore解决方案&#xf…

spring的高阶使用技巧1——ApplicationListener注册监听器的使用

Spring中的监听器,高阶开发工作者应该都耳熟能详。在 Spring 框架中,这个接口允许开发者注册监听器来监听应用程序中发布的事件。Spring的事件处理机制提供了一种观察者模式的实现,允许应用程序组件之间进行松耦合的通信。 更详细的介绍和使…

Kubernetes 声明式语言 YAML

什么是 YAML YAML(YAML Ain’t Markup Language)是一种可读的数据序列化语言,通常用于配置文件、数据序列化和交换格式。YAML 的设计目标是易读易写,并且能够映射到动态语言中的数据结构 YA加粗样式ML 是 JSON 的超集&#xff0…

HFSS19 官方案例教程W03 - SMA接头与微带分支

SMA接头与微带分支 1►射频接头简介 连接器是电子测量中必不可少的重要部件,无论测试仪表还是DUT,无论线缆还是附件,处处都有形形色色的不同连接器的身影。对于射频工程师而言,经常用到的连接器有N型、BNC型、SMA型、3.5 mm、2.92 mm、2.4 mm、1.85 mm、1 mm这几种 (上…