Overview
En esta guía, puedes aprender a modificar la forma en que el Driver de Go de MongoDB ejecuta las operaciones de creación, lectura, actualización y eliminación (CRUD) mediante las configuraciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura para sets de réplicas.
Puedes establecer las opciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura en los siguientes niveles:
A nivel de cliente, que establece por defecto para todas las ejecuciones de operaciones, a menos que se sobrescriba.
Nivel de sesión
Nivel de transacción
Nivel de base de datos
A nivel de colección
En las siguientes secciones, puede aprender a personalizar la consistencia y la disponibilidad de los datos en sus conjuntos de réplicas.
Nivel de confirmación de escritura
Una preocupación de escritura describe el número de miembros de un conjunto de réplicas que contienen datos y que deben confirmar una operación de escritura, como una inserción o una actualización, antes de que esta se considere exitosa. De forma predeterminada, la preocupación de escritura solo requiere que el miembro principal del conjunto de réplicas confirme la operación de escritura para que esta se considere exitosa.
opciones
El controlador MongoDB Go proporciona el writeconcern Paquete que permite especificar la preocupación de escritura para un conjunto de réplicas. Establezca la preocupación de escritura mediante el método SetWriteConcern() con un tipo WriteConcern. El tipo WriteConcern tiene los siguientes métodos para seleccionar especificaciones comunes de preocupación de escritura:
Método | Descripción |
|---|---|
| The client requests acknowledgement that write operations propagate to
tagged members of a mongod instance. For more
information, see the Write Concern specification.Parameter: string |
| The client requests acknowledgement that write operations are
written to the on-disk journal. For more information, see the
Write Concern specification. Parameter: none |
| The client requests acknowledgement that write operations propagate to the
majority of data-bearing voting members. For more information, see the
Write Concern specification. Parameter: none |
| The client requests requests no acknowledgment of write
operations. For more information, see the
Write Concern specification for w: 0. Parameter: none |
| The client requests acknowledgement that write operations have
been written to memory on one node, such as the standalone mongod or
the primary in a replica set. For more
information, see the Write Concern specification for w: 1. Parameter: none |
Si necesitas un nivel de confirmación de escritura (write concern) más especializado, puedes definir un literal de struct personalizado WriteConcern. Puedes configurar los siguientes campos en una estructura WriteConcern:
Campo | Descripción |
|---|---|
| Specifies the number of mongod instances or tagged members
that write operations must propagate to for acknowledgement. Common values include
1, 0, and "majority".Type: string or int |
| Specifies if write operations must be written to the on-disk
journal for acknowledgement. Type: bool |
| Specifies a time limit for the write concern. This setting is
applicable only for W values greater than 1. Specifying this
setting and specifying a Timeout on the client at the same time
results in undefined behavior. To learn more, see the
Write Concern specification for wtimeout.Type: time.Duration |
Tip
También puede especificar un problema de escritura en su cadena de conexión. Consulte la entrada del manual del servidor sobre opciones de problemas de escritura para obtener más información.
Ejemplo
El siguiente código muestra cómo especificar diferentes preocupaciones de escritura a nivel de cliente y de colección. La preocupación de escritura a nivel de cliente solicita la confirmación de dos miembros del conjunto de réplicas y establece el registro en diario false en. La preocupación de escritura a nivel de colección solicita la confirmación de la mayoría de los miembros del conjunto de réplicas.
uri := "mongodb://<hostname>:<port>" journal := false cliWC := &writeconcern.WriteConcern{ W: 2, Journal: &journal, } clOpts := options.Client().ApplyURI(uri).SetWriteConcern(cliWC) client, err := mongo.Connect(context.TODO(), clOpts) ... collWC := writeconcern.Majority() collOpts := options.Collection().SetWriteConcern(collWC) coll := client.Database("db").Collection("myColl", collOpts)
readConcern
La opción de lectura permite determinar qué datos devuelve el cliente tras una consulta. El nivel de lectura predeterminado es "local", lo que significa que el cliente devuelve los datos más recientes de la instancia, sin garantía de que se hayan escrito en la mayoría de los miembros del conjunto de réplicas.
opciones
El controlador Go de MongoDB proporciona el paquete readconcern, que te permite especificar el nivel de consistencia de lectura para un set de réplicas. Establece el nivel de consistencia de lectura utilizando el método SetReadConcern() con un tipo ReadConcern. El tipo ReadConcern tiene los siguientes métodos para especificar el nivel de consistencia de lectura:
Método | Descripción |
|---|---|
| La query devuelve datos de la instancia sin garantía de que los datos hayan sido escritos en la mayoría de los miembros del set de réplicas. Para obtener más información, consulte la especificación de nivel de consistencia de lectura. |
| La query devuelve datos que reflejan todas las escrituras exitosas emitidas con un nivel de confirmación de escritura (write concern) de |
| La query devuelve los datos más recientes de la instancia. Para obtener más información, consulte la especificación de nivel de consistencia de lectura. |
| La consulta devuelve los datos más recientes de la instancia que se reconocen como escritos por la mayoría de los miembros del conjunto de réplicas. Para obtener más información, consulte la especificación de Read Concern. |
| La consulta devuelve una copia completa de los datos en una |
Ejemplo
El siguiente código muestra cómo especificar una preocupación de lectura de "mayoría". El código selecciona un Collection con esta opción.
rc := readconcern.Majority() opts := options.Collection().SetReadConcern(rc) database := client.Database("db") coll := database.Collection("myCollection", opts)
preferencia de lectura
La opción de preferencia de lectura especifica cómo el cliente MongoDB enruta las operaciones de lectura a los miembros de un conjunto de réplicas. De forma predeterminada, una aplicación dirige sus operaciones de lectura al miembro principal de un conjunto de réplicas.
La preferencia de lectura consiste en el modo de preferencia de lectura y, opcionalmente, una lista de conjunto de etiquetas, la opción maxStalenessSeconds y la opción lectura protegida.
opciones
El MongoDB Go Driver proporciona el paquete readpref, que permite especificar la preferencia de lectura para un set de réplicas. Configura la preferencia de lectura usando el método SetReadPreference() con un tipo ReadPref. El tipo ReadPref tiene los siguientes métodos para especificar la preferencia de lectura:
Método | Descripción |
|---|---|
| El cliente lee de un miembro de set de réplicas elegible aleatorio, primario o secundario, en función de un umbral de latencia específico. Para obtener más información, consulte la entrada del manual de Preferencias de Lectura del Servidor. |
| El cliente lee desde el nodo primario actual del set de réplicas. Para obtener más información, consulte la entrada del manual de Preferencias de Lectura del Servidor. |
| El cliente lee desde el nodo primario en la mayoría de las situaciones. Si la primaria no está disponible, las operaciones se leen de los miembros secundarios. Para obtener más información, consulta la entrada del manual sobre Preferencia de lectura de servidor. |
| El cliente lee desde los miembros secundarios del set de réplicas. Para obtener más información, consulta la entrada del manual del servidor de preferencia de lectura. |
| El cliente lee desde los nodos secundarios en la mayoría de las situaciones. Si las secundarias no están disponibles, las operaciones se leen desde el miembro primario. Para obtener más información, consulta la entrada del manual sobre Preferencia de lectura de servidor. |
Tip
Como alternativa, puedes especificar una preferencia de lectura en tu cadena de conexión. Consulta la entrada del manual del servidor sobre Opciones de Preferencia de Lectura para obtener más información.
Ejemplo
El siguiente código muestra cómo puedes especificar una preferencia de lectura para leer desde nodos secundarios. A continuación, el código selecciona un Database con esta opción.
rp := readpref.Secondary() opts := options.Database().SetReadPreference(rp) database := client.Database("db", opts)
Información Adicional
Para obtener más información sobre los conceptos de esta guía, consulte la siguiente documentación del servidor: