Definición
sh.shardCollection(namespace, key, unique, options)Fragmenta una colección usando el
keycomo clave de partición. La clave de partición determina cómo MongoDB distribuye los documentos de la colección entre las particiones.Nota
Cambiado en la versión 6.0.
A partir de MongoDB 6.0, el particionado de una colección no requiere ejecutar primero el método
sh.enableSharding()para configurar la base de datos.Importante
Método mongosh
This page documents a
mongoshmethod. This is not the documentation for database commands or language-specific drivers, such as 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 namespace de la colección para particionar en la forma
"<database>.<collection>".keyDocumento
El documento que especifica el campo o campos que se utilizarán como clave de partición.
{ <field1>: <1|"hashed">, ... }Establezca el valor del campo en uno de los siguientes:
"hashed"para especificar una clave de partición con hash.
La clave de partición debe estar soportada por un índice. A menos que la colección esté vacía, el índice debe existir antes del comando
shardCollection. Si la colección está vacía, MongoDB crea el índice antes de fragmentar la colección si el índice que puede soportar la clave de partición no existe todavía.Ver también Índices de claves de fragmento
uniquebooleano
opcional. Especifique
truepara garantizar que el índice subyacente aplique una restricción de unicidad. Por defectofalse.No puedes especificar
truecuando utilizas claves de fragmentación con hash.Si se especifica el documento
options, se debe especificar explícitamente el valor paraunique.optionsDocumento
opcional. Un documento que contiene campos opcionales, incluidos
numInitialChunksycollation.La opción
optionsadmite las siguientes opciones:ParameterTipoDescripciónnumInitialChunksentero
opcional. Especifica la cantidad mínima de fragmentos a crear inicialmente al fragmentar una colección vacía con una clave de partición con hash. MongoDB luego crea y distribuye fragmentos en todo el clúster. El parámetro
numInitialChunksdebe ser menor que8192fragmentos por partición. El valor por defecto es2fragmentos por partición.Si la colección no está vacía o la clave de partición no contiene un campo con hash, la operación devuelve un error.
If sharding with presplitHashedZones: true, MongoDB attempts to evenly distribute the specified number of chunks across the zones in the cluster.
If sharding with presplitHashedZones: false or omitted and no zones and zone ranges are defined for the empty collection, MongoDB attempts to evenly distributed the specified number of chunks across the shards in the cluster.
If sharding with presplitHashedZones: false or omitted and zones and zone ranges have been defined for the empty collection,
numInitChunkshas no effect.
collationDocumento
opcional. Si la colección especificada para
shardCollectiontiene una intercalación predeterminada, debe incluir un documento de intercalación con``{ locale : "simple" }``, o el comandoshardCollectionfallará. Al menos uno de los índices cuyos campos admiten el patrón de clave de partición debe tener la intercalación simple.booleano
opcional. Especificar
truepara realizar la creación y distribución inicial de fragmentos para una colección vacía o inexistente en función de las zonas definidas y los rangos de zonas para la colección. Solo para particionado con hash.shardCollection()conpresplitHashedZones: truedevuelve un error si se cumple alguna de las siguientes condiciones:La clave de partición no contiene un campo indexado con hash (es decir, no es un índice hashed de campo único o un índice hashed compuesto).
La colección no tiene zonas ni rangos de zonas definidos.
Los rangos de zonas definidos no cumplen con los requisitos.
Documento
opcional. Especifica esta opción para crear una nueva colección de series de tiempo particionadas.
Para dividir una colección de series de tiempo existente, omite 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 poblar el campotimeseries.For detailed syntax, see Time Series Options.
Opciones de series de tiempo
Nuevo en la versión 5.1.
To create a new time series collection that is sharded, specify the timeseries option to sh.shardCollection().
La opción serie temporal requiere 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:
Por defecto, MongoDB establece el Establece manualmente el parámetro Si especificas el Si no especificas Si estableces 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 una colección ha sido particionada, MongoDB no proporciona ningún método para desfragmentar una colección particionada.
Claves de partición
Si bien puedes cambiar tu clave de partición más adelante, es importante considerar cuidadosamente la elección de tu clave de partición para evitar problemas de escalabilidad y rendimiento.
Claves de partición en colecciones de series temporales
Al particionar colecciones de series de tiempo, solo se pueden especificar los siguientes campos en la clave de partición:
La
metaFieldSubcampos de
metaFieldLa
timeField
Puede especificar combinaciones de estos campos en la clave de partición. No se admiten otros campos, incluido _id, en el patrón de clave de partición.
Cuando se especifica la clave de partición:
metaFieldpuede ser ya sea un:timeFielddebe ser:Al final del patrón de clave de partición
Tip
Evita especificar solo el timeField como clave de partición. Dado que el timeField aumenta de manera monótona, puede provocar que todas las escrituras aparezcan en un solo fragmento dentro del clúster. Idealmente, los datos se distribuyen uniformemente entre los fragmentos.
Para aprender cómo elegir mejor una clave de partición, consultar:
clave de partición con hash
Las claves de partición con hash utilizan un índice con hash o un índice compuesto con hash como clave de partición.
Utiliza el formulario field: "hashed" para especificar un campo clave de partición con hash.
Nota
Si las migraciones de fragmentos están en curso mientras se crea una colección de clave de partición con hash, la distribución inicial de fragmentos puede ser desigual hasta que el balanceador equilibre automáticamente la colección.
Particionado de zonas y distribución inicial de fragmentos
The shard collection operation (i.e. shardCollection command and the sh.shardCollection() helper) can perform initial chunk creation and distribution for an empty or a non-existing collection if zones and zone ranges have been defined for the collection. Initial chunk distribution allows for a faster setup of zoned sharding. After the initial distribution, the balancer manages the chunk distribution going forward per usual.
Consulte Predefinir zonas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo. Si se particionado una colección utilizando una clave de fragmentación clasificado por rango o una clave de partición con hash, la opción numInitialChunks no tiene efecto si se han definido zonas y rangos de zona para la colección vacía.
Para fragmentar una colección utilizando un índice encriptada compuesto, vea Distribución inicial de fragmentos con índices encriptadas compuestos.
Distribución inicial de fragmentos con índices con hash compuestos
MongoDB admite particionar colecciones en índices compuestos encriptados. Al fragmentar una colección vacía o inexistente utilizando una clave de fragmento hash compuesta, se aplican requisitos adicionales para que MongoDB pueda realizar la creación y distribución inicial de fragmentos.
The numInitialChunks option has no effect if zones and zone ranges have been defined for the empty collection and presplitHashedZones is false.
Consulta Predefinir zonas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo.
Unicidad
Si se especifica unique: true:
If the collection is empty,
sh.shardCollection()creates the unique index on the shard key if such an index does not already exist.If the collection is not empty, you must create the index first before using
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.
Ver también Colección particionada e índices únicos
Intercalación
If the collection has a default collation, the sh.shardCollection() command must include a collation parameter with the value { locale: "simple" }. For non-empty collections with a default collation, you must have at least one index with the simple collation whose fields support the shard key pattern.
No es necesario especificar la opción collation para colecciones sin una intercalación. Si se especifica la opción de intercalación para una colección sin intercalación, no tendrá ningún efecto.
Nivel de confirmación de escritura
mongos utiliza para "majority" la preocupación de escritura del comando y shardCollection su sh.shardCollection() auxiliar.
Ejemplos
Uso sencillo
Dada una colección llamada people en una base de datos llamada records, el siguiente comando crea particiones en la colección por el campo zipcode:
sh.shardCollection("records.people", { zipcode: 1 } )
Uso con Opciones
The phonebook database has a collection contacts with no default collation. The following example uses sh.shardCollection() to shard the phonebook.contacts with:
una clave de partición con hash en el campo
last_name,5fragmentos iniciales, yuna intercalación de
simple.
sh.shardCollection( "phonebook.contacts", { last_name: "hashed" }, false, { numInitialChunks: 5, collation: { locale: "simple" } } )