Docs Menu
Docs Home
/ /

Modificar la ejecución de operaciones CRUD

En esta guía, puede aprender cómo modificar la forma en que el controlador MongoDB Go ejecuta operaciones de creación, lectura, actualización y eliminación (CRUD) mediante configuraciones depreocupación de escritura,preocupación de lectura y preferencia de lectura para conjuntos de réplicas.

Puede establecer opciones de preocupación de escritura, preocupación de lectura y preferencia de lectura en los siguientes niveles:

  • Nivel de cliente, que establece el valor predeterminado para todas las ejecuciones de operaciones a menos que se anule

  • 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.

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.

El controlador MongoDB Go proporciona la 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

Custom()

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

Journaled()

The client requests acknowledgement that write operations are written to the on-disk journal. For more information, see the Write Concern specification.

Parameter: none

Majority()

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

Unacknowledged()

The client requests requests no acknowledgment of write operations. For more information, see the Write Concern specification for w: 0.

Parameter: none

W1()

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

W

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

Journal

Specifies if write operations must be written to the on-disk journal for acknowledgement.

Type: bool

WTimeout

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.

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)

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.

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

Available()

La consulta devuelve datos de la instancia sin garantizar que se hayan escrito en la mayoría de los miembros del conjunto de réplicas. Para obtener más información, consulte la especificación de Read Concern.

Linearizable()

La consulta devuelve datos que reflejan todas las escrituras exitosas emitidas con un problema majority de escritura de y confirmadas antes del inicio de la operación de lectura. Para obtener más información, consulte la especificación de problemas de lectura.

Local()

La consulta devuelve los datos más recientes de la instancia. Para obtener más información, consulte la especificación de Read Concern.

Majority()

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.

Snapshot()

La consulta devuelve una copia completa de los datos en una mongod instancia en un momento específico. Solo está disponible para operaciones dentro de transacciones con varios documentos. Para obtener más información, consulte la especificación de Read Concern.

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)

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 consta del modo de preferencia de lectura y, opcionalmente, una lista de conjuntos de etiquetas, la opción maxStalenessSeconds y la opción de lectura cubierta.

El controlador Go de MongoDB proporciona el paquete readpref, que permite especificar la preferencia de lectura para un conjunto de réplicas. Establezca la preferencia de lectura mediante 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

Nearest()

El cliente lee de un miembro aleatorio del conjunto de réplicas elegible, primario o secundario, según un umbral de latencia especificado. Para obtener más información, consulte la entrada del manual "Servidor de preferencia de lectura".

Primary()

El cliente lee desde el nodo principal del conjunto de réplicas actual. Para obtener más información, consulte la entrada del manual "Servidor de preferencias de lectura".

PrimaryPreferred()

En la mayoría de los casos, el cliente lee desde el nodo principal. Si el nodo principal no está disponible, las operaciones leen desde los miembros secundarios. Para obtener más información, consulte la entrada del manual "Servidor de preferencias de lectura".

Secondary()

El cliente lee de los miembros secundarios del conjunto de réplicas. Para más información, consulte la entrada del manual "Servidor de preferencias de lectura".

SecondaryPreferred()

En la mayoría de los casos, el cliente lee desde los nodos secundarios. Si los secundarios no están disponibles, las operaciones leen desde el miembro principal. Para obtener más información, consulte la entrada del manual "Servidor de preferencias de lectura".

Tip

También puede especificar una preferencia de lectura en su cadena de conexión. Consulte la sección "Opciones de preferencia de lectura" del manual del servidor para obtener más información.

El siguiente código muestra cómo especificar una preferencia de lectura para leer desde nodos secundarios. El código selecciona un Database con esta opción.

rp := readpref.Secondary()
opts := options.Database().SetReadPreference(rp)
database := client.Database("db", opts)

Para obtener más información sobre los conceptos de esta guía, consulte la siguiente documentación del servidor:

Volver

Operaciones compuestas

En esta página