Definición
sh.shardAndDistributeCollection(namespace, key, unique, options)Fragmenta una colección y redistribuye inmediatamente los datos utilizando los recursos proporcionados. Clave de fragmento. La redistribución inmediata de datos permite una transferencia más rápida y reduce el impacto en las cargas de trabajo.
Importante
Método mongosh
Esta página documenta a
mongoshMétodo. Esta no es la documentación de un controlador específico del lenguaje, como Node.js.Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.
Ejecutar
sh.shardAndDistributeCollection()enmongoshproduce el mismo resultado que ejecutar consecutivamente los comandosshardCollectionyreshardCollection.
Parámetros
sh.shardAndDistributeCollection() toma los siguientes parámetros:
Parameter | Tipo | Necesidad | Descripción |
|---|---|---|---|
| String | Requerido | El namespace de la colección a fragmentar en el formato |
| Documento | Requerido | El documento que especifica el campo o campos que se utilizarán como clave de partición.
Establezca el valor del campo en uno de los siguientes:
Consulte también: Índices de clave de partición |
| Booleano | Opcional | Especifica Al utilizar claves de fragmentos con hash, no se puede |
| Documento | Opcional | Un documento que contiene campos opcionales, incluidos |
La opción options admite las siguientes opciones:
Parameter | Tipo | Descripción |
|---|---|---|
| entero | Especifica el número inicial de fragmentos que se crearán en todos los fragmentos del clúster al fragmentar y refragmentar una colección. MongoDB crea y equilibra los fragmentos en todo el clúster. El parámetro A partir de MongoDB 8.2, las operaciones de redistribución ignoran la configuración |
| Documento | Si la colección especificada para |
| Booleano | Especifique
|
| Documento | Especifique esta opción para crear un nuevo conjunto particionado de series temporales. 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. |
Considerations
Los siguientes factores pueden tener un impacto en el rendimiento o la distribución de tus datos.
Claves de partición
Aunque puede cambiar su clave de fragmento más tarde, considere cuidadosamente su elección de clave de fragmento para optimizar la escalabilidad y el 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:
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 saber cómo elegir mejor una clave de fragmento, consulte:
Claves de fragmentos 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.
Para especificar un campo de clave de partición con hash, utiliza field: "hashed" .
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.
Fragmentación de zonas y distribución inicial de fragmentos
La operación de partición de la colección (es decir, El comando shardCollection y el asistente sh.shardCollection() pueden realizar la creación y distribución inicial de fragmentos para una colección vacía o inexistente 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 del particionado zonificado. Después de la distribución inicial, el balanceador gestiona la distribución de fragmentos en adelante como de costumbre.
Para ver un ejemplo, consulte Predefinir zonas y rangos de zonas para una colección vacía o inexistente. 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 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.
La opción numInitialChunks no tiene efecto si se han definido zonas y rangos de zonas para la colección vacía y presplitHashedZones es false.
Para ver un ejemplo, consulte Predefinir zonas y rangos de zonas para una colección vacía o inexistente.
Unicidad
Si especificas unique: true, debes crear el índice antes de usar sh.shardAndDistributeCollection().
Aunque puedes tener un índice compuesto único donde la clave de partición es un prefijo, si utilizas el parámetro unique, la colección debe tener un índice único que esté en la clave de partición.
Intercalación
Si la colección tiene una intercalación predeterminada, el sh.shardAndDistributeCollection comando debe incluir 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 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 "majority" para el nivel de confirmación de escritura (write concern) del comando shardCollection, su asistente sh.shardCollection() y el método sh.shardAndDistributeCollection().
Ejemplos
Los siguientes ejemplos muestran cómo se puede usar el método sh.shardAndDistributeCollection() con o sin parámetros opcionales.
Uso sencillo
Una base de datos llamada records contiene una colección llamada people. El siguiente comando divide la colección por el campo zipcode y redistribuye inmediatamente los datos en la colección records.people:
sh.shardAndDistributeCollection("records.people", { zipcode: 1 } )
Uso con Opciones
La base de datos phonebook tiene una colección contacts sin intercalación por defecto. El siguiente ejemplo utiliza sh.shardAndDistributeCollection() para fragmentar y redistribuir la colección phonebook.contacts con:
Una Clave de partición con hash en el campo
last_name.5trozos inicialessimpleintercalación.
sh.shardAndDistributeCollection( "phonebook.contacts", { last_name: "hashed" }, false, { numInitialChunks: 5, collation: { locale: "simple" } } )