Overview
En esta guía, puede aprender a usar las configuraciones de preocupaciónde escritura,preocupación de lectura y preferencia de lectura para modificar la forma en que MongoDB ejecuta operaciones de creación, lectura, actualización y eliminación (CRUD) en conjuntos de réplicas.
Puede establecer estas configuraciones en los siguientes niveles:
Cliente, que establece el valor predeterminado para todas las ejecuciones de operaciones a menos que se anule
Transacción
Database
Colección
La lista anterior está en orden de precedencia creciente. Por ejemplo, si se configuran preocupaciones de lectura tanto a nivel de cliente como de base de datos, la preocupación de lectura especificada a nivel de base de datos anula la preocupación de lectura a nivel de cliente.
Nivel de confirmación de escritura
La preocupación de escritura especifica el nivel de confirmación solicitado a MongoDB para las operaciones de escritura antes de que la operación se retorne correctamente. Las operaciones que no especifican una preocupación de escritura explícita heredan la configuración global predeterminada de preocupación de escritura.
Puede configurar la preocupación de escritura 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 la preocupación de escritura en una transacción.mongoc_database_set_write_concern()Establece la preocupación de escritura en una base de datos.mongoc_collection_set_write_concern()Establece la preocupación de escritura en una colección.
Para especificar el nivel de su inquietud de escritura, llame a la función mongoc_write_concern_set_w() y pase su inquietud de escritura 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 escritura regresa después de que el nodo principal procesa la operación de escritura.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 escritura regresa después de que el miembro del conjunto de réplicas con la etiqueta especificada reconoce la operación de escritura.
El siguiente ejemplo establece la preocupación de escritura 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 la preocupación de escritura en 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 Las instancias mongoc_collection_t son inmutables. Al establecer la preocupación de escritura 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 la preocupación por la escritura, consulte Escriba Preocupación en el manual del servidor MongoDB.
readConcern
La lectura de preocupación especifica los siguientes comportamientos:
Nivel de consistencia causal entre conjuntos de réplicas
Garantías de aislamiento mantenidas durante una consulta
Puede especificar la preocupación 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 la preocupación de lectura en una transacción.mongoc_database_set_read_concern()Establece la preocupación 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 su preocupación de lectura, llame a la función mongoc_read_concern_set_level() y pase su preocupación 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_MAJORITY:La consulta devuelve datos que han sido reconocidos por la mayoría de los miembros del conjunto 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 consulta devuelve datos mayoritariamente confirmados tal como aparecen en los fragmentos, desde un único punto 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 la preocupación 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 la preocupación de lectura, consulte Preocupación de lectura en el manual de MongoDB Server.
preferencia de lectura
La preferencia de lectura determina qué miembro de un conjunto de réplicas lee MongoDB al ejecutar una consulta. Puede configurar la preferencia de lectura mediante 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 su preferencia de lectura, llame a la función mongoc_read_prefs_new() y pase uno de los siguientes valores:
MONGOC_READ_PRIMARY:La consulta devuelve datos del nodo principal.MONGOC_READ_PRIMARY_PREFERREDLa consulta devuelve datos del nodo principal si está disponible. De lo contrario, devuelve datos de 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 consulta 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 obtener más información sobre las preferencias de lectura, consulte Preferencias 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, pase la definición de intercalación a la clave "collation" en las opciones de la operación de lectura o escritura.
Ejemplo de intercalación
Consideremos 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: