Definición
sh.shardCollection(namespace, key, unique, options)Fragmenta una colección usando
keycomo Clave de fragmento. La clave de fragmento determina cómo MongoDB distribuye los documentos de la colección entre los fragmentos.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
sh.enableSharding()método para configurar la base de datos.Importante
Método mongosh
Esta página documenta una
mongoshMétodo. Esta no es la documentación para comandos de base de datos ni para controladores específicos del lenguaje, como Node.js.Para el comando de base de datos, consulta el comando
shardCollection.Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.
sh.shardCollection()toma los siguientes argumentos:ParameterTipoDescripciónnamespacestring
El espacio de nombres de la colección que se va a fragmentar en el
"<database>.<collection>"formato.keyDocumento
El documento que especifica el campo o los campos que se utilizarán como clave de fragmento.
{ <field1>: <1|"hashed">, ... }Establezca el valor del campo en:
"hashed"para especificar una clave de fragmento con hash.
La clave defragmento debe ser compatible con un índice. A menos que la colección esté vacía, el índice debe existir antes del
shardCollectioncomando. Si la colección está vacía, MongoDB crea el índice antes de fragmentarla si el índice compatible con la clave de fragmento aún no existe.Véase también Índices de claves de fragmentos
uniquebooleano
Opcional. Especifique
truepara garantizar que el índice subyacente aplique una restricción única. El valor predeterminado esfalse.No se puede especificar
truecuando se utilizan claves de fragmentos con hash.Si especifica el documento
options, debe especificar explícitamente el valor paraunique.optionsDocumento
Opcional. Un documento que contiene campos opcionales, incluidos
numInitialChunksycollation.El argumento
optionsadmite las siguientes opciones:ParameterTipoDescripciónnumInitialChunksentero
Opcional. Especifica el número mínimo de fragmentos que se deben crear inicialmente al fragmentar una colección vacía con una clave de fragmento con hash. MongoDB crea y equilibra los fragmentos en el clúster. El
numInitialChunksparámetro debe ser inferior a8192fragmentos por fragmento. El2valor predeterminado es fragmentos por fragmento.Si la colección no está vacía o la clave del fragmento no contiene un campo hash, la operación devuelve un error.
Si se realiza la fragmentación con presplitHashedZones: verdadero, MongoDB intenta distribuir de manera uniforme la cantidad especificada de fragmentos entre las zonas del clúster.
Si se realiza la fragmentación con presplitHashedZones: falso o se omite y no se definen zonas ni rangos de zonas para la colección vacía, MongoDB intenta distribuir de manera uniforme la cantidad especificada de fragmentos entre los fragmentos del clúster.
Si la fragmentación con presplitHashedZones: falso o se omite y se han definido zonas y rangos de zonas para la colección vacía,
numInitChunksno tiene efecto.
collationDocumento
Opcional. Si la colección especificada en
shardCollectiontiene una intercalación predeterminada,debe incluir un documento de intercalación con ``{locale: "simple" }``; de lo contrario, elshardCollectioncomando fallará. Al menos uno de los índices cuyos campos admitan el patrón de clave de fragmento debe tener la intercalación simple.booleano
Opcional. Especifique
truepara crear y distribuir fragmentos iniciales para una colección vacía o inexistente, según las zonas y los rangos de zonas definidos para la colección. Solo para fragmentación con hash.shardCollection()conpresplitHashedZones: truedevuelve un error si alguna de las siguientes condiciones es verdadera:La clave de fragmento no contiene un campo hash (es decir, no es un índice hash de campo único o un índice hash compuesto).
La colección no tiene zonas o rangos de zonas definidos.
Los rangos de zonas definidos no cumplen los requisitos.
Documento
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
shardCollectiones una colección de series de tiempo y no se especifica la opcióntimeseries, MongoDB utiliza los valores que definen la colección de series de tiempo existente para completar el campotimeseries.Para conocer la sintaxis detallada, consulte Opciones de series de tiempo.
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 sh.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 |
| 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 |
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Importante
Este comando no es compatible con los clústeres M0 y Flex. Para obtener más información, consulta Comandos no compatibles.
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.
Considerations
Una vez que se ha fragmentado una colección, MongoDB no proporciona ningún método para desfragmentar una colección fragmentada.
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:
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.
Fragmentación de zonas y distribución inicial de fragmentos
La operación de colección de partición (es decir, El shardCollection comando y el sh.shardCollection() asistente pueden realizar la creación inicial de fragmentos y la distribución para una colección vacía o inexistente si zonas y rangos de zonas han sido definidos para la colección. La distribución inicial de fragmentos permite una configuración más ágil del particionado por zonas. Tras la distribución inicial, el balanceador se encarga de la distribución de fragmentos siguiendo el procedimiento habitual.
Consulte "Predefinir zonas y rangos de zonas para una colección vacía o inexistente" para ver un ejemplo. Si se fragmenta una colección mediante una clave de fragmento con rango o hash de un solo campo, la numInitialChunks opción no tiene efecto si se han definido zonas y rangos de zonas para la colección vacía.
Para fragmentar una colección utilizando un índice hash compuesto, consulte Distribución de fragmentos iniciales con índices hash compuestos.
Distribución de fragmentos iniciales con í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.
La numInitialChunks opción no tiene efecto si se han definido zonas y rangos de zonas para la colección vacía y presplitHashedZones falsees.
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,
sh.shardCollection()crea 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
sh.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 sh.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
mongos utiliza para "majority" la preocupación de escritura del comando y shardCollection su sh.shardCollection() ayudante.
Ejemplos
Uso simple
Dada una colección llamada people en una base de datos llamada records, el siguiente comando fragmenta la colección por el campo zipcode:
sh.shardCollection("records.people", { zipcode: 1 } )
Uso con opciones
La base de datos phonebook tiene una colección contacts sin una intercalación predeterminada. El siguiente ejemplo utiliza sh.shardCollection() para crear una partición para el phonebook.contacts con:
una clave de fragmento con hash en el
last_namecampo,5trozos iniciales, yuna intercalación de
simple.
sh.shardCollection( "phonebook.contacts", { last_name: "hashed" }, false, { numInitialChunks: 5, collation: { locale: "simple" } } )