MongoDB 5.0的发布说明

MongoDB 5.0 发布于 2021 年 7 月 13 日

时间序列集合

MongoDB 5.0引入了时间序列集合,可以高效地存储一段时间内的测量序列。与普通集合相比,将时间序列数据存储在时间序列集合中可以提高查询效率,并减少数据和索引的磁盘使用。

集合

新的聚合运算符

MongoDB 5.0引入了以下聚合运算符:

运算符号 描述
$count $count (aggregation accumulator)提供在现有管道$group (aggregation)阶段和新的MongoDB 5.0$setWindowFields阶段使用的所有文档的计数。 笔记: 消歧义$count (aggregation accumulator)$count (aggregation)管道阶段不同。
$dateAdd 按指定数量的时间单位增加Date()对象。
$dateDiff 返回两个日期之间的差额。
$dateSubtract Date()对象减少指定数量的时间单位。
$dateTrunc 截断日期。
$getField 从文档返回指定字段的值。您可以使用$getField检索名称包含句号(.)或以美元符号($)开头的字段的值。
$rand $rand方法每次调用时都会生成0到1之间的随机浮点值。新的$sampleRate运算符基于$rand。(也添加到MongoDB 4.4.2)
$sampleRate 添加$sampleRate方法,以可能以给定速率从管道中选择文档。
$setField 添加、更新或删除文档中的指定字段。您可以使用$setField添加、更新或删除带有句号(.)或以$符号($)开头的名称的字段。
$unsetField 删除文档中的指定字段。$setField的别名,用于删除名称包含句号(.)或以美元符号($)开头的字段。

窗口操作员

MongoDB 5.0引入了$setWindowFields管道阶段,允许您对集合中指定的文档跨度执行操作,称为窗口。该操作根据所选窗口运算符返回结果

例如,您可以使用$setWindowFields阶段输出:

  • 集合中两个文档之间的销售额差异。
  • 销售排名。
  • 累计销售总额。
  • 分析复杂的时间序列信息,无需将数据导出到外部数据库。

一般汇总改进

$expr运算符:比较运算符使用索引

从MongoDB 5.0开始,放置在$expr运算符中的$eq$lt$lte$gt$gte运算符可以使用索引来提高性能。

$ifNull表达式接受多个输入表达式

从MongoDB 5.0开始,您可以在返回替换表达式之前为$ifNull表达式指定多个输入表达式。

let聚合选项

从MongoDB 5.0开始,aggregate命令和db.collection.aggregate()助手方法有一个let选项来指定可以在聚合管道其他地方使用的变量列表。这允许您通过将变量与查询文本分开来提高命令的可读性。

$lookup阶段:简明的相关子查询

从MongoDB 5.0开始,聚合管道$lookup阶段支持简洁的相关子查询,以改善集合之间的连接。

$lookup阶段:无关子查询

从MongoDB 5.0开始,对于包含$sample阶段、$sampleRate运算符或$rand运算符的$lookup管道阶段中的无关子查询,如果重复,子查询总是会再次运行。以前,根据子查询输出大小,要么缓存子查询输出,要么再次运行子查询。

请参阅使用$lookup执行无关的子查询。

审计

运行时审核过滤器配置

MongoDB 5.0增加了在运行时配置审计过滤器的功能。

运算符号 描述
auditConfigPollingFrequencySecs 定义用于检查审计配置的轮询间隔
getAuditConfig mongodmongos检索审计配置
setAuditConfig 在运行时为mongodmongos实例设置新的审计配置。

一般审计更新

从MongoDB 5.0开始

上限集合

上限集合删除复制到次要删除

从MongoDB 5.0开始,副本集上限集合隐式删除操作由主集合处理并复制到辅助成员。

允许在上限集合上显式删除

从MongoDB 5.0.7开始,您可以使用删除方法大写集合中删除文档

更改流

更改事件输出

从MongoDB 5.0开始, Change Events包含字段updateDescription.truncatedArrays来记录数组截断。

索引

部分索引行为改变

从MongoDB 5.0开始,只要部分过滤器表达式字段不表示等效过滤器,可以使用相同的键模式创建多个部分索引

在早期版本的MongoDB中,当使用不同部分过滤器表达式的相同键模式时,不允许创建多个部分索引

唯一稀疏索引行为更改

从MongoDB 5.0开始,单个集合中可以存在具有相同密钥模式的唯一稀疏唯一的非稀疏索引。

查看唯一稀疏索引创建

在进行中的索引构建期间无法删除Ready索引

如果有任何正在进行的索引构建,db.collection.dropIndexes()命令无法删除就绪索引

  • 在MongoDB的4.4.0-4.4.4版本中,由于错误,这种逻辑不正确。

前台验证可以修复多键元数据不一致

在MongoDB部署上运行时,db.collection.validate()试图修复独立部署的多键元数据不一致

删除geoHaystack索引和geoSearch命令

MongoDB 5.0删除了已弃用的geoHaystack索引和geoSearch命令。将a2d索引$geoNear或支持的地理空间查询运算符之一一起使用。

将MongoDB实例升级到5.0并将功能兼容性版本设置为5.0将删除任何预先存在的geoHaystack索引。

新错误消息

当选项指定不正确时,db.collection.createIndex()db.collection.createIndexes()操作会产生新的错误消息。

索引构建中断

如果副本集中的节点在索引构建期间被干净地关闭或回滚,索引构建进度现在将保存到磁盘。当服务器重新启动时,索引创建将从保存的位置恢复。

reIndex行为更改

从MongoDB 5.0开始, reIndex命令和db.collection.reIndex()shell方法只能在独立实例上运行。

删除的命令

从MongoDB 5.0开始,删除了以下数据库命令和mongo shell helper方法:

删除了命令 替代品
db.collection.ensureIndex() db.collection.createIndex()
db.resetError() 无法使用
resetError 无法使用
shardConnPoolStats connPoolStats
unsetSharding 无法使用
geoSearch $geoNear或支持的地理空间查询运算符之一

副本集

非事务性读取配置事务

从MongoDB 5.0开始,不允许在config.transactions集合中进行非事务读取,具有以下读取问题和选项:

hello命令

从MongoDB 5.0(以及4.4.2、4.2.10、4.0.21和3.6.21)开始,引入了hello命令和thedbdb.hello()方法,以取代isMaster命令和thedbdb.isMaster()方法。新的拓扑度量connections.exhaustHelloconnections中跟踪这一点

Quiesce时期

从MongoDB 5.0开始,mongodmongos进入一个安静的时期,以便在关闭之前完成任何正在进行的数据库操作。

Limit Removed for members[n]._id Values

从MongoDB 5.0开始,enableMajorityReadConcern--enableMajorityReadConcern无法更改,并且由于存储引擎的改进,始终设置为true

在早期版本的MongoDB中,enableMajorityReadConcern--enableMajorityReadConcern是可配置的,可以设置为false,以防止存储缓存压力使用三元主-次要仲裁器(PSA)架构固定部署。

如果您使用的是三人初级-中学仲裁员(PSA)架构,请考虑以下几点:

  • 如果辅助功能不可用或滞后,写入关注"majority"可能会导致性能问题。有关如何缓解这些问题的建议,请参阅使用PSA副本集缓解性能问题。
  • 如果您使用的是全局默认"majority"并且写入问题小于多数的大小,您的查询可能会返回陈旧(未完全复制)的数据。

增强的线程池超时控制

从MongoDB 5.0开始,您可以使用新的replWriterMinThreadCount服务器参数配置线程池中空闲线程的超时,以并行执行复制操作。当replWriterMinThreadCount的值小于replWriterThreadCount时,replWriterMinThreadCount上方的空闲线程将超时。

重新配置PSA复制集

在重新配置主-二级仲裁器(PSA)副本集或更改为PSA架构时,在某些情况下,现在需要在两步更改中执行重新配置。MongoDB 5.0引入了执行这两个步骤的rs.reconfigForPSASet()方法。如果您无法使用帮助方法,请按照安全修改PSA副本集中的步骤操作

限制同步源重新评估

maxNumSyncSourceChangesPerHour确定在节点暂时停止重新评估同步源之前,每小时可以发生多少个同步源更改。如果节点没有同步源,此参数不会阻止节点开始从另一个节点同步。

enableOverrideClusterChainingSetting服务器参数

从MongoDB 5.0.2(以及4.2.16和4.4.8)开始,您可以将newenableOverrideClusterChainingSetting服务器参数设置为true,以允许辅助成员从其他辅助成员复制数据,即使settings.chainingAllowedfalse

安全

支持在线证书轮换

从MongoDB 5.0开始,您现在可以按需旋转以下TLS证书,而无需首先停止运行mongodmongos实例:

要轮换这些证书,请用更新的版本替换文件系统上的证书文件,然后使用 rotateCertificates 命令或db.rotateCertificates()shell方法触发证书轮换。

以这种方式更换证书不需要停机,也不会掉落任何活跃的远程连接。

有关详细信息,请参阅在线证书轮换

支持配置TLS 1.3密码套件

MongoDB 5.0引入了opensslCipherSuiteConfig参数,以启用OpenSSL在使用TLS 1.3加密时应允许的受支持密码套件的配置。

TLS连接X509证书启动警告

从MongoDB 5.0开始,当mongodmongos证书不包含主题替代名称属性时,它们会发出启动警告。

以下平台不支持通用名称验证:

  • iOS 13及更高版本
  • MacOS 10.15及更高版本
  • 去1.15及更高

使用这些平台的客户端不会对使用主机名由CommonName属性指定的x.509证书的MongoDB服务器进行身份验证

ApplyOps特权操作

MongoDB 5.0引入了由dbAdminAnyDatabase继承的applyOps特权操作

applyOps操作允许用户运行applyOps数据库命令。

分片集群

重新分片

理想的分片密钥允许MongoDB在整个集群中均匀分发文档,同时促进常见的查询模式。由于数据分布不均匀,次优的碎片键可能会导致性能或扩展问题。从MongoDB 5.0开始,您可以使用thereshardCollection命令更改集合的分片键,以更改数据在集群中的分布。

currentOp报告正在进行的分片操作

从MongoDB 5.0开始, $currentOp聚合阶段(以及currentOp命令和 db.currentOp()shell方法)包含了关于正在进行的重新分片操作的状态的附加信息,这些重新分片操作针对重新分片协调器以及提供者和接收者分片。

db.currentOp方法现在使用聚合阶段mongosh

从MongoDB 5.0开始,在运行助手方法db.currentOp()时使用$currentOp聚合阶段mongosh

mongos/ mongod连接池

从MongoDB 5.0开始(也从4.4.4.5和4.2.13开始可用),MongoDB添加了参数选项"automatic"作为ShardingTaskExecutorPoolReplicaSetMatching的新默认值。当设置为mongos时,实例遵循为"matchPrimaryNode"选项指定的行为。当设置为mongod时,实例遵循为"disabled"选项指定的行为。

renameCollection与分片系列兼容

从MongoDB 5.0开始,您可以使用renameCollection命令更改分片集合的名称。

在分片集群中重命名分片或未分片集合时,源集合和目标集合仅锁定在每个碎片上。对源集合和目标集合的后续操作必须等到重命名操作完成。

movePrimary操作期间写入的错误消息

从MongoDB 5.0开始,当使用movePrimary命令从碎片集群中删除碎片时,写入原始碎片将生成错误消息。

拆分和合并块更改日志显示拥有碎片

从MongoDB 5.0开始,config.changelog集合中的文档技术球合并操作包含一个owningShard字段。owningShard字段显示拥有拆分或合并块的碎片shardId

owningShard字段有助于识别经常发生拆分或合并操作的碎片。

maxCatchUpPercentageBeforeBlockingWrites服务器参数

从MongoDB 5.0(和4.4.7、4.2.15、4.0.26)开始,您可以设置maxCatchUpPercentageBeforeBlockingWrites,以指定与传输块的总大小(以MB为单位)相比,在moveChunk操作期间尚未迁移的数据的最大允许百分比。

此参数可能会影响以下行为:

shell变化

新MongoDB shell:mongosh

Mongo shell在MongoDB v5.0中已被弃用。替换的shell是 mongosh。遗留的mongo shell将在将来的版本中被删除。 MongoDB v5.0中的shell包装也发生了变化。有关详细信息,请参 安装说明

对GCP和Azure KMS提供商的shell支持

从MongoDB 5.0(和MongoDB 4.4.5)开始,Google云平台KMS和Azure Key Vault在mongosh和遗留mongo shell中都作为客户端字段级加密的密钥管理服务(KMS)提供程序受到支持。

使用KMS,您可以集中安全地存储客户主密钥(CMK),这些密钥用于加密和解密数据加密密钥,作为客户端字段级加密工作流程的一部分

此外,配置的KMS允许在与MongoDB Enterprise一起使用时使用CSFLE如何解密数据字段的文档

要了解更多信息,请参阅使用mongosh配置KMS提供商。

快照

对阅读关注的扩展支持"snapshot"

从MongoDB 5.0开始,在初次要和次要的多文档事务之外,一些读取关注"snapshot"支持读取。

minSnapshotHistoryWindowInSeconds服务器参数img

从MongoDB 5.0开始,您可以使用minSnapshotHistoryWindowInSeconds参数来控制WiredTiger保存快照历史记录的时间。

Transactions

coordinateCommitReturnImmediatelyAfterPersistingDecision参数

当事务提交决策返回给客户端时,服务器参数 coordinateCommitReturnImmediatelyAfterPersistingDecision

该参数在MongDB 5.0中引入,默认值为true。在MongoDB 6.1中,默认值更改为false

coordinateCommitReturnImmediatelyAfterPersistingDecisionfalse时,shard事务协调器将等待所有成员确认多文档事务提交,然后再将提交决定返回给客户端。

命名更改

从2022年2月开始,“版本API”术语改为“稳定API”。随着命名的更改,所有概念和功能都保持不变。

一般改进

$lookup管道阶段查询的执行计划统计信息

MongoDB 5.0为使用$lookup管道阶段的查询添加了执行计划统计信息

改进了字段名称中($)和(.)的处理

MongoDB 5.0增加了对($)前缀或包含(.)字符的字段名的改进支持。存储数据的验证规则已经更新,以便更轻松地使用使用这些字符的数据源。

集群宽默认写入问题

从MongoDB 5.0开始,一旦通过setDefaultRWConcern命令设置集群宽写入关注(CWWC),就无法取消设置写入关注。

隐式默认写入关注

从MongoDB 5.0开始,隐式默认写入问题是w: majority。然而,对于包含仲裁员的部署,会特别考虑

  • 复制集的投票多数是投票成员人数的1加一半,四舍五入。如果计数据的投票成员数量不超过投票多数,则默认写入关注点为{ w: 1 }
  • 在所有其他场景中,默认写入关注是{ w: "majority" }

具体来说,MongoDB使用以下公式来确定默认写入问题:

if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ]
    defaultWriteConcern = { w: 1 }
else
    defaultWriteConcern = { w: "majority" }

例如,考虑以下部署及其各自的默认写入问题:

非仲裁者 仲裁员 投票节点 大多数投票节点 隐式默认写入关注
2 1 3 2 { w: 1 }
4 1 5 3 { w: "majority" }
  • 在第一个示例中:
    • 共有3个投票节点有2个非仲裁员和1个仲裁员。
    • 大多数投票节点(1个加上3个的一半,四舍五入)是2个。
    • 非仲裁者(2)的数量等于大多数投票节点(2),导致{ w: 1 }的隐式写入问题。
  • 在第二个示例中:
    • 共有4个非仲裁员和1个仲裁员,共5个投票节点。
    • 大多数投票节点(1加5个中的一半)是3个。
    • 非仲裁者的数量(4)大于大多数投票节点(3),导致{ w: "majority" }的隐写入问题。

{ w: "majority" }默认写入问题在选举或副本集成员不可用时提供了更强的耐用性保证。

{ w: "majority" }写入问题可能会影响性能,因为只有在计算出大多数副本集成员执行并坚持写入磁盘时,才会确认写入。如果您的应用程序依赖于性能敏感的写入,您可以使用setDefaultRWConcern命令显式设置默认写入问题,以提高性能,而牺牲数据耐用性保证。您还可以在单个操作级别为性能关键型写入设置写入问题。看看你的驱动程序文档详细了解。

mongosShutdownTimeoutMillisForSignaledShutdown参数

从MongoDB 5.0开始,新参数mongosShutdownTimeoutMillisForSignaledShutdown指定了在启动关闭mongos之前等待任何正在进行的数据库操作完成的时间(以毫秒为单位)。

可配置的zstd压缩电平

MongoDB 5.0引入了zstdCompressionLevel配置文件选项,该选项允许在blockCompressor设置为zstd时进行可配置的压缩级别。

无锁读取操作

从MongoDB 5.0开始,当另一个操作在集合上保持独家(X)写入锁时,以下读取操作不会被阻止:

写入集合时,mapReduceaggregate持有意图排他性(IX)锁。因此,如果集合上已经持有独家X锁,则mapReduceaggregate写入操作将被阻止。

解释模式验证失败

当文档未能通过模式验证时,MongoDB 5.0添加了详细的解释

validate命令中的修复选项

从MongoDB 5.0开始,validate命令和db.collection.validate()帮助方法具有新的修复选项,用于修复具有不一致的集合。

validate命令和db.collection.validate()帮助方法还返回一个新的repaired布尔值,如果集合得到修复,则为true

validate命令报告文档违反模式

从MongoDB 5.0开始,validatedb.collection.validate()验证集合中的文档。如果违反任何模式验证规则,命令会报告。

维修选项mongod

从MongoDB 5.0开始,mongod--repair选项会验证集合,以发现任何不一致之处,并在可能的情况下修复它们,从而避免重建索引。有关使用和限制,请参阅--repair选项。

corruptRecords验证输出中的字段

从MongoDB 5.0开始,validate命令和db.collection.validate()帮助方法返回一个新的corruptRecords字段,其中包含用于损坏文档的RecordId值数组。

maxValidateMemoryUsageMB服务器参数

从MongoDB 5.0(和4.4.7)开始,setParameter命令有一个newmaxValidateMemoryUsageMB参数,该参数为validate命令设置最大内存使用量。

findChunksOnConfigTimeoutMS服务器参数

从MongoDB 5.0开始,您可以使用findChunksOnConfigTimeoutMS参数更改chunks上查找操作的超时

数据库概述filter选项

从MongoDB 5.0开始,您可以为数据库分析器设置filter选项,以确定哪些操作被配置和记录。您可以使用filter表达式代替slowmssampleRate分析器选项。

参见:

记录数据库概述设置的更改

从MongoDB 5.0开始(也从4.4.2和4.2.12开始提供),使用profile命令ordbdb.setProfilingLevel()包装方法对数据库分析器level、slowms、sampleRatefilter所做的更改记录在log file

服务器和审计日志的独立日志轮换

从MongoDB 5.0开始,启用审计后,您现在可以使用logRotate命令独立旋转服务器和审计日志。以前,logRotate会将两个日志一起旋转。

remote慢操作日志中的字段

从MongoDB 5.0开始,慢操作日志消息包括指定客户端IP地址的remote字段。

remoteOpWaitMillis日志字段

从MongoDB 5.0开始,您可以使用remoteOpWaitMillis日志字段获取碎片结果等待时间

resolvedViews视图上缓慢查询的日志字段

从MongoDB 5.0开始,视图进行缓慢查询日志消息包括包含视图详细信息的resolvedViews字段。

使用let选项定义变量

从MongoDB 5.0开始,以下命令有一个let选项来定义变量列表。这允许您通过将变量与查询文本分开来提高命令的可读性。

update命令还有一个c字段来定义变量列表。

默认情况下支持用户名到LDAP DN映射

从MongoDB 5.0开始,如果为mongod / mongos和mongoldap的userToDNMapping配置文件选项和--ldapUserToDNMapping命令行选项指定了一个空映射文档(即空字符串或空数组),则该选项现在默认情况下会将经过身份验证的用户名映射为LDAP DN。以前,提供空映射文档会导致映射失败。

其他dbStats可用空间统计信息

从MongoDB 5.0开始,dbStats命令输出以下附加统计信息:

serverStatus产出变化

serverStatus在其输出中包含以下新字段:

汇总指标

API 版本指标

复制指标

阅读关注计数器

写入关注计数器

  • opWriteConcernCounters现在有以下新字段:
    • opWriteConcernCounters.insert.noneInfo
    • opWriteConcernCounters.update.noneInfo
    • opWriteConcernCounters.delete.noneInfo

螺纹连接数量

  • connections.threaded,它报告分配给服务客户端请求的线程的客户端传入连接数量

分片统计

服务执行器指标

光标指标

安全计数器

复数

  • repl现在包括一个primaryOnlyServices文档,其中包含有关仅在副本集原发上运行的服务的其他信息。

计划缓存调试信息大小限制

从MongoDB 5.0(以及4.4.3、4.2.12、4.0.23和3.6.23)开始,只有当所有集合plan caches的累计大小低于0.5 GB时,计划缓存才会保存全plan cache条目。当所有集合plan caches累积大小超过此阈值时,额外的plan cache条目将被存储,而无需某些调试信息。

plan cache条目的估计大小(以字节为单位)可在$planCacheStats的输出中找到

关闭在会话中打开的不活跃光标

从MongoDB 5.0(和4.4.8)开始,当相应的服务器会话killSessions命令结束时,如果会话超时,或者客户端用尽光标,则在客户端会话中创建的光标将关闭。请参阅mongosh中迭代光标。

新的validateDBMetadata命令

MongoDB 5.0添加了validateDBMetadata命令。validateDBMetadata命令检查数据库或集合的存储元数据在特定API版本中是否有效。

平台支持

最小微架构

MongoDB 5.0引入了以下最低架构要求:

CPU 支持的最低微架构
英特尔x86_64 MongoDB 5.0需要以下之一:Intel Sandy Bridge或更新版本的Core处理器,或Intel Tiger Lake 或更高版本 Celeron 或 Pentium 处理器。
AMDx86_64 MongoDB 5.0需要AMD*Bulldozer *或更高版本。
ARMarm64 MongoDB 5.0需要ARMv8.2-A或更高版本。

不符合这些最低架构要求的x86_64arm64平台不支持MongoDB v5.0。

有关更多信息,请参阅x86_64平台支持

移除平台

MongoDB 5.0取消了对以下平台的支持:

  • macOS 10.13
  • PPC64LE架构上的RHEL 7 / CentOS 7 / Oracle 7
  • S390x架构上的SLES 12
  • PPC64LEs390x架构上的Ubuntu 18.04

有关MongoDB 5.0支持的平台和架构的完整列表,请参阅平台支持

影响兼容性的变化

一些更改可能会影响兼容性,可能需要用户采取行动。有关兼容性更改的详细列表,请参阅MongoDB 5.0中的兼容性更改。

升级程序

重要:

功能兼容性版本

要从4.4部署升级到MongoDB 5.0,4.4部署必须将featureCompatibilityVersion设置为4.4。要检查版本:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

要升级到MongoDB 5.0,请参阅特定于MongoDB部署的升级说明:

如果您需要升级到5.0的指导,MongoDB专业服务提供主要版本升级支持,以帮助确保顺利过渡到MongoDB应用程序而不中断。

下载

要下载MongoDB 5.0,请转到MongoDB下载中心

另见:

所有第三方许可通知

已知问题

在版本中 问题 状态
5.0.0 服务器-58171:创建集合后,无法修改时间序列集合的granularity参数。 固定在5.0.1
5.0.0 服务器-58392:正在进行的分片操作可能会阻止备份或还原操作成功。 未解决

报告问题

要报告问题,请参阅https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports关于如何为MongoDB服务器或相关项目之一提交JIRA票据的指导。

原文:Release Notes for MongoDB 5.0

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""