Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Enrutamiento con mongos

Las instancias de MongoDB mongos enrutan las queries y las operaciones de escritura a particiones en un clúster particionado. mongos proporciona la única interfaz a un clúster particionado desde la perspectiva de las aplicaciones. Las aplicaciones nunca se conectan o comunican directamente con las particiones.

El mongos realiza un seguimiento de qué datos están en qué partición almacenando en caché los metadatos de los servidores de configuración. El mongos utiliza los metadatos para dirigir las operaciones de las aplicaciones y los clientes a las instancias de mongod. Un mongos no tiene un estado persistente y consume pocos recursos del sistema.

La práctica más común es ejecutar instancias de mongos en los mismos sistemas que tus servidores de aplicaciones, pero puedes mantener instancias de mongos en las particiones o en otros recursos dedicados. Ver también Cantidad de mongos y Distribución.

Una mongos instancia enruta una query a un clúster al:

  1. Determinando la lista de particiones que deben recibir la query.

  2. Establecimiento de un cursor en todas las particiones objetivo.

El proceso mongos fusiona los datos de cada uno de los fragmentos seleccionados y devuelve el documento resultante.Antes de que mongos recupere los resultados, se aplican ciertos modificadores de consulta, como la ordenación, a cada fragmento.

Las operaciones de agregación que se ejecutan en múltiples particiones pueden encaminar los resultados de vuelta al mongos para combinar los resultados si no necesitan ejecutarse en la partición principalde la base de datos.

Hay dos casos en los que un pipeline no es apto para ejecutarse en mongos.

El primer caso ocurre cuando la parte de fusión de la pipeline dividida contiene una etapa que debe ejecutarse en una partición primaria. Por ejemplo, si $lookup requiere acceso a una colección no particionada en la misma base de datos que la colección particionada donde se está ejecutando la agregación, la fusión está obligada a ejecutarse en la partición primaria.

El segundo caso ocurre cuando la parte de combinación del pipeline dividido contiene una etapa que puede escribir datos temporales en el disco, como $group, y el cliente ha especificado allowDiskUse:true. En este caso, suponiendo que no hay otros pasos en la pipeline de fusión que requieran la partición primaria, la fusión se ejecuta en una partición seleccionada al azar en el conjunto de particiones seleccionadas por la agregación.

Para obtener más información sobre cómo se divide el trabajo de agregación entre los componentes de una consulta de clúster compartido, utiliza explain:true como parámetro en la llamada aggregate(). La respuesta incluye tres objetos JSON. mergeType muestra en qué etapa ocurre la fusión ("primaryShard", "anyShard" o "mongos"). splitPipeline muestra qué operaciones de tu pipeline se han ejecutado en particiones individuales. shards muestra el trabajo que realizó cada partición.

En algunos casos, cuando la clave de fragmentación o un prefijo de la clave de fragmentación forma parte de la consulta,mongos realiza una operación dirigida, enrutando las consultas a un subconjunto de fragmentos en el clúster.

mongos Realiza una operación de difusión para las consultas que no incluyen la clave de fragmentación, enrutándolas a todas las fragmentaciones del clúster. Algunas consultas que sí incluyen la clave de fragmentación pueden generar igualmente una operación de difusión, dependiendo de la distribución de los datos en el clúster y de la selectividad de la consulta.

Consulte Operaciones dirigidas frente a operaciones de difusión para obtener más información sobre operaciones dirigidas y de difusión.

mongos Puede admitir lecturas con protección para minimizar la latencia. Consulte la sección de lecturas con protección para obtener más información.

Si el resultado de la query no está ordenado, la instancia mongos abre un cursor de resultados que "distribuye en rondas" los resultados de todos los cursores en las particiones.

Si la query limita el tamaño del conjunto de resultados utilizando el método de cursor limit(), la instancia mongos pasa ese límite a las particiones y luego vuelve a aplicar el límite al resultado antes de devolver el resultado al cliente.

Si la query especifica el número de registros a omitir utilizando el método de cursor skip(), el mongos no puede pasar el omitir a las particiones, sino que recupera los resultados no omitidos de las particiones y omite el número apropiado de documentos al ensamblar el resultado completo.

Cuando se utiliza junto con un limit(), el mongos pasa el límite más el valor de la skip() a las particiones para mejorar la eficiencia de estas operaciones.

Para clústeres fragmentados, mongos aplica la preferencia de lectura a la hora de leer de las particiones. El nodo seleccionado está gobernado tanto por la configuración de la preferencia de lectura como por la configuración de replication.localPingThresholdMs, y se volverá a evaluar para cada operación.

Para obtener detalles sobre la preferencia de lectura y los clústeres segmentados, consulta Preferencia de lectura y particiones.

mongos: las instancias puedenprimary preferencias de lectura. Con las lecturas compensadas, las instancias de mongos enrutan las operaciones de lectura a dos miembros del set de réplicas por cada partición consultada y devuelven los resultados del primer respondiente de cada partición. La lectura adicional enviada para compensar la operación de lectura utiliza el valor maxTimeMS de maxTimeMSForHedgedReads.

Las lecturas protegidas son compatibles con las siguientes operaciones:

Las lecturas protegidas se especifican por operación como parte de la preferencia de lectura. Las preferencias de lectura que no sonprimary admiten lecturas protegidas. Consulta la opción de preferencia de lectura enhedged.

Para obtener detalles sobre la preferencia de lectura y los clústeres, así como sobre la selección de miembros, consulta Preferencia de lectura y particiones.

Por defecto, las instancias mongos admiten el uso de lecturas protegidas. Para desactivar el soporte de una instancia mongos para lecturas protegidas, consulte el parámetro readHedgingMode. Si el soporte de lectura protegida es off, mongos no utiliza lecturas protegidas independientemente de la opción hedge especificada para la preferencia de lectura.

El comando serverStatus y su método correspondiente mongosh db.serverStatus() devuelven hedgingMetrics.

Para detectar si la instancia de MongoDB a la que está conectado su cliente es mongos, utilice el comando hello. Cuando un cliente se conecta a un mongos, hello devuelve un documento con un campo msg que contiene la cadena isdbgrid. Por ejemplo:

{
"isWritablePrimary" : true,
"msg" : "isdbgrid",
"maxBsonObjectSize" : 16777216,
"ok" : 1,
...
}

Si la aplicación, en cambio, está conectada a un mongod, el documento retornado no incluye la string isdbgrid.

Generally, the fastest queries in a sharded environment are those that mongos route to a single shard, using the shard key and the cluster meta data from the config server. These targeted operations use the shard key value to locate the shard or subset of shards that satisfy the query document.

Para las consultas que no incluyen la clave de partición, mongos debe consultar todas las particiones, esperar sus respuestas y luego devolver el resultado a la aplicación. Estas consultas de "dispersión/recopilación" pueden ser operaciones de larga duración.

mongos Las instancias transmiten queries a todas las particiones de la colección a menos que el mongos pueda determinar qué partición o subconjunto de particiones almacena estos datos.

Operaciones de lectura en un clúster fragmentado donde ``mongos`` difunde la query a todas las particiones.

Una vez que el nodo mongos recibe respuestas de todos los fragmentos, fusiona los datos y devuelve el documento resultante. El rendimiento de una operación de difusión depende de la carga general del clúster, así como de variables como la latencia de la red, la carga de cada fragmento y el número de documentos devueltos por fragmento. Siempre que sea posible, se deben priorizar las operaciones dirigidas sobre las operaciones de difusión.

Las operaciones de actualización múltiple siempre son operaciones broadcast.

Los métodos updateMany() y deleteMany() son operaciones difusas, a menos que el documento de query especifique la clave de partición completa.

mongos puede enrutar queries que incluyan la clave de partición o el prefijo de una clave compuesta a una partición específica o a un conjunto de particiones. mongos utiliza el valor de la clave de partición para ubicar al fragmento cuyo rango incluye el valor de la clave de partición y dirige la consulta a la partición que contiene ese fragmento.

Lectura dirigida en la que ``mongos`` enruta a particiones específicas según la clave de partición en la query.

Por ejemplo, si la clave de partición es:

{ a: 1, b: 1, c: 1 }

El programa mongos puede enrutar queries que incluyan la clave completa de partición o cualquiera de los siguientes prefijos de clave de partición a una partición específica o a un conjunto de particiones:

{ a: 1 }
{ a: 1, b: 1 }

Todas las operaciones de insertOne() se realizan en una sola partición. Cada documento en el insertMany() arreglo apunta a una única partición, pero no hay garantía de que todos los documentos del arreglo se inserten en una única partición.

Todas las updateOne(), replaceOne() y deleteOne() las operaciones deben incluir la clave de partición o _id en el documento de query. MongoDB devuelve un error si se utilizan estos métodos sin la clave de partición o _id.

Dependiendo de la distribución de los datos en el clúster y la selectividad de la consulta, mongos aún puede realizar una operación de difusión para satisfacer estas consultas.

Cuando una partición recibe una query, utiliza el índice más eficiente disponible para cumplir con esa query. El índice utilizado puede ser tanto el índice de clave de partición como otro índice elegible presente en la partición.

Utiliza la autenticación interna/de membresía autogestionada para aplicar la seguridad entre clústeres y evitar que componentes del clúster no autorizados accedan al clúster. Debes iniciar cada mongod o mongos en el clúster con la configuración de seguridad adecuada para aplicar la autenticación interna.

A partir de MongoDB 5.3, SCRAM-SHA-1 no se puede usar para la autenticación intraclúster. Solo se admite SCRAM-SHA-256.

En versiones anteriores de MongoDB, se pueden usar tanto SCRAM-SHA-1 como SCRAM-SHA-256 para la autenticación intra-clúster, incluso si SCRAM no está explícitamente habilitado.

Consulta Autenticación con archivo clave para clústeres fragmentados autogestionados para un tutorial sobre la implementación de un clúster fragmentado seguro.

Los clústeres fragmentados admiten Control de Acceso Basado en roles en implementaciones autogestionados (RBAC) para restringir el acceso no autorizado a los datos y operaciones del clúster. Debe iniciar cada mongod en el clúster, incluidos los servidores de configuración, con la opción --auth para aplicar RBAC. Como alternativa, el aplicar la Autenticación interna/de membresía autogestionada para la seguridad entre clústeres también habilita controles de acceso de usuario a través de RBAC.

Con RBAC activado, los clientes deben especificar un --username, --password y --authenticationDatabase al conectarse al mongos para poder acceder a los recursos del clúster.

Cada clúster tiene sus propios usuarios de clúster. Estos usuarios no se pueden utilizar para acceder a particiones individuales.

Consulta Activar el control de acceso en implementaciones autogestionadas para ver un tutorial sobre cómo añadir usuarios a una implementación de MongoDB con RBAC habilitado.

mongos usa el nivel de confirmación de escritura "majority" para las siguientes operaciones que afectan a los metadatos del clúster particionado:

El binario mongos no puede conectarse a mongod instancias cuya compatibilidad de características entre versiones (FCV) sea superior a la del mongos. Por ejemplo, no puedes conectar un MongoDB 4.0 versión mongos a un 4.2 clúster particionado con compatibilidad de características entre versiones establecido en 4.2. Sin embargo, puedes conectar un MongoDB 4.0 versión mongos a un 4.2 clúster fragmentado con compatibilidad de características entre versiones establecido en 4.0.

mongod incluye un mecanismo de Full Time Diagnostic Data Capture para asistir a los ingenieros de MongoDB con la solución de problemas en las implementaciones. Si este hilo falla, termina el proceso que lo originó. Para evitar los errores más comunes, confirme que el usuario que ejecuta el proceso tenga permisos para crear el directorio FTDC diagnostic.data. Para mongod, el directorio se encuentra dentro de storage.dbPath. Para mongos, es paralelo a systemLog.path.

A partir de MongoDB 4.2, MongoDB añade el parámetro ShardingTaskExecutorPoolReplicaSetMatching. Este parámetro determina el tamaño mínimo del mongod / mongos pool de conexiones de cada instancia para cada nodo del clúster. Este valor puede variar durante el tiempo de ejecución.

mongod y mongos mantienen pools de conexión a cada uno de los secundarios del set de réplicas para cada set de réplicas en el clúster. Por defecto, estos pools tienen un número de conexiones que es al menos igual al número de conexiones al primario.

Para modificar, consulte ShardingTaskExecutorPoolReplicaSetMatching.

Para obtener más información sobre cómo funciona el particionamiento con las agregaciones, lea el capítulo sobre particionamiento en el libro electrónico Practical MongoDB Aggregations.