Definición
shardCollectionFragmentos: una colección para distribuir sus documentos entre fragmentos.
shardCollectionEl comando debe ejecutarse contra laadminbase de datos.Tip
mongoshEn, este comando también se puede ejecutar a través del métodosh.shardCollection()auxiliar.Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
Para ejecutar,shardCollection db.runCommand( { <command> } ) utilice el método.
El comando tiene la siguiente forma:
db.adminCommand( { shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, presplitHashedZones: <boolean>, collation: { locale: "simple" }, timeseries: <object> } )
Nota
Cambiado en la versión 6.0.
A partir de MongoDB,6.0 para fragmentar una colección no es necesario ejecutar primero el enableSharding comando para configurar la base de datos.
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| string | El espacio de nombres de la colección que se va a fragmentar en el |
| Documento | El documento que especifica el campo o los campos que se utilizarán como clave de fragmento.
Establezca los valores del campo en:
La clave defragmento debe ser compatible con un índice. A menos que la colección esté vacía, el índice debe existir antes del Véase también Índices de claves de fragmentos |
| booleano | Especifique No se puede especificar |
| Documento | Opcional. Si la colección especificada en |
booleano | Opcional. Especifique
| |
Objeto | Opcional. Especifique esta opción para crear una nueva colección de series temporales fragmentadas. Para fragmentar una colección de series de tiempo existente, omita este parámetro. Cuando la colección especificada en Para conocer la sintaxis detallada, consulte Opciones de series de tiempo. Nuevo en la versión 5.1. |
Opciones de series temporales
Nuevo en la versión 5.1.
Para crear una nueva colección de series temporales fragmentada, especifique la opción de series shardCollection temporales en.
La opción de serie temporal toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| string | Requerido. El nombre del campo que contiene la fecha en cada documento de serie de tiempo. Los documentos en una colección de series de tiempo deben tener una fecha BSON válida como valor para el ADVERTENCIA: A partir de MongoDB 8.0, el uso de |
| string | Opcional. El nombre del campo que contiene los metadatos en cada documento de serie de tiempo. Los metadatos del campo especificado deben ser datos que se utilicen para etiquetar una serie única de documentos. Los metadatos difícilmente cambien. El nombre del campo especificado no puede ser Aunque el campo |
| string | Opcional. Los valores posibles son:
De forma predeterminada, MongoDB establece Configure manualmente el parámetro Si especifica Si no especificas Si configura el parámetro |
Considerations
Claves de partición
Si bien puede cambiar su clave de fragmento más adelante, es importante considerar cuidadosamente su elección de clave de fragmento para evitar problemas de escalabilidad y rendimiento.
Claves de fragmentos en colecciones de series temporales
Al fragmentar colecciones de series temporales, solo puede especificar los siguientes campos en la clave de fragmentación:
El
metaFieldSubcampos de
metaFieldEl
timeField
Puede especificar combinaciones de estos campos en la clave de fragmento. No se permiten otros campos, incluido _id, en el patrón de la clave de fragmento.
Cuando se especifica la clave del fragmento:
metaFieldPuede ser cualquiera de los dos:timeFielddebe ser:Al final del patrón de clave de fragmento
Tip
Evite especificar solo timeField como clave de fragmento. Dado que timeField aumenta de forma monótona, es posible que todas las escrituras aparezcan en un solo fragmento dentro del clúster. Idealmente, los datos se distribuyen uniformemente entre los fragmentos.
Para saber cómo elegir mejor una clave de fragmento, consulte:
Advertencia
A partir de MongoDB 8.0, las claves de partición que contienen el timeField quedan obsoletas para las colecciones de series de tiempo.
Claves de fragmentos con hash
Las claves de fragmento con hash utilizan un índice con hash o un índice con hash compuesto como clave de fragmento.
Utilice el formato field: "hashed" para especificar un campo de clave de fragmento con hash.
Nota
Si se están realizando migraciones de fragmentos mientras se crea una colección de claves de fragmentos con hash, la distribución inicial de fragmentos puede ser desigual hasta que el equilibrador equilibre automáticamente la colección.
Se pueden redistribuir los fragmentos para equilibrar
Al shardCollection ejecutar el comando, el balanceador comienza a distribuir los datos de la colección a otros fragmentos del clúster. Un fragmento solo puede participar en una migración de fragmentos a la vez. Cuando MongoDB copia correctamente un rango de datos de un fragmento a otro, el eliminador de rangos marca el rango del fragmento donante para su eliminación. Este proceso es lento y consume muchos recursos.
A partir de MongoDB,8.0 si su implementación cumple con los requisitos de recursos, se recomienda usar el reshardCollection comando para realizar este balanceo inicial de datos mediante la redistribución de los datos a la misma clave. Esto permite que MongoDB redistribuya los datos entre los fragmentos sin esperar al balanceador.
Para utilizar el comando para realizar el equilibrio reshardCollection inicial:
Utilice el comando para configurar la colección como una colección
shardCollectionfragmentada.Utilice para volver a fragmentar con la misma clave de fragmento estableciendo
reshardCollectionlaforceRedistributionopcióntrueen. MongoDB luego equilibra los datos entre los fragmentos.
Para obtener más información, se puede consultar Redistribuir con la misma clave de partición.
Fragmentación de zonas y distribución inicial de fragmentos
La operación de recopilación de fragmentos (esshardCollection decir, el comando y el asistente) puede crear y distribuir fragmentos iniciales para una colección vacía o inexistente sh.shardCollection() si se han definido zonas y rangos de zonas para la colección. La distribución inicial de fragmentos permite una configuración más rápida de la fragmentación por zonas. Tras la distribución inicial, el balanceador gestiona la distribución de fragmentos de forma habitual.
Para fragmentar una colección utilizando un índice hash compuesto, consulte Fragmentación de zonas e índices hash compuestos.
Fragmentación de zonas e índices hash compuestos
MongoDB admite la fragmentación de colecciones en índices con hash compuesto. Al fragmentar una colección vacía o inexistente mediante una clave de fragmento con hash compuesto, se aplican requisitos adicionales para que MongoDB pueda crear y distribuir fragmentos iniciales.
Consulte Zonas predefinidas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo.
Unicidad
Si se especifica unique: true:
Si la colección está vacía,
shardCollectioncrea el índice único en la clave de partición si dicho índice no existe ya.Si la colección no está vacía, debe crear el índice antes de usar
shardCollection.
Aunque se puede tener un índice compuesto único donde la clave de fragmentación es un prefijo, si se utiliza el parámetro unique, la colección debe tener un índice único que esté en la clave de partición.
Véase también Colección fragmentada e índices únicos
Intercalación
Si la colección tiene una intercalación predeterminada, el comando debe incluir shardCollection un collation parámetro con el { locale: "simple" } valor. Para colecciones no vacías con una intercalación predeterminada, debe tener al menos un índice con la intercalación simple cuyos campos admitan el patrón de clave de fragmento.
No es necesario especificar la opción collation para colecciones sin intercalación. Si se especifica la opción de intercalación para una colección sin intercalación, no tendrá efecto.
Nivel de confirmación de escritura
mongosusa"majority"para la preocupación de escritura del comandoshardCollection, su ayudantesh.shardCollection()y el métodosh.shardAndDistributeCollection().
Ejemplo
La siguiente operación habilita la fragmentación de la people colección en la records base de datos y utiliza el zipcode campo como clave de fragmentación:
db.adminCommand( { shardCollection: "records.people", key: { zipcode: 1 } } )