MongoDB 4.0的发布说明

多文件交易

从4.0版本开始,MongoDB提供了对副本集执行多文档事务的能力。对于多文档事务,在事务提交之前,事务中不会在事务之外看到写入操作。也就是说,多文档交易是原子的。

重要:

在大多数情况下,多文档事务比单文档写入带来更高的性能成本,多文档事务的可用性不应成为有效模式设计所取代的场所。在许多情况下,去规范化数据模型(嵌入式文档和数组)将继续最适合您的数据和用例。也就是说,对于许多场景,适当建模您的数据将最大限度地减少对多文档交易的需求。

有关其他事务使用注意事项(如运行时限制和oplog大小限制),另请参阅生产注意事项。

功能兼容性

副本集所有成员featureCompatibilityVersion必须为4.0或更高。要检查成员featureCompatibilityVersion,请连接到成员并运行以下命令:

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

有关 featureCompatibilityVersion标志的更多信息,请参阅seesetFeatureCompatibilityVersion

mongoshell方法

方法 描述
Session.startTransaction() 启动多陈述事务。
Session.commitTransaction() 提交交易。
Session.abortTransaction() 中止交易。

MongoDB驱动程序

客户需要MongoDB驱动程序为MongoDB 4.0更新使用交易。

阅读关注snapshot

MongoDB 4.0为多文档事务引入了新的读取关注级别"snapshot"”。

对于多文档事务,MongoDB有时可能会用更强的读取关注来代替"local""majority"读取关注。

有关所有接受读取顾虑的操作的列表,请参阅支持读取关注的操作。

阅读偏好

包含读取操作的多文档事务必须使用读取首选项primary。给定事务中的所有操作都必须路由到同一成员。

命令

默认情况下,多文档事务等待5毫秒才能获得事务中操作所需的锁。如果事务无法在5毫秒内获得所需的锁,则交易将中止。

您可以使用maxTransactionLockRequestTimeoutMillis参数来调整交易等待获取锁的时间。

事务在中止或提交时释放所有锁。

$currentOp

聚合管道阶段 $currentOp (以及 currentOp命令 和 mongo shell 助手 db.currentOp() 方法) 返回关于作为事务一部分有锁的非活动会话的消息

参数

集合

新型转换运算符

MongoDB 4.0为类型转换添加了以下新的聚合运算符:

运算符号 描述
$convert 将值转换为指定类型。
$toBool 将值转换为布尔值。
$toDate 将值转换为日期。
$toDecimal 货币转换器 值为 Decimal128。
$toDouble 将值转换为Double。
$toInt 将值转换为整数。
$toLong 将值转换为长。
$toObjectId 将值转换为ObjectId。
$toString 将值转换为字符串。

新的字符串运算符

MongoDB 4.0添加了以下新的聚合字符串运算符:

运算符号 描述
$ltrim 从字符串开头删除空格或指定字符。
$rtrim 从设置末尾删除空格或指定字符。
$trim 从字符串的开头和结尾删除空格或指定字符。

其他改进

$bucket

$bucket阶段不再要求boundaries文档参数用$literal包装

$dateToString

$dateToString聚合运算符具有以下选项更改:

笔记:

Requires featureCompatibilityVersion (fcv) set to "4.0"or greater.

  • 一个新的 onNull 选择指定了在 date 为空或缺失时返回的值。
  • 选项format现在是可选的。
$dateFromParts

如果为yearisoYeartimezone以外的字段指定的值超出有效范围,$dateFromParts携带或减去其他日期部分的差额来计算日期。有关更多信息,请参阅值范围。

$dateFromString

$dateFromString聚合运算符采用可选format字段。

$currentOp

聚合管道阶段$currentOp支持以下新选项:

  • idleSessions选项返回作为事务的一部分持有锁的不活动会话的信息。
  • localOps选项是报告在当前mongos实例上本地运行的操作,而不是报告在碎片上运行的操作。

MongoDB驱动程序

以下驱动程序的功能与MongoDB 4.0兼容:

Java 3.8.0 C# 2.7 Perl 2.0.0
Python 3.7.0 Node3.1.0 PHP(PHPC)1.5.0
C 1.11.0 Ruby2.6.0 cala 2.4.0

安全

添加支持SCRAM-SHA-256

笔记:

要使用SCRAM-SHA-256featureCompatibilityVersion必须设置为4.0。有关 featureCompatibilityVersion的更多信息,请参阅Get FeatureCompatibilityVersionsetFeatureCompatibilityVersion

MongoDB增加了对SCRAM身份验证机制SCRAM-SHA-256的支持,该机制使用SHA-256哈希函数。为了修改SCRAM-SHA-256的迭代计数,MongoDB添加了一个新的参数scramSHA256IterationCount

创建和更新用户操作的新选项

当创建或更新一个scram用户时,您可以指定用于用户凭证的特定scram机制。具体来说, MongoDB 4.0 在以下命令和mongo shell helper中添加了mechanisms选项

指挥权 方法
createUser db.createUser()
updateUser db.updateUser()

使用SCRAM-SHA-256时,MongoDB(即服务器)需要解锁密码。从MongoDB 4.0开始,digestPassword的默认值对createUsertruepasswordDigestor的默认值为"server"在早期的MongoDB版本中,digestPassword分别是falseclient

isMaster命令的新选项

从MongoDB 4.0开始,isMaster命令接受可选字段saslSupportedMechs: <db.user>在其结果中返回额外的fieldisMasterisMaster.saslSupportedMechs

isMaster.saslSupportedMechs是用于创建指定用户凭据的SASL机制数组。

移除对MONGODB-CR

从4.0版本开始,MongoDB取消了对已弃用的MongoDB挑战响应(MONGODB-CR)身份验证机制的支持。

自3.0版本以来,MongoDB不支持创建MONGODB-CR用户,除非部署已从2.6或更早的部署升级,该部署已经拥有MONGODB-CR用户,并且尚未升级身份验证模式。

如果您的部署在MONGODB-CR模式中存储了用户凭据,则在升级到4.0版本之前,您必须升级到咸味挑战响应身份验证机制(SCRAM)。有关升级到SCRAM的信息,请参阅升级到SCRAM。

usersInfo增强

usersInfo命令可以通过指定以下方式返回所有数据库的信息:

{ usersInfo: { forAllDBs: true } }

usersInfomongo shell 辅助程序 db.getUser()db.getUsers() 方法接受一个新的可选过滤器文档filter 文档指定$match 阶段条件,以便仅为匹配条件的用户返回信息 。

usersInfo 命令和 mongo shell helpers.db.getUser()db.getUsers()方法返回用户的机制字段。

平台 TLS/SSL库
窗口 安全通道(Schannel)
Linux/BSD OpenSSL
macOS 安全运输

与此更改相关联,Linux/BSD支持参数opensslCipherConfig,Windows和macOS不再支持该参数。

TLS 1.2支持

适用于macOS的MongoDB 4.0二进制文件支持TLS 1.2。

禁用TLS 1.0

MongoDB二进制文件(mongodmongosmongo)在提供TLS 1.1+的系统上禁用对TLS 1.0加密的支持。

如果您需要支持TLS 1.0:

在 macOS 上,将mongo shell 版本 3.6.4 或更早版本连接到 MongoDB 4.0+ 部署需要显示启用TLS1.0

AES-GC

Windows上的MongoDB Enterprise不再支持AES256-GCM。此密码现在仅在Linux上可用。

另见:

在Windows和macOS上为TLS/SSL启用系统存储

新的特权行动

支持免费云监控,MongoDB为cluster资源添加了以下特权操作:

MongoDB修改了clusterMonitor角色以包含这些特权。

x.509 认证证书限制

从MongoDB 4.2, 开始,如果指定--tlsAllowInvalidateCertificates`net.tls.allowInvalidCertificates: true在使用x.509身份验证时,无效证书只够建立tls连接,而不足以进行身份验证。

如果您使用无效证书执行x.509身份验证,请将证书更新为有效证书。例如,您可以使用受信任的CA对现有证书进行签名,或者如果使用自定义CA,请使用net.ssl.CAFile指定该CA

在Windows和macOS上为TLS/SSL启用系统存储

--sslCertificateSelector 选项 (certificateSelector设置) 允许 mongodmongo shell 和mongos 使用Windows 和 macOS的系统SSL证书存储。

--sslClusterCertificateSelector选项(clusterCertificateSelector设置)允许mongodmongos使用Windows和macOS的系统TLS/SSL证书存储进行集群内的内部TLS/SSL通信。

选项--kmipClientCertificateSelectorsecurity.kmip.clientCertificateSelector)允许mongod在使用TLS/SSL连接到KMIP服务器时使用Windows和macOS的系统TLS/SSL证书存储。

不建议使用MMAPv1

从4.0版本开始,MongoDB不建议使用MMAPv1存储引擎,并将在未来的版本中删除MMAPv1。

要将您的MMAPv1存储引擎部署更改为WiredTiger存储引擎,请参阅:

副本集

删除复制集的pv0

MongoDB 4.0删除了已弃用的副本集协议版本0 pv0

在升级到MongoDB 4.0之前,您必须升级到pv1

要升级到 pv1, 请将 mongo shell 连接到主副本集,并执行以下操作:

cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);

您可以使用catchUpTimeoutMillis在更快的故障转移和保存w:1写入之间进行优先排序。

有关pv1的更多信息,请参阅Replica Set协议版本。

删除主从复制

MongoDB 4.0取消了对已弃用的主从复制的支持。在升级到MongoDB 4.0之前,如果您的部署使用主从复制,则必须升级到副本集。

要从主从复制转换为副本集,请参阅将主从部署转换为副本集。

日志和复制集

从MongoDB 4.0开始,对于使用WiredTiger存储引擎的复制集成员,您无法指定--nojournal选项orstoragestorage.journal.enabled: false

rollbackTimeLimitSecs可用参数

从MongoDB 4.0开始,一个新的rollbackTimeLimitSecs参数允许为指示回滚的成员设置公共点和最后一个oplog写入条目之间的时间限制(以秒为单位)。默认回滚时间限制为1天。

等待背景索引构建

从4.0版本开始,MongoDB等待任何正在进行的后台索引构建完成,然后再开始回滚。

回滚文件

MongoDB添加了参数createRollbackDataFiles,该参数确定在回滚期间,MongoDB是否创建包含回滚期间受影响的文档的回滚文件。

replSetGetStatus产出变化

replSetGetStatus返回以下新字段:

不建议使用从replSetGetStatus返回的以下字段:

Oplog 大小

oplog可以超过其配置的大小限制,以避免删除majority commit point

更改流

数据库和部署变更流

MongoDB增加了以下功能:

  • 打开单个数据库(不包括adminlocalconfig数据库)的更改流光标,以监视其所有非system集合的更改。
  • 为部署打开更改流光标,以监视除adminlocalconfig外所有数据库中所有非system集合的更改。

笔记:

Requires featureCompatibilityVersion (fcv) set to "4.0"or greater.

开始时间选项

MongoDB增加了为更改流指定开始时间(startAtOperationTime选项)的功能。

更改事件文档更改

更改事件文档包括新字段:

  • clusterTime,对应于事件的职业者的时间戳。
  • 如果操作是多文档事务的一部分,则txnNumberlsid

恢复令牌数据类型更改

MongoDB 4.0引入了新的十六进制编码字符串更改流恢复令牌:

恢复令牌_data类型取决于MongoDB版本,在某些情况下取决于更改流打开/恢复时的功能兼容性版本(fcv)(即fcv值的更改不会影响已打开的更改流的恢复令牌):

MongoDB版本 功能兼容性版本 恢复令牌_data类型
MongoDB 4.0.7及更高版本 "4.0"或"3.6" 六角编码字符串(v1
MongoDB 4.0.6及更早版本 "4.0" 六角编码字符串(v0
MongoDB 4.0.6及更早版本 "3.6" BinData
MongoDB 3.6 "3.6" BinData

使用十六进制编码的字符串恢复令牌,您可以比较和排序此类令牌。

无论fcv值如何,4.0部署都可以使用BinData恢复令牌或十六进制字符串恢复令牌来恢复更改流。因此,4.0部署可以使用3.6部署集合上打开的更改流中的恢复令牌。

在MongoDB版本中引入的新简历令牌格式不能被早期的MongoDB版本使用。

然而,3.6部署可以使用从对fcv 3.6部署的集合打开的更改流返回的BinData恢复令牌。然而,3.6部署不能使用十六进制编码的字符串恢复令牌。

mongoshell方法

方法 描述
db.watch() 为单个数据库(不包括adminlocalconfig数据库)打开更改流光标,以监视其所有非system集合的更改。有关相应的MongoDB驱动程序方法,请参阅您的驱动程序文档。
Mongo.watch() 为部署打开一个更改流光标,以监视除adminlocalconfig外所有数据库中所有非system集合的更改。有关相应的MongoDB驱动程序方法,请参阅您的驱动程序文档。4.0版本的新功能

免费监控

MongoDB 4.0(社区版)为独立或复制集提供免费云监控

启用/禁用

默认情况下,您可以使用以下方式在运行时启用/禁用免费监控:

mongo外壳方法 指挥权
db.enableFreeMonitoring() setFreeMonitoring
db.disableFreeMonitoring()

您还可以在启动时启用或禁用免费监控,使用以下任一方式:

查看状态

要查看免费监控的状态,MongoDB提供以下命令和shell助手:

mongoshell方法 指挥权
db.getFreeMonitoringStatus() getFreeMonitoringStatus

serverStatus和助手db.serverStatus()还包括freeMonitoring字段中的免费监控统计信息。

访问控制

为了支持免费的云监控,MongoDB为cluster资源添加了以下特权操作:

内置的角色clusterMonitor包括新的特权操作。

分片集群

mongos对影响分片集群元数据的以下操作使用"majority"写入关注:

指挥权 方法 笔记
addShard sh.addShard()
create db.createCollection()
drop db.collection.drop()
dropDatabase db.dropDatabase() 在MongoDB 3.6中更改
enableSharding sh.enableSharding()
movePrimary
renameCollection db.collection.renameCollection()
shardCollection sh.shardCollection()
removeShard
setFeatureCompatibilityVersion

.msiWindows上的安装程序

从MongoDB 4.0开始,您可以在安装期间将MongoDB配置为服务。

平台支持

  • MongoDB 4.0(社区和企业)增加了对以下内容的支持:
  • MongoDB 4.0(社区)增加了对以下内容的支持:
    • s390x RHEL 6.x
  • MongoDB 4.0不支持SLES 11。
    • MongoDB 3.2.20+、3.4.15+和3.6.4+也取消了对SLES 11的支持。
  • MongoDB 4.0不支持Ubuntu 12.04。
    • MongoDB 3.2.20+、3.4.15+和3.6.4+也删除了对Ubuntu 12.04的支持。
    • MongoDB 3.2.20+、3.4.15+和3.6.4+也删除了对Ubuntu 12.04的支持。
  • 在未来版本中,MongoDB将停止对以下平台的支持:
    • Windows 7/2008R2
    • Windows 8/2012
    • Windows 8.1/2012R2
    • Ubuntu 14.04

有关完整的平台支持矩阵,请参阅平台支持

MongoDB工具

mongoreplay 命令支持一个新的MONGOREPLAY_HOST环境变量,该变量在运行 mongoreplay play时指定mongoDB连接字符串。可以使用新的环境变量来代替命令行 --host 选项。

例如,要将录音播放到在mongodb1.example.net:27017上运行身份验证的mongod实例,您可以在以下位置指定连接字符串:

  • MONGOREPLAY_HOST环境变量:

    export MONGOREPLAY_HOST="mongodb://myUserName:s0meD1fficultPassw0rd@mongodb1.example.net:27017/?authSource=admin"
    mongoreplay play -p /some/path/to/my/recording.bson
    
  • --host命令行选项:

    mongoreplay play -p /some/path/to/my/recording.bson --host "mongodb://myUserName:s0meD1fficultPassw0rd@mongodb1.example.net:27017/?authSource=admin"
    

如果指定了--host命令行选项,则--host值将覆盖环境变量。

一般改进

命令

  • 命令listCollections在数据库上进行意向共享锁定。在之前的版本中,该命令对数据库进行共享锁定。
  • 命令 listCollections 及其 mongo shell db.getCollectionInfos() 接受以下选项:
    • nameOnly仅返回集合名称和类型(不需要集合锁)。
    • authorizedCollections允许没有所需权限的用户运行listCollections可以运行命令,withnameOnlynameOnly: true, authorizedCollections: true,以返回用户拥有特权的集合。
  • 命令 serverStatus 及其 mongo shell 助手 db.serverStatus() 在其输出中包括 shardingStatisticsshardingStatistics 包括关于分片集群上元数据刷新的数据。
  • mongo shell 辅助程序 db.collection.drop() 接受写关注选项。
  • 对于在会话中创建的光标,您无法在会话之外调用 getMore。同样,对于在会话之外创建的光标,您无法在会话中调用 getMore
  • dbHash命令在其输出中包含以下字段:
    • capped列出大写集合的字段
    • uuids包含集合及其对应的UUID的字段。
  • killOp命令现在支持终止在mongos上运行的查询。当在mongos上运行时,killOp可以杀死在多个碎片中运行的查询。

地理空间查询改进

  • 地理空间查询运算符$near$nearSphere现在支持对分片集合进行查询。
  • 从MongoDB 4.0起,$geoNear聚合运算符和geoNear命令支持使用带有2d索引的minDistance选项。同样,$near$nearSphere支持2d索引的$minDistance选项。以前,minDistance$minDistance仅适用于2dsphere索引。
  • MongoDB 4.0为$geoNear聚合运算符和geoNear命令添加了一个key选项,使用户能够在查询具有多个地理空间索引的集合时指定要使用的地理空间索引。以前,要使用$geoNear聚合运算符或geoNear命令,集合只能有一个地理空间索引。

网络层改进

配置选项

杂项

  • 默认情况下,JavaScript引擎的JIT编译器现在被禁用。
  • 将MozJS升级到ESR 45.9.0。
  • RECOVERY组件添加到日志消息中。
  • MongoDB 4.0 增加了对使用 appName 连接字符串的选项支持,用于在从mongo shell 连接时设置自定义应用程序名称。以前,只有MongoDB驱动程序支持使用 appName设置自定义值,mongo shell 使用默认MongoDB Shell 值作为应用程序名称。
  • 添加 mongo shell 方法 convertShardKeyToHashed() 以返回文档的哈希值。
  • 按照配置解析localhostIP地址,而不是假设127.0.0.1
  • 当使用 DNS Seed List Connection Format 通过身份验证连接到mongo shell 时,mongo shell 现在会在启动时提示用户提供密码。

影响兼容性的变化

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

升级程序

功能兼容性版本

要升级,3.6实例必须将featureCompatibilityVersion设置为3.6。要检查版本:

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

有关验证和设置featureCompatibilityVersion的具体详细信息,以及有关升级的其他先决条件/考虑的信息,请参阅单独的升级说明:

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

下载

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

另见:

所有第三方许可通知

4.0.3中的已知问题

  • WT-4018:MongoDB 4.0可能会在macOS 10.12.x、10.13.x和10.14.0的不干净关机期间丢失数据。Apple 在 macOS 10.14.1 中修复了这个问题。
  • 服务器-35431:回滚后,collStatsdbStats输出中报告的“dataSize”字段可能不准确。

4.0.2中的已知问题

  • WT-4018:MongoDB 4.0可能会在macOS 10.12.x、10.13.x和10.14.0的不干净关机期间丢失数据。Apple 在 macOS 10.14.1 中修复了这个问题。
  • 服务器-35431:回滚后,collStatsdbStats输出中报告的“dataSize”字段可能不准确。
  • 服务器-35657:使用具有单成员副本集的多文档事务可能会对性能产生重大影响。单成员复制集仅应用于测试/开发目的,不建议用于生产。

笔记:

单成员副本集上的多文档事务性能并不表示具有多个成员的副本集的性能。

4.0.1中的已知问题

  • WT-4018:MongoDB 4.0可能会在macOS 10.12.x、10.13.x和10.14.0的不干净关机期间丢失数据。Apple 在 macOS 10.14.1 中修复了这个问题。
  • 服务器-35431:回滚后,collStatsdbStats输出中报告的“dataSize”字段可能不准确。
  • 服务器-35657:使用具有单成员副本集的多文档事务可能会对性能产生重大影响。单成员复制集仅应用于测试/开发目的,不建议用于生产。

笔记:

单成员副本集上的多文档事务性能并不表示具有多个成员的副本集的性能。

4.0.0中的已知问题

  • 工具-1952:运行MongoDB 4.0的用户mongodump与之前的版本相比,性能可能会较慢。跑步mongodump使用--forceTableScan可以解决性能问题。
  • 工具-2058mongoreplay没有显示MongoDB 4.0的插入/查找命令。# 修复在4.0.1
  • WT-4018:MongoDB 4.0可能会在macOS 10.12.x、10.13.x和10.14.0的不干净关机期间丢失数据。Apple 在 macOS 10.14.1 中修复了这个问题。
  • 服务器-35431:回滚后,collStatsdbStats输出中报告的“dataSize”字段可能不准确。
  • 服务器-35657:使用具有单成员副本集的多文档事务可能会对性能产生重大影响。单成员复制集仅应用于测试/开发目的,不建议用于生产。

笔记:

单成员副本集上的多文档事务性能并不表示具有多个成员的副本集的性能。

  • 服务器-35758:如果您使用与全局对象关联的会话来运行事务,则 mongo shell 中的shell提示符将导致错误

报告问题

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

译者:韩鹏帅 参见

原文 - Release Notes for MongoDB 4.0

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

results matching ""

    No results matching ""