MongoDB 5.0新特性概览

简介: MongoDB 5.0标志着一个新的发布周期的到来,以更快地交付新特性给到用户。版本化API与在线重新分片相结合,使用户不必担心未来的数据库升级以及业务变化问题;本地原生时间序列数据平台也使MongoDB能支持更广泛的工作负载和业务场景;新的MongoDB Shell能够提升用户体验等均为MongoDB 5.0的功能。本文主要介绍MongoDB 5.0的新特性。

MongoDB 5.0标志着一个新的发布周期的到来,以更快地交付新特性给到用户。版本化API与在线重新分片相结合,使用户不必担心未来的数据库升级以及业务变化问题;本地原生时间序列数据平台也使MongoDB能支持更广泛的工作负载和业务场景;新的MongoDB Shell能够提升用户体验等均为MongoDB 5.0的功能。本文主要介绍MongoDB 5.0的新特性。

原生时间序列平台

MongoDB 5.0通过原生支持整个时间序列数据的生命周期(从采集、存储、查询、实时分析和可视化,到在线归档或随着数据老化自动失效),使构建和运行时间序列应用程序的速度更快、成本更低。随着MongoDB 5.0的发布,MongoDB扩展了通用的应用数据平台,使开发能够更容易地处理时间序列数据,进一步扩展其在物联网、金融分析、物流等方面的应用场景。

MongoDB的时间序列集合以高度优化和压缩的格式自动存储时间序列数据,减少了存储大小和I/O,以实现更好的性能和更大的规模。同时也缩短了开发周期,使您能够快速建立一个针对时间序列应用的性能和分析需求而调优的模型。

创建时间序列数据集合的命令示例:

db.createCollection("collection_name",{ timeseries: { timeField: "timestamp" } } )

MongoDB可以无缝地调整采集频率,并根据动态生成的时间分区自动处理无序的测量值。最新发布的MongoDB Connector for Apache Kafka实现了在本地支持时间序列,您可以直接从Kafka主题消息中自动创建时间序列集合,使您在收集数据的同时根据需要对数据进行处理和聚合,然后写入到MongoDB的时间序列集合。

时间序列集合自动创建一个按时间排序的数据聚集索引,降低查询数据的延迟。MongoDB查询API还扩展了窗口函数,您可以运行分析性查询(例如移动平均数和累积总和)。在关系型数据库系统中,这些通常被称为SQL分析函数,并支持以行为单位定义的窗口(即三行移动平均线)。MongoDB更进一步,还增加了指数移动平均线、导数和积分等强大的时间序列函数,支持您以时间为单位定义窗口(例如15分钟的移动平均线)。窗口函数可用于查询MongoDB的时间序列和常规集合,为多种应用类型提供了新的分析方式。另外,MongoDB 5.0也提供了新的时间运算符,包括$dateAdd$dateSubstract$dateDiff$dateTrunc,使您可以通过自定义的时间窗口对数据进行汇总和查询。

您可以将MongoDB的时间序列数据与企业的其他数据相结合。时间序列集合可以与同一个数据库中的常规MongoDB集合放在一起,您不必选择一个专门的时间序列数据库(它不能为任何其他类型的应用提供服务),也不需要复杂的集成来混合时间序列和其他数据。MongoDB通过提供一个统一的平台,让您建立高性能和高效的时间序列应用的同时,也为其他用例或工作负载提供支持,从而消除了整合和运行多个不同数据库的成本和复杂性。

在线数据重新分片

数据库版本特点实现方法
MongoDB 5.0以前重新分片过程复杂且需要手动分片。
  • 方法一:先dump整个集合,然后用新的分片键把数据库重新加载到一个新的集合中。由于这是一个需要离线处理的过程,因此您的应用程序在重新加载完成之前需要中断停服较长时间。例如:在一个三分片的集群上dump和重新加载一个10 TB以上的集合可能需要几天时间。
  • 方法二:新建一个分片集群并重新设定集合的分片键,然后通过定制迁移方式,将旧分片集群中需要重新分片的集合,按新的分片键写入到新的分片集群中。
    • 该过程中需要您自行处理查询路由和迁移逻辑、不断检查迁移进度,以确保所有数据迁移成功。
    • 定制迁移是高度复杂的、劳动密集型的、有风险的任务,而且耗时很长。例如:某个MongoDB用户花了三个月才完成100亿个document的迁移。
MongoDB 5.0开始
  • 运行reshardCollection命令即可启动重新分片。
  • 重新分片的过程高效。并不是简单地重新平衡数据,而是在后台将所有当前集合的数据复制并重新写入新集合,同时与应用程序新的写入保持同步。
  • 重新分片是完全自动化的。将重新分片花费的时间从几周或几个月压缩到几分钟或几小时,避免了冗长繁杂的手动数据迁移。
  • 通过使用在线重新分片,可以方便地在开发或测试环境中评估不同分片键的效果,也可以在您需要时修改分片键。
您可以在业务运行(数据不断增长)的情况下,按需改变集合的分片键(Shard key),而不需要数据库停机或在数据集合中进行复杂的迁移。您只需要在MongoDB Shell中运行reshardCollection命令,选择您需要重新分片的数据库和集合,指定新的分片键即可。

reshardCollection: "<database>.<collection>", key: <shardkey>

说明

  • <database>:需要重新分片的数据库名称。
  • <collection>:需要重新分片的集合名称。
  • <shardkey>:分片键的名称。
  • 当您调用reshardCollection命令时,MongoDB会克隆现有集合,然后将现有集合中所有oplog应用到新集合中,当所有oplog被使用后,MongoDB会自动切换到新集合,并在后台删除旧集合。

版本化API

  • 应用程序兼容性从MongoDB 5.0开始,版本化API定义了应用程序最常用的一组命令和参数(无论是数据库在年度重大发布还是季度快速发布期间,这些命令均不会改变)。通过将应用程序生命周期和数据库生命周期解耦,您可以将驱动程序固定在MongoDB API的特定版本上,即使数据库发生升级和改进,您的应用程序将可以继续运行数年而不需要修改代码。
  • 灵活地添加新功能和改进内容版本化API支持MongoDB灵活地在每个版本中为数据库添加新的功能和改进内容(以新版本兼容早期版本的方式)。当您需要改变API时,可以增加新版本的API,并与现有版本化的API在同一台服务器上同时运行。随着MongoDB版本发布的加速,版本化API能够使您更快、更轻松地使用到MongoDB最新版本的功能特性。

Write Concern默认Majority级别

从MongoDB 5.0开始,Write Concern默认级别为majority,仅当写入操作被应用到Primary节点(主节点)且被持久化到大多数副本节点的日志中的时候,才会提交并返回成功,“开箱即用”地提供了更强的数据可靠性保障。

说明 Write Concern是完全可调的,您可以自定义配置Write Concern,以平衡应用程序对数据库性能和数据持久性的要求。

连接管理优化

默认情况下,一个客户端连接对应后端MongoDB服务器上的一个线程(net.serviceExecutor配置为synchronous)。创建、切换和销毁线程都是消耗较大的操作,当连接数过多时,线程会占用MongoDB服务器较多的资源。

连接数较多或创建连接失控的情况称为“连接风暴”,产生该情况的原因可能是多方面的,且经常是在服务已经受到影响的情况下发生。

针对这些情况,MongoDB 5.0采取了以下措施:

  • 限制在任何时候驱动程序尝试创建的连接数量,以简单有效的方式防止数据库服务器过载。
  • 减少驱动程序监控连接池时的检查频率,给无响应或过载的服务器节点一个缓冲和恢复的机会。
  • 驱动程序将工作负载导向具有最健康连接池的更快的服务器,而不是从可用的服务器中随机选择。

以上措施,加上之前版本在mongos查询路由层的改进,进一步提升了MongoDB承受高并发负载的能力。

长时间运行的快照查询

长时间运行的快照查询(Long-Running Snapshot Queries)增加了应用程序的通用性和弹性。您可以通过该功能运行默认时间为5分钟的查询(或将其调整为自定义持续时间),同时保持与实时事务性数据库一致的快照隔离,也可以在Secondary节点(从节点)上进行快照查询,从而在单个集群中运行不同的工作负载,并将其扩展到不同的分片上。

MongoDB通过底层存储引擎中一个名为Durable history的项目实现了长期运行的快照查询,该项目早在MongoDB 4.4中就已实现。Durable history将存储自查询开始以来所有变化的字段值的快照。通过使用Durable history,查询可以保持快照隔离,即使在数据发生变化的情况下,Durable history也有助于降低存储引擎的缓存压力,使得业务可以在高写入负载的场景下实现更高的查询吞吐量。

新版MongoDB Shell

为了提供更好的用户体验,MongoDB 5.0从头开始重新设计了MongoDB Shell(mongosh),以提供一个更现代化的命令行体验,以及增强可用性的功能和强大的脚本环境。新版MongoDB Shell已经成为MongoDB平台的默认shell。新版MongoDB Shell引入了语法高亮、智能自动完成、上下文帮助和有用的错误信息,为您创造一个直观、互动的体验。

  • 增强的用户体验
  • 更容易编写查询和聚合,更容易阅读结果。新版MongoDB Shell支持语法高亮功能,方便您区分字段、值和数据类型,以避免语法错误。如果仍然发生错误,新版MongoDB Shell也可以指出问题点并告诉您解决方法。
  • 更快输入查询和命令。新版MongoDB Shell支持智能自动完成功能,即新版MongoDB Shell可以根据您连接的MongoDB的版本,为方法、命令、MQL表达式等给出自动完成选项的提示。
    示例:当您不记得某个命令的语法时,您可以直接从MongoDB Shell中快速查找该命令的语法。

p328202.png

  • 高级脚本环境新版MongoDB Shell的脚本环境建立在Node.js REPL(交互式解释器)之上,您在脚本中可以使用所有的Node.js API和NPM的任何模块。您也可以从文件系统中加载和运行脚本(和旧版MongoDB Shell一样,您可以继续使用Load和Eval执行脚本)。
  • 扩展性和插件新版MongoDB Shell具有易扩展性,使您能够使用MongoDB的所有功能以提高生产力。
    在新版MongoDB Shell中,允许安装Snippets插件。Snippets可以自动加载至MongoDB Shell中,且Snippets可以使用所有的Node.js API和NPM包。MongoDB也维护了一个Snippets仓库,提供了一些有趣的功能(例如分析指定集合模式的插件),您也可以自由地配置MongoDB Shell使用您选择的插件。

    说明 插件当前仅为MongoDB Shell的一个实验性功能。

PyMongoArrow与数据科学

随着新的PyMongoArrow API的发布,您可以在MongoDB上使用Python运行复杂的分析和机器学习。PyMongoArrow可以快速将简单的MongoDB查询结果转换为流行的数据格式(例如Pandas数据框架和NumPy数组),帮助您简化数据科学工作流程。

Schema验证改进

Schema验证(模式验证)是对MongoDB进行数据应用管理控制的一种方式。MongoDB 5.0中,模式验证变得更加简单和友好,当操作验证失败时都会产生描述性的错误信息,帮助您了解不符合集合验证器的验证规则的文档及原因,以快速识别和纠正影响验证规则的错误代码。

可恢复的索引创建任务

MongoDB 5.0支持将正在进行中的索引创建任务在节点重新启动后自动会恢复至原来的位置,减少计划中维护动作对业务的影响。例如:重新启动或升级数据库节点时,您不需要担心当前正在进行的大集合索引创建任务失效。

版本发布调整

由于MongoDB支持很多版本和平台,每个发布版本都需在20多个MongoDB支持的平台上进行验证,验证工作量大,降低了MongoDB新功能的交付速度,所以从MongoDB 5.0开始,MongoDB发布的版本将分为Marjor Release(大版本)和Rapid Releases(快速发布版本),其中Rapid Releases作为开发版本提供下载和测试体验,但不建议用在生产环境。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

深入前端研发效能治理:数据化运营思路及其实践

简介&#xff1a; 数据中台前端研发无不让人厚重真实地感受到“唯一不变的是变化”。拿集团的数据资产服务平台来说&#xff0c;业务上经过两年的发展&#xff0c;已由单一的数据管理和使用平台发展成了集团具有一定规模和影响力的全域数据要素交易所&#xff0c;而从前端技术侧…

啥情况?为什么我的 Service 无法注入进来?

作者 | 敖丙来源 | 敖丙今天同事火急火燎的走了过来&#xff0c;说&#xff1a;快帮我看看这个错误&#xff0c;啥情况啊&#xff1f;我一看报错&#xff1a;Field xxxService in com.xx.xx.service.impl.XxXServiceImpl required a bean of type com.xx.xx.service.XxxService…

oracle sga pga mysql_oracle实例内存(SGA和PGA)调整-xin

一、名词解释(1)SGA&#xff1a;System Global Area是Oracle Instance的基本组成部分&#xff0c;在实例启动时分配;系统全局域SGA主要由三部分构成&#xff1a;共享池、数据缓冲区、日志缓冲区。(2)共享池&#xff1a;Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数…

IoT Studio可视化搭建平台编辑历史功能的思考与探索

简介&#xff1a; 在前端可视化搭建领域中“重做”和“撤销”这两个功能已经是标配中的标配&#xff0c;毕竟只要有用户行为的地方就可能会有出错&#xff0c;这两个功能无疑就是为用户提供了“后悔药”。目前有各种各样的可视化搭建平台&#xff0c;本文介绍IoT Studio可视化搭…

云计算架构设计6大原则,你遵循了吗?| 赠书

作者 | 吕昭波 2006年&#xff0c;第一个云计算&#xff08;Cloud Computing&#xff09;产品诞生&#xff0c;云计算的概念也被提出&#xff0c;现在云计算几乎已经渗入所有的行业和应用场景中。我们不一定能直接感受到云计算对日常生活、工作、学习的影响&#xff0c;但作为I…

python写自动化工具_微软最强 Python 自动化工具开源了!不用写一行代码!

1. 前言最近&#xff0c;微软开源了一款非常强大的 Python 自动化依赖库&#xff1a;playwright-python它支持主流的浏览器&#xff0c;包含&#xff1a;Chrome、Firefox、Safari、Microsoft Edge 等&#xff0c;同时支持以无头模式、有头模式运行playwright-python 提供了同步…

复杂推理模型从服务器移植到Web浏览器的理论和实战

简介&#xff1a; 随着机器学习的应用面越来越广&#xff0c;能在浏览器中跑模型推理的Javascript框架引擎也越来越多了。在项目中&#xff0c;前端同学可能会找到一些跑在服务端的python算法模型&#xff0c;很想将其直接集成到自己的代码中&#xff0c;以Javascript语言在浏览…

国家网络安全宣传周:勒索病毒利如刀,上网备好技能包

简介&#xff1a; 近年来&#xff0c;勒索病毒携带着日趋成熟的手段革新和愈发隐蔽、复杂的“进化”能力&#xff0c;开启了“重装上阵”的疯狂模式&#xff0c;“出镜率”大有提高。由于大型政企机构的网络资产价值高&#xff0c;就成了勒索病毒的头号“猎物”。 政企机构信息…

漫画:什么是“低代码”开发平台?

作者 | 小灰来源 | 程序员小灰什么是低代码&#xff1f;其实&#xff0c;这并不是最近才出现的新概念。自从计算机诞生以来&#xff0c;人们就一直在想方设法提升计算机程序编写的效率。从最初的机器语言&#xff0c;发展到现在的C、Java、Python等高级语言&#xff1b;从完全独…

OpenKruise 如何实现应用的可用性防护?

简介&#xff1a; OpenKruise 在 2021.9.6 发布了最新的 v0.10.0 版本新增了弹性拓扑管理和应用安全防护等能力&#xff0c;本文将为大家揭晓 OpenKruise 是如何实现应用的可用性防护能力。 前言 OpenKruise 是阿里云开源的云原生应用自动化管理套件&#xff0c;也是当前托管…

Serverless 工程实践 | Serverless 应用优化与调试秘诀

简介&#xff1a; 本文将以阿里云函数计算为例&#xff0c;提供了在线调试、本地调试等多种应用优化与调试方案。 作者&#xff5c;刘宇 前言&#xff1a;本文将以阿里云函数计算为例&#xff0c;提供了在线调试、本地调试等多种应用优化与调试方案。 Serverless 应用调试秘…

新一代容器平台ACK Anywhere,来了

简介&#xff1a; 近日&#xff0c;阿里云容器服务全面升级为ACK Anywhere&#xff0c;让企业在任何需要云的地方&#xff0c;都能获得一致的容器基础设施能力。 5G、AR、AIoT 等场景在推动新一代云架构的演进&#xff0c;而容器重塑了云的使用方式。 近日&#xff0c;阿里云…

高密自智,体小量大,希捷Exos Corvault存储系统为数据洞察赋能

2022年2月24日——全球领先的海量数据存储基础设施解决方案提供商希捷科技&#xff08;NASDAQ&#xff1a;STX&#xff09;在线上举办了主题为“高密自智&#xff0c;体小量大”的新一代PB级自修复存储系统——Exos Corvault新品鉴赏会。 此次鉴赏会邀请到了E企研究院首席研究…

Apache Flink 在汽车之家的应用与实践

简介&#xff1a; 汽车之家如何基于 Flink 上线了 AutoStream 平台并持续打磨。 本文整理自汽车之家实时计算平台负责人邸星星在 Flink Forward Asia 2020 分享的议题《Apache Flink 在汽车之家的应用及实践》。主要内容包括&#xff1a; 背景及现状AutoStream 平台基于 Flink …

以色列安全厂商Check Point发布全新logo与重要安全新品,持续深耕中国市场

作者 | 宋慧 出品 | CSDN 云计算 2022年伊始&#xff0c;以色列老牌安全厂商Check Point在自家主办的安全行业大会CPX360上&#xff0c;正式宣布将启用全新企业logo以及企业口号。 Check Point公司中国区总经理陈石磊在对国内媒体分享时指出&#xff1a;“公司1993年成立时&am…

Facebook宕机背后,我们该如何及时发现DNS问题

简介&#xff1a; 国庆期间&#xff0c;Facebook 及其旗下 Instagram 和 WhatsApp 等应用全网宕机&#xff0c;停机时间将近 7 小时 5 分钟&#xff0c;Facebook 市值损失 643 亿美元。针对Facebook的宕机问题&#xff0c;我们该如何未雨绸缪&#xff0c;看看云拨测如何帮助客户…

KubeVela 1.1 发布,开启混合环境应用交付新里程碑

简介&#xff1a; KubeVela 作为一个开箱即用、面向现代微服务架构的应用交付与管理平台&#xff0c;今天正式发布了 1.1 版本&#xff0c;以更加用户友好和完善的功能集&#xff0c;开启了“让混合环境应用交付更加简单高效”的重要里程碑。 在云原生理念迅速普及的今天&…

云原生消息、事件、流超融合平台——RocketMQ 5.0 初探

简介&#xff1a; 今天分享的主题是云原生消息事件流超融合平台 RocketMQ 5.0 初探&#xff0c;内容主要分为三个部分&#xff1a; 首先&#xff0c;带大家回顾业务消息领域首选 RocketMQ 4 发展历史以及 4.x 版本的演进与发展。 其次&#xff0c;会为大家详细介绍 RocketMQ 5.…

mysql查找无根节点sql_SQL 双亲节点查找所有子节点的实现方法

怎么保存树状结构的数据呢&#xff1f;在 SQL 中常用的是双亲节点法。创建表如下CREATE TABLE category ( id LONG, parentId LONG, name String(20) )INSERT INTO category VALUES ( 1, NULL, Root )INSERT INTO category VALUES ( 2, 1, Branch1 )INSERT INTO category VALUE…

一文看懂微服务背后的技术演进与应用实践

简介&#xff1a; 2021年7月2日&#xff0c;阿里云用户组&#xff08;AUG&#xff09;第一次线下活动在济南召开。阿里云云原生资深专家李国强结合自身微服务领域经验&#xff0c;现场跟数十家山东企业分享了云原生的代表技术之一“微服务”的演进和应用实践。本文根据作者的现…