关于阿里云开发者:MongoDB-50新特性概览

44次阅读

共计 5302 个字符,预计需要花费 14 分钟才能阅读完成。

简介: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 中疾速查找该命令的语法。

  • 高级脚本环境新版 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 作为开发版本提供下载和测试体验,但不倡议用在生产环境。

版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

正文完
 0