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:
Una preocupación escrita de
w: "majority"requiere la confirmación de que las operaciones de escritura se han confirmado de forma duradera ante 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 prioridad de escritura predeterminada.Una inquietud de escritura de
w: 1solo requiere el reconocimiento del miembro del conjunto de réplicas principal antes de devolver el reconocimiento de inquietud de escritura.Una solicitud de escritura con un valor numérico superior a
1requiere la confirmación del servidor principal y de tantos servidores secundarios como sea necesario para alcanzar el valor especificado. Los servidores secundarios no necesitan ser miembros con derecho a voto para alcanzar el umbral de solicitud de escritura. El valor especificado de la solicitud de escritura no puede ser mayor que el número total de miembros con datos en el conjunto de réplicas.
Para obtener documentación completa sobre el comportamiento de reconocimiento de escritura, consulte Comportamiento de reconocimiento.
Una aplicación que emite una operación de escritura que requiere confirmación de escritura espera hasta que la aplicación principal reciba confirmación del número requerido de miembros para la solicitud de escritura especificada. Para solicitudes de escritura de w mayores que 1 o w : "majority", la aplicación principal espera hasta que el número requerido de miembros secundarios confirmen la escritura antes de devolver la confirmación. Para solicitudes de escritura de w: 1, la aplicación principal puede devolver la confirmación en cuanto aplique la escritura localmente, ya que es elegible para contribuir a la solicitud de escritura.
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.
La selección del problema de escritura ideal para cada operación de escritura depende de los objetivos de rendimiento de la aplicación y de los requisitos de durabilidad de los datos. Para obtener más información sobre cómo configurar el problema de escritura para evitar reversiones, consulte "Evitar reversiones de conjuntos de réplicas".
Verificar operaciones de escritura en conjuntos de réplicas
La siguiente operación incluye la opción writeConcern para el métodoinsertOne(). La operación especifica: - el problema de escritura"majority"y - un tiempo de espera de 5 segundos.
El parámetro de escritura garantiza que la operación no se bloquee wtimeout 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 3conjunto de réplicas (PSS) de miembros, la operación requeriría la confirmación de 2 de los 3 miembros. Si el conjunto de réplicas se escalara posteriormente para incluir dos miembros secundarios con derecho a voto adicionales, la misma operación requeriría la confirmación de 3 de los miembros del 5 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 agota el tiempo de espera del problema de escritura especificado solo indica que el número requerido de miembros del conjunto de réplicas no confirmó la operación de escritura dentro del período wtimeout. No significa necesariamente que el servidor principal no haya podido aplicar la escritura. Los datos pueden existir en un subconjunto de nodos del conjunto de réplicas en el momento del error de problema de escritura y pueden continuar replicándose hasta que todos los nodos del clúster los tengan. Las aplicaciones deben tener en cuenta la posible disponibilidad de los datos escritos, independientemente del estado del acuse de recibo del problema de escritura.
La sintaxis exacta para especificar la preocupación de escritura depende de la operación de escritura. Consulte la documentación de la operación de escritura para obtener instrucciones sobre la compatibilidad y la sintaxis de la preocupación de escritura. Para obtener la documentación completa sobre la preocupación de escritura, consulte "Preocupación de escritura".
Modificar la preocupación de escritura predeterminada
Puede modificar la preocupación de escritura predeterminada para un conjunto de réplicas emitiendo el setDefaultRWConcern comando.
Si emite una operación de escritura con una preocupación de escritura específica, la operación de escritura utiliza su propia preocupación de escritura en lugar de la predeterminada.
Preocupaciones sobre la escritura personalizada
Puede etiquetar a los miembros de los conjuntos de réplicas y usar los conjuntos de etiquetas resultantes para crear preocupaciones de escritura personalizadas. Consulte "Configurar conjuntos de etiquetas de conjuntos de réplicas" para obtener información sobre cómo configurar preocupaciones de escritura personalizadas mediante conjuntos de etiquetas.