文档菜单
文档首页
/
MongoDB 手册
/ / /

setIndexCommitQuorum

本页内容

  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 示例
setIndexCommitQuorum

setIndexCommitQuorum命令设置最小数据承载成员数,在主节点提交索引之前,这些成员必须准备好提交其本地索引构建。

此命令在以下环境中的部署中可用

  • MongoDB Atlas:MongoDB在云中的托管服务

注意

此命令在所有MongoDB Atlas集群中受支持。有关Atlas对所有命令的支持信息,请参阅不受支持的命令。

  • MongoDB Enterprise:基于订阅的、自行管理的MongoDB版本

  • MongoDB Community:源代码可用、免费使用和自行管理的MongoDB版本

命令具有以下语法

db.runCommand(
{
setIndexCommitQuorum: <string>,
indexNames: [ <document> ],
commitQuorum: <int> | <string>,
comment: <any>
}
)

命令接受以下字段

字段
类型
描述
string

正在构建索引的集合名称。

array

要修改的正在进行的索引构建数组。数组中的每个元素必须是索引的 名称

指定给 indexNames 的索引必须是与给定索引构建器关联的正在进行的构建的完整集合,即单个 createIndexesdb.collection.createIndexes() 操作构建的索引。

intstring

必须报告成功构建的索引的最小数据承载副本集成员数(即提交法定人数),包括主节点。

从 MongoDB v5.0 开始,当提交法定人数设置为 "votingMembers" 时,可以恢复一些 中断的索引构建

要更新commitQuorum,成员副本集节点必须将members[n].buildIndexes设置为true。如果任何投票节点将members[n].buildIndexes设置为false,则无法使用默认的"votingMembers"提交法定人数。要么将所有节点的members[n].buildIndexes设置为true,要么选择不同的提交法定人数。

支持以下值

  • "votingMembers" - 所有承载数据的投票副本集成员(默认)。任何members[n].votes大于0的副本集成员都是“投票”成员。

  • "majority" - 承载数据的副本集成员的简单多数。

  • <int> - 承载数据的副本集成员的特定数量。指定一个大于0的整数。

  • 副本集标签名称。

注释
任何

可选。为该命令提供用户注释。一旦设置,此注释将出现在以下位置的该命令记录旁边

注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。

注意

需要featureCompatibilityVersion 4.4+

副本集或分片集群中的每个mongod都必须将featureCompatibilityVersion设置为至少4.4,以在副本集成员间同时启动索引构建。

索引创建是一个多阶段过程。索引创建过程使用提交法定人数来最小化次要节点上的复制延迟。

当从节点接收到一个 commitIndexBuild 操作日志条目时,该节点会停止进一步的操作日志应用,直到本地索引构建可以提交。索引构建可能需要从几秒钟到几天的时间来完成,因此如果从节点构建速度比主节点慢,则复制延迟可能会很大。

为了管理复制延迟,提交法定人数将延迟在主节点上提交索引构建,直到达到最小数量的从节点也准备提交索引构建。

提交法定人数不能保证命令完成时从节点的索引可以使用。为了确保特定数量的从节点可以使用,请设置适当的 写入关注点。

如果一个不包括在提交法定人数中的从节点接收到一个 commitIndexBuild 操作日志条目,该节点可能会阻塞复制,直到其索引构建完成。

使用 setIndexCommitQuorum 对使用 commitQuorum0 开启的索引构建没有影响。

重要

buildIndexes 设置为 false 的副本集节点不能包括在提交法定人数中。

提交法定人数写入关注点 之间存在重要差异:

  • 索引构建使用提交法定人数。

  • 写操作使用写入关注点。

集群中的每个数据承载节点都是一个投票成员。

提交法定人数指定了在主节点执行提交之前,必须有多少数据承载投票成员或哪些投票成员(包括主节点)准备好执行一个 同时索引构建

写入关注点是写入已传播到指定数量的实例的确认级别。

已更改在版本8.0: 提交法定人数指定了在主节点提交索引构建之前,必须有多少节点准备好完成索引构建。相比之下,当主节点提交索引构建时,写入关注点指定了在命令返回成功之前,必须有多少节点复制索引构建操作日志条目。

在之前的版本中,当主节点提交索引构建时,写入关注点指定了在命令返回成功之前,必须有多少节点完成索引构建。

索引构建是在副本集或分片集群构建的基础上,同时在整个数据副本集成员上进行的。对于分片集群,索引构建仅发生在包含被索引集合数据的分片上。主节点需要一个最小数量的数据承载投票成员(即提交多数),包括自身,在标记索引为可使用之前必须完成构建。有关更多信息,请参阅复制环境中的索引构建

以下操作启动两个索引的索引构建

db.getSiblingDB("examples").invoices.createIndexes(
[
{ "invoices" : 1 },
{ "fulfillmentStatus" : 1 }
]
)

默认情况下,索引构建使用"votingMembers"提交多数,即所有数据承载的投票副本集成员。以下操作将索引构建提交多数更改为"majority",即简单多数的数据承载投票成员:

db.getSiblingDB("examples").runCommand(
{
"setIndexCommitQuorum" : "invoices",
"indexNames" : ["invoices_1", "fullfillmentStatus_1"],
"commitQuorum" : "majority"
}
)
  • 指定给indexNames的索引必须是与给定索引构建器相关联的整个正在进行中的构建集,即createIndexes()操作。

  • indexNames字段指定了索引的名称。由于索引是在没有显式名称的情况下创建的,MongoDB通过连接索引字段的名称和排序顺序生成了索引名称。

返回

setFeatureCompatibilityVersion