共计 4259 个字符,预计需要花费 11 分钟才能阅读完成。
深入理解 MongoDB3.6 新特性
Default Bind to Localhost
3.6 版本起,默认使用 localhost(127.0.0.1), 多个 ip 使用逗号分隔:localhost,198.51.100.1
除去部分 2.6 RPM 安装包是本地外,其余版本默认是 All interfaces.
Authentication Restrictions
3.6 版本起,新增 authenticationRestrictions
参数用于将数据库用户连接限制为指定的 IP 地址,请将 authenticationRestrictions 参数添加到以下内容:
Commands Methods
createUser db.createUser()
updateUser db.updateUser()
createRole db.createRole()
updateRole db.updateRole()
其他安全性增强功能
在使用 TLS / SSL 加密时,添加了 opensslCipherConfig
参数来控制 OpenSSL 密码。
如果启用了身份验证,则只能针对您创建的游标发出 getMore。
添加了 convertToCapped 操作来恢复角色。
Change Streams
MongoDB 3.6 支持使用副本集或分片使用 Change Streams。必须是复制协议版本 1,且 WT 存储引擎。
Change Streams 允许应用程序实时了解到数据的更改,而不会增加 tail oplog 的复杂性和风险。应用程序可以使用 Change Streams 来订阅集合上的所有数据更改,并立即响应这些更改。
您可以使用 db.collection.watch()方法从任何 3.6 系列驱动程序打开更改流。有关使用的完整说明,请参阅您的首选驱动程序的文档。
使用 Change Streams 必须开启 3.6 版本特性参数 featureCompatibilityVersion
see https://docs.mongodb.com/master/reference/command/setFeatureCompatibilityVersion/#view-fcv
当数据到达集群中 majority 成员时,Change Streams 才会立即通知客户端响应这些更改。
在开启权限的集群中,应用只能够使用 Change Streams 访问有权限的库和集合。
cursor = db.inventory.watch()
document = next(cursor)
Lookup Full Document for Update Operations
full_document 来看完整而非增量的版本
cursor = db.inventory.watch(full_document=’updateLookup’)
document = next(cursor)
Resume a Change Stream
resume_token = document.get(“_id”)
cursor = db.inventory.watch(resume_after=resume_token)
document = next(cursor)
Causal Consistency
需要客户端使用 MongoDB driver 3.6 版本,以及需要数据库开启 3.6 特性参数 featureCompatibilityVersion
Retryable Writes
重试只会重试 1 次,。对于可重试写入,MongoDB 驱动程序会在遇到网络错误或遇到副本集故障转移时自动重试这些操作,在此期间副本集没有 primary。
限制:
1. 只有副本集和 shard 可用
2. 数据库要求 WT 或 in-memory 存储引擎
3. 需要客户端使用 MongoDB driver 3.6 版本,以及需要,开启 3.6 特性参数 featureCompatibilityVersion。
4.writeconcern 必须配置,i.e{w:0} 不可用。
5. 由于重试尝试只进行一次,可重试功能可以帮助解决暂时的网络错误,但不能解决持久的网络错误。
6. 驱动程序将等待 serverSelectionTimeoutMS 秒,以在重试之前确定新的主节点。可重试功能不会处理故障转移期超过 serverSelectionTimeoutMS 的情况。
注意:如果客户端应用程序在发出写入操作后暂时无法响应 localLogicalSessionTimeoutMinutes,则当客户端应用程序开始响应(不重新启动)时,写入操作可能会重试并重新应用。
serverstatus
serverStatus 新增 logicalSessionRecordCache 项.
JSON Schema
MongoDB 3.6 添加了 $ jsonSchema 操作符来支持使用 JSON Schema 进行文档验证。有关详细信息,请参阅 $ jsonSchema。
Replica Sets
弃用副本集协议版本 0(pv0)。
添加了 replSetResizeOplog
命令来 动态调整
副本集成员的 oplog 的大小。适用于运行 WiredTiger
存储引擎的实例。
添加了 catchUpTakeoverDelayMillis
配置选项,指定节点在发起选举之前等待的时间,默认 30 秒。
对于使用协议版本 1(pv1)的副本集,如果仲裁人发现与候选人有相同或更高优先级的节点在,他们将在选举中投票反对票。
添加 oplogInitialFindMaxSeconds
参数来调整副本集的成员在数据同步期间其 find 命令等待多久。默认 60s
增加了 waitForSecondaryBeforeNoopWriteMS
参数,以指定如果 afterClusterTime 大于 oplog 的最近应用时间,则 secondary 服务器必须等待多长时间。默认 10 毫秒
Sharded Clusters
为 mongos 添加了 ShardingTaskExecutorPoolMaxConnecting 参数,以控制 mongos 将连接添加到 mongod 实例的速率。默认是 2,仅对 mongos 有效
添加了 orphanCleanupDelaySecs,它确定从源分片中删除迁移块之前的最小延迟。
现在可以对 config 数据库中的 config.system.sessions 集合进行分片。
Indexes
索引可以覆盖嵌套文档中字段的查询。
如果索引跟踪到哪个字段使其成为多键,则多键索引可以覆盖对非数组键的查询。
创建索引时,不能将 * 指定为索引的名称。
listdatabase
db.adminCommand({ listDatabases: 1, nameOnly: true} ) 添加了 nameOnly 执行命令时不会加锁,而不添加的话会请求库级锁。
db.adminCommand({ listDatabases: 1, filter: { “name”: /^rep/} } ) filter 会过滤想看的数据库,支持正则表达式
修改了 validate 命令和 db.collection.validate()方法的行为,只有 WiredTiger 存储引擎强制执行检查点,将所有内存中的数据刷新到磁盘,然后验证磁盘上的数据。
• The .system.profile entry for update and delete contains the entire update/delete document applied to the named collection.
dropDatabase
dropDatabase 命令会等待 drop 完所有集合的命令传播到大部分副本集成员后执行。
对于在副本集和分片集群上运行的命令,响应文档包括 operationTime 和 $ clusterTime。
Read Concern
新增 available,对于非分片集群,“local”和“available”行为是相同的。对于分片群集,“available”提供了对分区的更大容忍度,但如果分片正在进行块迁移,则可能会返回孤立文档。
总结
MongoDB3.6 的诸多新特性中,限于时间和篇幅原因未能在本文全部阐述,可以看出多种新特性在存储引擎上的选择都要求使用 WiredTiger
存储引擎,该存储引擎也是 MongoDB3.0 版本起开始支持,MongoDB3.2 版本起默认的存储引擎。多种新特性中,最让我感到开心的是动态调整 oplog 大小,这个对于传统 oplog 扩容来说,方便了非常之多,停机调整 oplog 大小的时代即将终结。由于编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。
更多 MongoDB 相关教程见以下内容:
MongoDB 文档、集合、数据库简介 http://www.linuxidc.com/Linux/2016-12/138529.htm
MongoDB 3 分片部署及故障模拟验证 http://www.linuxidc.com/Linux/2016-12/138529.htm
Linux CentOS 6.5 yum 安装 MongoDB http://www.linuxidc.com/Linux/2016-12/137790.htm
CentOS 7 yum 方式快速安装 MongoDB http://www.linuxidc.com/Linux/2016-11/137679.htm
MongoDB 的查询操作 http://www.linuxidc.com/Linux/2016-10/136581.htm
在 Azure 虚拟机上快速搭建 MongoDB 集群 http://www.linuxidc.com/Linux/2017-09/146778.htm
MongoDB 复制集原理 http://www.linuxidc.com/Linux/2017-09/146670.htm
MongoDB 3.4 远程连接认证失败 http://www.linuxidc.com/Linux/2017-06/145070.htm
Ubuntu 16.04 中安装 MongoDB3.4 数据库系统 http://www.linuxidc.com/Linux/2017-07/145526.htm
MongoDB 权威指南第 2 版 PDF 完整带书签目录 下载见 http://www.linuxidc.com/Linux/2016-12/138253.htm
MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149253.htm