Nivel de confirmación de escritura (write concern) para sets de réplicas describe el número de miembros que contienen datos (es decir, el primario y los secundarios, pero no los árbitros) que deben reconocer una operación de escritura antes de que la operación se considere exitosa. Un nodo solo puede reconocer una operación de guardar después de haberla recibido y aplicado correctamente.
Para set de réplicas:
Un nivel de confirmación de escritura (write concern) de
w: "majority"requiere la confirmación de que las operaciones de guardado se han confirmado de forma duradera en una mayoría calculada de los miembros con derecho a voto que contienen datos. Para la mayoría de las configuraciones de conjuntos de réplicas,w: "majority"es la preocupación de escritura predeterminada.Una
w: 1de nivel de confirmación de escritura (write concern) sólo requiere el reconocimiento del miembro primario del conjunto de réplicas antes de devolver el reconocimiento de nivel de confirmación de escritura (write concern).Una nivel de confirmación de escritura (write concern) con un valor numérico superior a
1requiere acuse de recibo por parte del primario y de tantos secundarios como sean necesarios para cumplir con el valor especificado. Las secundarias no necesitan ser miembros con derecho a voto para cumplir con el umbral de nivel de confirmación de escritura (write concern). El valor de nivel de confirmación de escritura (write concern) especificado no puede ser mayor que el número total de nodos que almacenan datos en el conjunto de réplicas.
Para la documentación completa sobre el comportamiento de reconocimiento de guardado, consulta Comportamiento de reconocimiento.
Una aplicación que realiza una operación de escritura que requiere acuse de recibo de nivel de confirmación de escritura (write concern) espera hasta que el primario reciba acuse de recibo de los nodos requeridos para el nivel de confirmación de escritura (write concern) especificado. Para nivel de confirmación de escritura (write concern) de w mayor que 1 o w : "majority", el primario espera hasta que el número requerido de secundarios reconozca la escritura antes de devolver la confirmación del nivel de confirmación de escritura (write concern). Para nivel de confirmación de escritura (write concern) de w: 1, el primario puede devolver un reconocimiento de nivel de confirmación de escritura (write concern) tan pronto como aplique localmente el guardado, ya que está capacitado para contribuir al nivel de confirmación de escritura (write concern) solicitado.
Cuantos más miembros confirmen una escritura, menor será la probabilidad de que los datos escritos se reviertan si falla el servidor principal. Sin embargo, especificar un nivel alto de preocupación por la escritura puede aumentar la latencia, ya que el cliente debe esperar hasta recibir el nivel de confirmación solicitado.
Seleccionar el nivel de confirmación de escritura (write concern) ideal para cualquier operación de escritura dada depende de los objetivos de rendimiento de tu aplicación y de los requisitos de durabilidad de los datos. Para obtener más orientación sobre cómo configurar el nivel de confirmación de escritura (write concern) para evitar rollbacks, consulte Evitar rollbacks en el set de réplicas.
Verificar operaciones de guardar en sets de réplicas
La siguiente operación incluye la opción writeConcern para el método insertOne(). La operación especifica: - la "majority" nivel de confirmación de escritura (write concern), y - un tiempo de espera de 5 segundos.
El parámetro wtimeout de nivel de confirmación de escritura (write concern) garantiza que la operación no se bloquee indefinidamente.
db.products.insertOne( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: "majority" , wtimeout: 5000 } } )
La aplicación espera hasta que el primario devuelva la confirmación de escritura, lo que indica que una mayoría calculada de los miembros con derecho a voto que contienen datos confirmaron la operación de escritura. Por ejemplo, en un conjunto de réplicas (PSS) de 3 miembros, la operación requeriría la confirmación de 2 de los 3 miembros. Si el conjunto de réplicas se ampliara posteriormente para incluir dos miembros secundarios con derecho a voto adicionales, la misma operación requeriría la confirmación de 3 de los 5 miembros del conjunto de réplicas. Si el primario no devuelve la confirmación de escritura dentro del wtimeout límite de, la operación de escritura falla con un error de escritura.
Una operación de escritura que se agota esperando el nivel de confirmación de escritura (write concern) especificado solo indica que el número requerido de miembros del conjunto de réplicas no reconoció la operación de escritura dentro del periodo de tiempo wtimeout. Esto no implica necesariamente que el principal haya fallado en aplicar el guardar. Los datos pueden existir en un subconjunto de nodos del set de réplicas en el momento del error de nivel de confirmación de escritura (write concern), y pueden seguir replicándose hasta que todos los nodos del clúster tengan esos datos. Las aplicaciones deben tener en cuenta la posible disponibilidad de datos escritos independientemente del estado de reconocimiento del nivel de confirmación de escritura (write concern).
La sintaxis exacta para especificar el nivel de confirmación de escritura (write concern) depende de la operación de escritura. Consulte la documentación de la operación de escritura para obtener instrucciones sobre el soporte y la sintaxis del nivel de confirmación de escritura (write concern). Para una documentación completa sobre el nivel de confirmación de escritura (write concern), consulta nivel de confirmación de escritura (write concern).
Modificar el nivel de confirmación de escritura (write concern) por defecto
Puede modificar la preocupación de escritura predeterminada para un conjunto de réplicas emitiendo el setDefaultRWConcern comando.
Si se realiza una operación de escritura con un nivel de confirmación de escritura (write concern) específico, la operación de escritura usa su propio nivel de confirmación de escritura (write concern) en lugar del predeterminado.
Preocupaciones sobre la escritura personalizada
Puedes etiquetar a los nodos de los sets de réplicas y utilizar los conjuntos de etiquetas resultantes para crear niveles de confirmación de escritura (write concern) personalizadas. Consulta Configurar Conjuntos de Etiquetas de set de réplicas para obtener información sobre cómo configurar nivel de confirmación de escritura (write concern) Personalizados usando conjuntos de etiquetas.