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 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 una mongosh Mé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() en tiene el mismo mongosh shardCollection reshardCollection resultado que ejecutar consecutivamente los comandos y.

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

Parameter
Tipo
Necesidad
Descripción

namespace

String

Requerido

El espacio de nombres de la colección que se va a fragmentar en el "<database>.<collection>" formato.

key

Documento

Requerido

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:

  • 1 para fragmentación basada en rangos

  • "hashed" para especificar una clave de fragmento con hash.

    Las claves de fragmento deben ser compatibles con un índice. El índice debe existir antes de ejecutar el método shardAndDistributeCollection().

Véase también: Índices de claves de fragmentos

unique

Booleano

Opcional

Especifique true para garantizar que el índice subyacente aplique una restricción única. El valor predeterminado es false.

Al utilizar claves de fragmentos con hash, no se puede true especificar.

options

Documento

Opcional

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

El argumento options admite las siguientes opciones:

Parameter
Tipo
Descripción

numInitialChunks

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 numInitialChunks debe resultar en menos de 8192 por fragmento. El número predeterminado de fragmentos por fragmento es 90.

A partir de MongoDB 8.2, las operaciones de re-fragmentación ignoran la configuración numInitialChunks cuando la clave de fragmento contiene un prefijo hash. En su lugar, MongoDB divide de forma determinista el espacio de la clave hash entre los destinatarios, utilizando el mismo enfoque que la creación inicial de fragmentos para colecciones 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 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.

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

timeseries

Documento

Especifique esta opción para crear una nueva colección de series de tiempo fragmentadas.

Para fragmentar una colección de series de tiempo existente, omita 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 completar el campo timeseries.

Para conocer la sintaxis detallada, consulte Opciones de series de tiempo.

Los siguientes factores pueden afectar el rendimiento o la distribución de sus datos.

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.

Al fragmentar colecciones de series temporales, solo puede especificar los siguientes campos en la clave de fragmentación:

  • El metaField

  • Subcampos de metaField

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

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:

Las claves de fragmento con hash utilizan un índice con hash o un índice con hash compuesto como clave de fragmento.

Para especificar un campo de clave de partición con hash, utiliza field: "hashed" .

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.

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

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.

Para ver un ejemplo, consulte Predefinir zonas y rangos de zonas para una colección vacía o inexistente.

Si especifica unique: true, debe crear el índice antes de usar sh.shardAndDistributeCollection().

Aunque puede tener un índice compuesto único donde la clave de fragmento sea un prefijo, si usa el unique parámetro, la colección debe tener un índice único que esté en la clave de fragmento.

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 intercalación. Si se especifica la opción de intercalación para una colección sin intercalación, no tendrá efecto.

mongosutiliza"majority"para la preocupación de escritura del comandoshardCollection, su ayudantesh.shardCollection()y el métodosh.shardAndDistributeCollection().

Los siguientes ejemplos muestran cómo puede utilizar 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 fragmenta 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 phonebook base de datos tiene una contacts colección sin intercalación predeterminada. El siguiente ejemplo usa sh.shardAndDistributeCollection() para fragmentar y redistribuir la phonebook.contacts colección con:

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

Volver

sh.setBalancerState

En esta página