Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Particionamiento de datos con fragmentos

MongoDB utiliza la Clave de fragmentación asociada a la colección para dividir los datos en fragmentos que pertenecen a una fragmentación específica. Un fragmento consta de un rango de datos fragmentados. Cada fragmento tiene límites inferiores inclusivos y superiores exclusivos basados ​​en la clave de fragmentación.

Diagrama del espacio del valor de la clave de partición segmentado en rangos o fragmentos más pequeños.

La unidad más pequeña de datos que un fragmento puede representar es un único valor de la clave de partición.

  • La operación de particionado crea un fragmento inicial grande para cubrir todos los valores de la clave de partición.

  • Después de la creación del fragmento inicial, el balanceador mueve rangos fuera del fragmento inicial cuando necesita comenzar a equilibrar datos.

  • Si se tienen zonas y rangos de zonas definidos para una colección vacía o inexistente.

    • La operación de fragmentación crea fragmentos vacíos para los rangos de zona definidos y cualquier fragmento adicional que cubra todo el rango de valores de la clave de fragmentación. Además, realiza una distribución inicial de fragmentos basada en los rangos de zona. Esta creación y distribución inicial de fragmentos permite una configuración más rápida de la fragmentación por zonas.

    • Después de la distribución inicial, el balanceador gestiona la distribución de fragmento en adelante.

  • Si no tienes zonas ni rangos de zonas definidos para una colección vacía o inexistente:

    • Para el particionado encriptado:

      • La operación de particionado crea fragmentos vacíos para cubrir todo el rango de los valores de la clave de partición y hace una distribución inicial de fragmentos. Por defecto, la operación crea 2 fragmentos por partición y migra por el clúster.

      • Después de la distribución inicial, el balanceador gestiona la distribución de fragmento en adelante.

    • Para el particionado clasificado por rango:

      • La operación de particionado crea un único fragmento vacío para cubrir todo el rango de valores de la clave de partición.

      • Tras la creación inicial del fragmento, el equilibrador migra dicho fragmento a través de los fragmentos según corresponda y gestiona la distribución de los fragmentos en adelante.

Tip

El tamaño del rango por defecto en MongoDB es 128 megabytes. Se puede aumentar o reducir el tamaño de los fragmentos. Considera las implicaciones de cambiar el tamaño de fragmento por defecto:

  1. Los rangos pequeños conducen a una distribución más uniforme de los datos a costa de migraciones más frecuentes, lo que agrega sobrecarga en la capa de enrutamiento de consultas ( ).mongos

  2. Los rangos amplios conllevan menos migraciones, lo que reduce la sobrecarga de red e interna en la capa de enrutamiento de consultas, pero pueden dar lugar a una distribución desigual de los datos.

  3. El tamaño del rango afecta el número máximo de documentos por rango para migrar.

Para la mayoría de las implementaciones, una distribución de datos ligeramente desigual es preferible a las migraciones frecuentes.

MongoDB migra rangos de datos en un clúster para distribuir los datos de una colección particionada de manera uniforme entre las particiones. Las migraciones pueden ser:

  • Manual. Solo se usa la migración manual en casos limitados, por ejemplo, para distribuir datos durante las inserciones masivas. Ver Migración manual de fragmentos para obtener más detalles.

  • Automático El proceso balanceador migra automáticamente los datos cuando hay una distribución desigual de los datos de una colección particionada en las particiones. Ver Umbrales de migración para obtener más detalles.

Para obtener más información sobre el balanceador del clúster particionado, se puede consultar Balanceador de clúster particionado.

El balanceador es un proceso en segundo plano que gestiona las migraciones de datos. Si el desequilibrio de datos entre el fragmento más grande y el más pequeño supera los umbrales de migración, el balanceador comienza a migrar los datos a través del clúster.

Diagrama de una colección distribuida en tres particiones. Para esta colección, la diferencia en el número de fragmentos entre las particiones alcanza los *umbrales de migración* (en este caso, 2) y activa la migración.

Se pueden gestionar ciertos aspectos del balanceador. El balanceador también respeta las zonas creadas como parte de la configuración de zonas en un clúster.

Ver Balanceador del Clúster Particionado para obtener más información sobre el balanceador.

Cuando se ejecuta el método sh.shardCollection(), el balanceador comienza a distribuir los datos de la colección a otras particiones del clúster. Una sola partición solo puede participar en una migración de fragmento a la vez. Cuando MongoDB copia un rango de datos de una partición a otra correctamente, el rango en la partición donante se marca para su eliminación por el eliminador de rangos. Este proceso es lento y requiere muchos recursos.

A partir de MongoDB 8.0, si la implementación cumple los requisitos de recursos, se recomienda usar el método sh.shardAndDistributeCollection() para particionar la colección. Este método encapsula los comandos shardCollection y reshardCollection para particionar la colección y redistribuirla de inmediato con la misma clave. Esto hace que MongoDB vuelva a equilibrar los datos entre las particiones sin esperar al balanceador.

Para obtener más información, se puede consultar Redistribuir con la misma clave de partición.

Trozos que crecen más allá de la Los fragmentos de tamaño especificado que no se pueden dividir se denominan fragmentos jumbo. La causa más común es cuando un fragmento representa un único valor de clave de partición. Los fragmentos jumbo pueden convertirse en un cuello de botella de rendimiento, especialmente si el valor de la clave de partición aparece con alta frecuencia.

A partir de MongoDB 5.0, puedes refragmentar una colección al cambiar la clave de fragmentación de un documento.

El comando permite una distribución de datos más granular y puede resolver los fragmentos jumbo causados ​​por una cardinalidad de clave de fragmento refineCollectionShardKey insuficiente.

Para aprender si se debe redistribuir la colección o refinar la clave de partición, se puede consultar Cambiar la clave de partición.

Para obtener más información, consulte:

Volver

Particionamiento clasificado por rango

Obtén una insignia de habilidad

¡Domina "Estrategias de partición" gratis!

Más información

En esta página