Aprende cómo MongoDB gestiona las operaciones de lectura y guardar en sets de réplicas y clústeres en particiones. Esta página explica la importancia de la arquitectura de clúster en el enrutamiento de queries y la coherencia de los datos.
Operaciones de lectura en conjuntos de réplicas
Por defecto, los clientes leen de un set de réplicas primario/a. Sin embargo, puedes especificar una preferencia de lectura para dirigir las operaciones de lectura a otros nodos. Por ejemplo, configura las preferencias de lectura para leer desde secundarias o desde el nodo más cercano a:
Reducir la latencia en implementaciones con varios centros de datos.
Realiza operaciones de copia de seguridad.
Permitir lecturas hasta que se elija un nuevo primario.
Las operaciones de lectura de los miembros secundarios de los conjuntos de réplicas podrían no reflejar el estado actual del principal. Las preferencias de lectura que dirigen las operaciones de lectura a diferentes servidores pueden generar lecturas no monotónicas.
Los clientes pueden utilizar sesiones causalmente coherentes, lo que brinda varias garantías, incluidas lecturas monótonas.
Puedes configurar la preferencia de lectura por cada conexión o por cada operación. Para obtener más información sobre la preferencia de lectura o sobre los modos de preferencia de lectura, consulta Preferencia de lectura y Modos de preferencia de lectura.
Guardar operaciones en set de réplicas
En los sets de réplicas, todas las operaciones de escritura van al primario del conjunto. El primario aplica la operación de escritura y registra las operaciones en el registro de operaciones del primario o oplog. El oplog es una secuencia reproducible de operaciones sobre el conjunto de datos. Los secundarios miembros del conjunto replican continuamente el oplog y aplican las operaciones a sí mismos en un proceso asíncrono.
Para más información sobre conjuntos de réplicas y operaciones de escritura, consulta Replicación y nivel de confirmación de escritura (write concern).
Operaciones de lectura en clústeres fragmentados
Los clústeres fragmentados permiten particionar un conjunto de datos entre un clúster de mongodinstancias de forma prácticamente transparente para la aplicación. Para obtener una descripción general de los clústeres fragmentados, consulte la sección "Fragmentación" de este manual.
Para un clúster fragmentado, las aplicaciones envían operaciones a una de las instancias de mongos asociadas con el clúster.
Las operaciones de lectura en clústeres fragmentados son más eficientes cuando se dirigen a un fragmento específico. Las consultas a colecciones fragmentadas deben incluir la clave de fragmento de la colección. Cuando una consulta incluye una clave de fragmento,mongos puede usar los metadatos del clúster de la base de datos de configuración para dirigir las consultas a los fragmentos.
Si una query no incluye la clave de partición, mongos debe dirigir la query a todos los shards del clúster. Estas consultas de dispersión y recopilación pueden ser ineficientes. En clústeres más grandes, las consultas de distribución y recolección no son viables para las operaciones rutinarias.
En el caso de las particiones de conjuntos de réplicas, las operaciones de lectura de los miembros secundarios de conjuntos de réplicas pueden no reflejar el estado actual del primario. Las preferencias de lectura que dirigen las operaciones de lectura a diferentes servidores pueden resultar en lecturas no monótonas.
Nota
Los clientes pueden utilizar sesiones causalmente coherentes, que brindan varias garantías, incluidas lecturas monótonas.
Todos los miembros de un set de réplicas de partición, no solo el primario, mantienen los metadatos relacionados con los metadatos de fragmentos. Esto previene que las lecturas de las secundarias devuelvan datos huérfanos si no utilizas el nivel de consistencia de lectura
"available". En versiones anteriores, las lecturas de los secundarios, independientemente del nivel de consistencia de lectura, podrían devolver documentos huérfanos.
Para obtener más información sobre las operaciones de lectura en clústeres fragmentados, consulta las secciones de mongos y Shard Keys.
Operaciones de guardar en clústeres
Para colecciones particionadas en un clúster, el mongos dirige las operaciones de escritura de las aplicaciones a las particiones responsables de la porción específica del conjunto de datos. El mongos utiliza los metadatos del clúster de la base de datos de configuración para dirigir la operación de escritura a las particiones correspondientes.
MongoDB divide los datos en una colección particionada en rangos según los valores de la clave de partición. Luego, MongoDB distribuye estos fragmentos a las particiones. La clave de partición determina la distribución de los fragmentos entre las particiones. Esto puede afectar el rendimiento de las operaciones de guardar en el clúster.
Importante
Las operaciones de actualización que afectan a un único documento deberán incluir la clave de partición o el campo _id. Las actualizaciones que afectan a varios documentos son más eficientes en algunas situaciones si tienen la clave de partición, pero se pueden difundir a todas las particiones.
Si el valor de la clave de partición aumenta o disminuye con cada inserción, todas las operaciones de inserción se dirigen a una sola partición. Como resultado, la capacidad de una sola partición se convierte en el límite para la capacidad de inserción del clúster.
Para obtener más información, consulte Operaciones de fragmentación y escritura masiva.
Change Streams y documentos huérfanos
A partir de MongoDB 5.3, durante la migración de rango, los eventos de flujo de cambios no se generan para las actualizaciones de documentos huérfanos.