setIndexCommitQuorumEl comando
setIndexCommitQuorumestablece el número mÃnimo de nodos portadores de datos que deben estar preparados para confirmar sus creaciones de Ãndices locales antes de que el nodo primario confirme el Ãndice.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
- MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Nota
Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El comando tiene la siguiente sintaxis:
db.runCommand( { setIndexCommitQuorum: <string>, indexNames: [ <document> ], commitQuorum: <int> | <string>, comment: <any> } )
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| El nombre de la colección para la que se están construyendo los Ãndices. | |
| Un arreglo de creaciones de Ãndices en progreso para modificar. Cada elemento del arreglo debe ser el nombre del Ãndice. Los Ãndices especificados para | |
| El número mÃnimo de miembros con datos en un set de réplicas (es decir, quórum de confirmación), incluido el principal, que debe informar una creación de Ãndices exitosa antes de que el primario marque el Puede reanudar algunas creaciones de Ãndices interrumpidas cuando el quórum de confirmación está configurado en el valor por defecto Para actualizar el commitQuorum, los nodos de set de réplicas miembros deben tener Admite los siguientes valores:
| |
| any | Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.). |
Comportamiento
Nota
Requiere featureCompatibilityVersion 4.4+
Cada mongod en el set de réplicas o clúster debe tener featureCompatibilityVersion configurada al menos en 4.4 para iniciar la creación de Ãndices simultáneamente en los miembros del set de réplicas.
La creación de Ãndices es un proceso multietapa. El proceso de creación de Ãndices utiliza el commit quorum para minimizar el atraso de la replicación en los nodos secundarios.
Cuando un nodo secundario recibe un registro oplog de commitIndexBuild, el nodo detiene otras aplicaciones de oplog hasta que la creación de Ãndices local pueda ser confirmada. La creación de Ãndices puede tardar desde momentos hasta dÃas en completarse, por lo que el atraso de la replicación puede ser significativo si el nodo secundario se crea más lentamente que el primario.
Para gestionar el atraso de la replicación, el quórum de confirmación retrasa la confirmación de la creación del Ãndice en el nodo principal hasta que un número mÃnimo de secundarios también estén listos para confirmar la creación del Ãndice.
El quórum de confirmación no garantiza que los Ãndices en los secundarios estén listos para su uso cuando el comando se complete. Para asegurar que un número especÃfico de secundarios estén listos para su uso, establece un nivel de confirmación de escritura (write concern)adecuado.
Si un nodo secundario que no está incluido en el quórum de confirmación recibe una entrada de oplog commitIndexBuild, el nodo puede bloquear la replicación hasta que su creación de Ãndices esté completa.
Emitir setIndexCommitQuorum no tiene efecto en la creación de Ãndices iniciada con un commitQuorum de 0.
Importante
Los nodos del set de réplicas con buildIndexes configurados en false no pueden incluirse en un quórum de confirmación.
Quórum de confirmación en contraste con el nivel de confirmación de escritura
Existen diferencias importantes entre quórums de confirmación y niveles de confirmación de escritura:
Las compilaciones de Ãndices utilizan quórums de confirmación.
Las operaciones de escritura usan nivel de confirmación de escritura (write concern).
Cada nodo que lleva datos en un clúster es un miembro votante.
El quórum de confirmación especifica cuántos miembros votantes portadores de datos, o cuáles miembros votantes, incluido el primario, deben estar preparados para confirmar una creación de Ãndices simultánea antes de que el primario ejecute la confirmación.
El nivel de confirmación de escritura (write concern) es el nivel de confirmación que la operación de escritura ha alcanzado en el número especificado de instancias.
El quórum de confirmación especifica cuántos nodos deben estar listos para finalizar la creación de Ãndices antes de que el primario confirme la creación de Ãndices. Por el contrario, cuando el primario ha realizado la creación de Ãndices, el nivel de confirmación de escritura (write concern) especifica cuántos nodos deben finalizar la creación de Ãndices antes de que el comando devuelva una respuesta.
Ejemplos
La creación de Ãndices en un set de réplicas o en un clúster se realiza simultáneamente en todos los miembros del set de réplicas que contienen datos. Para clústeres fragmentados, la creación de Ãndices solo ocurre en fragmentos que contienen datos para la colección que se está indexando. El primario requiere un número mÃnimo de nodos portadores de datos voting (es decir, quórum de confirmación), incluido él mismo, que deben completar la compilación antes de marcar el Ãndice como listo para usar. Consulta creación de Ãndices en entornos replicados para obtener más información.
La siguiente operación inicia una creación de Ãndices de dos Ãndices:
db.getSiblingDB("examples").invoices.createIndexes( [ { "invoices" : 1 }, { "fulfillmentStatus" : 1 } ] )
Por defecto, las creación de Ãndices utilizan "votingMembers" quórum de confirmación, o todos los miembros portadores de datos con derecho a voto del conjunto de réplicas. La siguiente operación modifica el quórum de confirmación de creación de Ãndices a "majority", o una mayorÃa simple de nodos votantes con datos:.
db.getSiblingDB("examples").runCommand( { "setIndexCommitQuorum" : "invoices", "indexNames" : ["invoices_1", "fullfillmentStatus_1"], "commitQuorum" : "majority" } )
Los Ãndices especificados en
indexNamesdeben ser todo el conjunto de las compilaciones en progreso asociadas a un determinado creador de Ãndices, es decir, la operacióncreateIndexes().El campo
indexNamesespecifica los nombres de los Ãndices. Dado que los Ãndices fueron creados sin un nombre explÃcito, MongoDB generó un nombre de Ãndice concatenando los nombres de los campos indexados y el orden de clasificación.