Overview
En esta guía, puedes aprender a utilizar las configuraciones de nivel de confirmación de escritura (write concern), nivel de consistencia de lectura y preferencia de lectura para modificar la forma en que MongoDB ejecuta operaciones de crear, leer, actualizar y borrar (CRUD) en sets de réplicas.
Puedes establecer estas configuraciones en los siguientes niveles:
Cliente, que establece el valor por defecto para todas las ejecuciones de operaciones a menos que se anule
transacción
Database
Colección
La lista anterior está en orden ascendente de prelación. Por ejemplo, si estableces niveles de consistencia de lectura tanto a nivel del cliente como de la base de datos, el nivel de consistencia de lectura especificado a nivel de la base de datos anula el nivel de consistencia de lectura a nivel del cliente.
Nivel de confirmación de escritura
El nivel de confirmación de escritura (write concern) especifica el nivel de reconocimiento solicitado de MongoDB para las operaciones de escritura antes de que la operación se devuelva correctamente. Las operaciones que no especifican un nivel de confirmación de escritura (write concern) explícito heredan la configuración por defecto global de nivel de confirmación de escritura (write concern).
Puedes configurar el nivel de confirmación de escritura (write concern) llamando a las siguientes funciones:
mongoc_client_set_write_concern()Establece la preocupación de escritura en un cliente.mongoc_transaction_opts_set_write_concern()establece el nivel de confirmación de escritura (write concern) en una transacción.mongoc_database_set_write_concern()establece el nivel de confirmación de escritura en una base de datos.mongoc_collection_set_write_concern()establece el nivel de confirmación de escritura (write concern) en una colección.
Para especificar el nivel de tu nivel de confirmación de escritura (write concern), llama a la función mongoc_write_concern_set_w(), y pasa tu nivel de confirmación de escritura (write concern) y uno de los siguientes valores:
MONGOC_WRITE_CONCERN_W_DEFAULT:La operación de escritura regresa después de que la operación se escribe en la memoria.0: La operación de guardar devuelve después de que el nodo primario procese la operación de guardar.1:La operación de escritura regresa después de que solo el nodo principal reconoce la operación de escritura, sin esperar el reconocimiento de los nodos secundarios.MONGOC_WRITE_CONCERN_W_MAJORITY:La operación de escritura regresa después de que la mayoría de los miembros del conjunto de réplicas reconocen la operación de escritura.MONGOC_WRITE_CONCERN_W_TAG: La operación de guardar devuelve después de que el miembro del set de réplicas con la etiqueta especificada reconoce la operación de guardar.
El siguiente ejemplo establece el nivel de confirmación de escritura (write concern) en MONGOC_WRITE_CONCERN_W_MAJORITY para una instancia de mongoc_client_t:
// Create a new client instance mongoc_client_t *client = mongoc_client_new("<connection string>"); // Create a new write concern mongoc_write_concern_t *write_concern = mongoc_write_concern_new(); mongoc_write_concern_set_w(write_concern, MONGOC_WRITE_CONCERN_W_MAJORITY); // Set the write concern on the client mongoc_client_set_write_concern(client, write_concern);
El siguiente ejemplo establece el nivel de confirmación de escritura (write concern) a MONGOC_WRITE_CONCERN_W_MAJORITY para una colección:
mongoc_collection_t *collection = mongoc_client_get_collection(client, "<database name>", "<collection name>"); // Create a new write concern mongoc_write_concern_t *write_concern = mongoc_write_concern_new(); mongoc_write_concern_set_w(write_concern, MONGOC_WRITE_CONCERN_W_MAJORITY); // Set the write concern on the collection mongoc_collection_set_write_concern(collection, write_concern);
Nota
Las colecciones y bases de datos son inmutables
mongoc_database_t y las instancias mongoc_collection_t son inmutables. Cuando se establece el nivel de confirmación de escritura (write concern) en una base de datos o colección, el método devuelve una nueva instancia y no afecta a la instancia original.
Para obtener más información sobre el nivel de confirmación de escritura (write concern), consulte nivel de confirmación de escritura (Write Concern) en el manual del servidor de MongoDB.
readConcern
El nivel de consistencia de lectura especifica los siguientes comportamientos:
Nivel de coherencia causal en todos los sets de réplicas
Garantías de aislamiento mantenidas durante una query
Puedes especificar el nivel de consistencia de lectura llamando a las siguientes funciones:
mongoc_client_set_read_concern()Establece la preocupación de lectura en un cliente.mongoc_transaction_opts_set_read_concern()establece el nivel de consistencia de lectura en una transacción.mongoc_database_set_read_concern()establece el nivel de consistencia de lectura en una base de datos.mongoc_collection_set_read_concern()establece el nivel de consistencia de lectura en una colección.
Para especificar el nivel de nivel de consistencia de lectura, llama a la función mongoc_read_concern_set_level() y pasa tu nivel de consistencia de lectura y uno de los siguientes valores:
MONGOC_READ_CONCERN_LEVEL_LOCALLa consulta devuelve los datos más recientes de la instancia. No garantiza que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas.MONGOC_READ_CONCERN_LEVEL_AVAILABLELa consulta devuelve los datos más recientes de la instancia. No garantiza que los datos se hayan escrito en la mayoría de los miembros del conjunto de réplicas.ReadConcern.AVAILABLEno está disponible para sesiones y transacciones causalmente consistentes.MONGOC_READ_CONCERN_LEVEL_MAJORITYLa query devuelve datos que han sido reconocidos por la mayoría de los miembros del set de réplicas.MONGOC_READ_CONCERN_LEVEL_LINEARIZABLE:La consulta devuelve datos que reflejan todas las escrituras exitosas que se completaron antes del inicio de la operación de lectura.MONGOC_READ_CONCERN_LEVEL_LINEARIZABLEno está disponible para su uso con sesiones y transacciones causalmente consistentes.MONGOC_READ_CONCERN_LEVEL_SNAPSHOT: La query devuelve datos confirmados por mayoría tal como aparecen en las particiones, desde un punto único específico en el pasado reciente.
Para obtener más información sobre los niveles de preocupación de lectura, consulte Niveles de preocupación de lectura en el manual de MongoDB Server.
El siguiente ejemplo establece la preocupación de lectura en MONGOC_READ_CONCERN_LEVEL_MAJORITY para una instancia de mongoc_client_t:
mongoc_client_t *client = mongoc_client_new("<connection string>"); // Create a new read concern mongoc_read_concern_t *read_concern = mongoc_read_concern_new(); // Set the read concern level mongoc_read_concern_set_level(read_concern, MONGOC_READ_CONCERN_LEVEL_MAJORITY); // Set the read concern on the client mongoc_client_set_read_concern(client, read_concern);
El siguiente ejemplo establece el nivel de consistencia de lectura en MONGOC_READ_CONCERN_LEVEL_MAJORITY para una colección:
mongoc_collection_t *collection = mongoc_client_get_collection(client, "<database name>", "<collection name>"); // Create a new read concern mongoc_read_concern_t *read_concern = mongoc_read_concern_new(); // Set the read concern level mongoc_read_concern_set_level(read_concern, MONGOC_READ_CONCERN_LEVEL_MAJORITY); // Set the read concern on the collection mongoc_collection_set_read_concern(collection, read_concern);
Para obtener más información sobre el nivel de consistencia de lectura, consulta Nivel de consistencia de lectura en el manual del MongoDB Server.
preferencia de lectura
La preferencia de lectura determina de qué nodo de un set de réplicas lee MongoDB al ejecutar una query. Puedes establecer la preferencia de lectura llamando a las siguientes funciones:
mongoc_client_set_read_prefs()establece la preferencia de lectura en un cliente.mongoc_transaction_opts_set_read_prefs()establece la preferencia de lectura en una transacción.mongoc_database_set_read_prefs()establece la preferencia de lectura en una base de datos.mongoc_collection_set_read_prefs()establece la preferencia de lectura en una colección.
Para especificar el nivel de tu preferencia de lectura, llama a la función mongoc_read_prefs_new() y pasa uno de los siguientes valores:
MONGOC_READ_PRIMARY:La consulta devuelve datos del nodo principal.MONGOC_READ_PRIMARY_PREFERRED: La query devuelve datos del nodo primario si está disponible. De lo contrario, la query devuelve datos desde un nodo secundario.MONGOC_READ_SECONDARY:La consulta devuelve datos de un nodo secundario.MONGOC_READ_SECONDARY_PREFERRED:La consulta devuelve datos de un nodo secundario si está disponible. De lo contrario, la consulta devuelve datos del nodo principal.MONGOC_READ_NEAREST: La query devuelve datos del nodo con la latencia de red más baja.
El siguiente ejemplo establece la preferencia de lectura en MONGOC_READ_SECONDARY para una instancia de mongoc_client_t:
mongoc_client_t *client = mongoc_client_new("<connection string>"); // Create a new read preference mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new(MONGOC_READ_SECONDARY); // Set the read preference on the client mongoc_client_set_read_prefs(client, read_prefs);
El siguiente ejemplo establece la preferencia de lectura en MONGOC_READ_SECONDARY para una colección:
mongoc_collection_t *collection = mongoc_client_get_collection(client, "<database name>", "<collection name>"); // Create a new read preference mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new(MONGOC_READ_SECONDARY); // Set the read preference on the collection mongoc_collection_set_read_prefs(collection, read_prefs);
Para más información sobre la preferencia de lectura, consulte Preferencia de lectura en el manual de MongoDB Server.
Intercalación
Puede especificar una intercalación cuando realiza operaciones de lectura y escritura en una colección.
Una intercalación es un conjunto de reglas específicas del lenguaje para la comparación de strings, como el uso de mayúsculas y minúsculas y las marcas de acento.
Para especificar una intercalación, pasa la definición de intercalación a la clave "collation" en las opciones de la operación de lectura o guardado.
Ejemplo de intercalación
Considera una colección con los siguientes documentos:
{ _id: 1, category: "café" }, { _id: 2, category: "cafe" }, { _id: 3, category: "cafE" }
El siguiente ejemplo crea una intercalación que especifica la configuración regional francesa e ignora las diferencias entre mayúsculas y minúsculas. Utiliza esta intercalación para buscar documentos en los que el valor del campo category coincida con "cafe". Gracias a la intercalación especificada, la consulta devuelve los tres documentos.
mongoc_collection_t *collection = mongoc_client_get_collection(client, "<database name>", "<collection name>"); bson_t *opts = BCON_NEW( "collation", "{", "locale", BCON_UTF8("fr"), "strength", BCON_INT32(1), "}" ); mongoc_cursor_t *cursor = mongoc_collection_find_with_opts( collection, BCON_NEW("category", BCON_UTF8("cafe")), opts, NULL ); const bson_t *doc; while (mongoc_cursor_next(cursor, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); }
{ "_id": { "$oid" : "1" }, "category": "café" } { "_id": { "$oid" : "2" }, "category": "cafe" } { "_id": { "$oid" : "3" }, "category": "cafE" }
Para obtener más información sobre las intercalaciones, consulte la documentación de referencia de intercalación en el manual de MongoDB Server.
Documentación de la API
Para obtener más información sobre cualquiera de las funciones o tipos analizados en esta guía, consulte la siguiente documentación de API: