Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

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()操作构建的索引。

int or string

承载数据的副本集成员的最小数量(即提交法定节点数),包括主节点,必须在主节点将 indexes 标记为就绪之前报告索引构建成功。

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

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

支持以下值:

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

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

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

  • 副本集标记名称

comment
any

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

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

注意

需要 featureCompatibilityVersion 4.4+

副本集或分片集群中的每个 mongod 必须featureCompatibilityVersion 设置为至少 4.4,才能跨副本集节点同时启动索引构建。

索引创建是一个多阶段进程。 索引创建进程使用commit quorum来从节点(secondary node from replica set)地减少从节点上的复制延迟。

当从节点收到commitIndexBuild oplog 条目时,该节点会停止进一步的 oplog 应用程序,直到可以提交本地索引构建。 索引构建可能需要几分钟到几天的时间才能完成,因此如果从节点的构建速度慢于主节点,复制延迟可能会很大。

为了管理复制延迟,提交法定人数延迟在主节点 (primary node in the replica set)节点上提交索引构建,直到最少数量的从节点也准备好提交索引构建。

提交法定人数不能保证命令完成时从节点上的索引已准备好可供使用。 为确保有特定数量的从节点可供使用,请设置适当的写关注(write concern)。

如果未包含在提交法定人数中的从节点收到commitIndexBuild oplog 条目,则该节点可能会阻止复制,直到其索引构建完成。

发出setIndexCommitQuorum对使用0commitQuorum启动的索引构建没有影响。

重要

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

提交法定人数写关注之间有重要区别:

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

  • 写入操作使用写关注。

集群中的每个承载数据的节点均为一个有投票权成员。

提交法定人数指定了必须准备多少个承载数据的有投票权节点,或是哪些有投票权节点(包括主节点)来提交同步索引构建。主节点才会执行提交。

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

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

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

索引构建在副本集或分片集群上,并在所有数据承载副本集成员上同时构建。对于分片集群,索引构建仅会在包含当前被索引集合的数据的分片上进行。主节点需要最少数量的数据承载 voting 节点(即提交法定节点数),包括其自身,这些节点必须在将索引标记为可供使用之前完成构建。 有关详细信息,请参阅复制环境中的索引构建

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

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