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

sh.shardAndDistributeCollection() (método mongosh)

sh.shardAndDistributeCollection(namespace, key, unique, options)

Fragmenta una colección y redistribuye inmediatamente los datos utilizando el suministro de clave de partición. La redistribución inmediata de datos permite un movimiento de datos más rápido y una reducción del impacto en las cargas de trabajo.

Importante

Método mongosh

Esta página documenta a Método mongosh. Esta no es la documentación de un driver de lenguaje específico, 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() en mongosh produce el mismo resultado que ejecutar consecutivamente los comandos shardCollection y reshardCollection.

sh.shardAndDistributeCollection() toma los siguientes parámetros:

Parameter
Tipo
Necesidad
Descripción

namespace

String

Requerido

El namespace de la colección a fragmentar en el formato "<database>.<collection>".

key

Documento

Requerido

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:

  • 1 para particionado basado en rango

  • "hashed" para especificar una clave de partición con hash.

    Las claves shards deben estar respaldadas por un índice. El índice debe existir antes de ejecutar el método shardAndDistributeCollection().

Consulte también: Índices de clave de partición

unique

Booleano

Opcional

Especifica true para garantizar que el índice subyacente imponga una restricción única. Por defecto es false.

Al utilizar claves de fragmento con hash, no puedes especificar true.

options

Documento

Opcional

Un documento que contiene campos opcionales, incluidos numInitialChunks y collation.

La opción options admite las siguientes opciones:

Parameter
Tipo
Descripción

numInitialChunks

entero

Especifica el número inicial de fragmentos a crear en todas las particiones del clúster al fragmentar y volver a fragmentar una colección. Luego, MongoDB crea y balancea fragmentos a través del clúster. El parámetro numInitialChunks debe resultar en menos de 8192 por partición. El número por defecto de fragmentos por partición es 90.

Las operaciones de resharding ignoran la configuración numInitialChunks cuando la clave de partición contiene un prefijo encriptada. En su lugar, MongoDB divide determinísticamente el espacio de claves encriptada entre los destinatarios, utilizando el mismo enfoque que la creación inicial de fragmentos para colecciones iniciales de valores hash vacías.

collation

Documento

Si la colección especificada para shardAndDistributeCollection() tiene una intercalación predeterminada, usted debe incluir un documento de intercalación con { locale : "simple" }, o el método shardAndDistributeCollection() fallará.

presplitHashedZones

Booleano

Especifique true para realizar la creación y distribución inicial de fragmentos para una colección vacía o inexistente, según las zonas definidas y los rangos de zonas para la colección. Sólo para particionado con hash.

shardAndDistributeCollection() con presplitHashedZones: true devuelve un error si se cumple alguna de las siguientes condiciones:

timeseries

Documento

Especifique esta opción para crear un nuevo conjunto particionado de series temporales.

Para dividir una colección de series de tiempo existente, omite este parámetro.

Cuando la colección especificada en shardAndDistributeCollection es una colección de series de tiempo y no se especifica la opción timeseries, MongoDB utiliza los valores que definen la colección de series de tiempo existente para poblar el campo timeseries.

Para obtener la sintaxis detallada, consulta Opciones de series de tiempo.

Los siguientes factores pueden tener un impacto en el rendimiento o la distribución de tus datos.

Aunque puedes cambiar tu clave de partición más adelante, considera cuidadosamente tu elección de clave de partición para optimizar la escalabilidad y el rendimiento.

Al particionar colecciones de series de tiempo, solo se pueden especificar los siguientes campos en la clave de partición:

  • La metaField

  • Subcampos de metaField

  • La 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:

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:

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.

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, consulta Predefinir zonas y rangos de zonas para una colección vacía o inexistente. 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 compuesto encriptada, consulta Distribución inicial de fragmentos con índices compuestos encriptada.

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.

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.

Si la colección tiene una intercalación por defecto, el comando sh.shardAndDistributeCollection debe incluir un parámetro collation con el valor { locale: "simple" }. Para colecciones no vacías con una intercalación por defecto, debes tener al menos un índice con la intercalación simple cuyos campos admitan el patrón de clave de partición.

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.

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().

Los siguientes ejemplos muestran cómo se puede usar el método sh.shardAndDistributeCollection() con o sin parámetros opcionales.

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 } )

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:

sh.shardAndDistributeCollection(
"phonebook.contacts",
{ last_name: "hashed" },
false,
{
numInitialChunks: 5,
collation: { locale: "simple" }
}
)

Volver

sh.setBalancerState

En esta página