Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

shardCollection (comando de base de datos)

shardCollection

Particiones una colección para distribuir sus documentos entre particiones. El El comando shardCollection debe ejecutarse en la base de datos admin.

Tip

En mongosh, este comando también se puede ejecutar a través del método asistente sh.shardCollection().

Los métodos asistente son convenientes para usuarios de mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

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

Para ejecutar,shardCollection db.runCommand( { <command> } ) utilice el método.

El comando tiene la siguiente forma:

db.adminCommand(
{
shardCollection: "<database>.<collection>",
key: { <field1>: <1|"hashed">, ... },
unique: <boolean>,
presplitHashedZones: <boolean>,
collation: { locale: "simple" },
timeseries: <object>
}
)

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 comando enableSharding para configurar la base de datos.

El comando toma los siguientes campos:

Campo
Tipo
Descripción

shardCollection

string

El namespace de la colección para particionar en la forma <database>.<collection>.

key

Documento

El documento que especifica el campo o campos que se utilizarán como clave de partición.

{ <field1>: <1|"hashed">, ... }

Establezca los valores del campo en:

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.

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

unique

booleano

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

No puedes especificar true cuando utilizas claves de fragmentación con hash.

collation

Documento

opcional. Si la colección especificada para shardCollection tiene una intercalación por defecto, se debe incluir un documento de intercalación con { locale : "simple" }, o el comando shardCollection fallará. 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 true para 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 con presplitHashedZones: true devuelve un error si alguna de las siguientes condiciones es verdadera:

Objeto

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 shardCollection 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 conocer la sintaxis detallada, consulte Opciones de series de tiempo.

Nuevo en la versión 5.1.

Nuevo en la versión 5.1.

Para crear una colección de series de tiempo nueva que esté particionada, especifica la opción timeseries en shardCollection.

La opción series temporales incluye los siguientes campos:

Campo
Tipo
Descripción

timeField

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

ADVERTENCIA: A partir de MongoDB 8.0, el uso de timeField como clave de partición en una colección de series de tiempo está obsoleto.

metaField

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 _id ni el mismo que el timeseries.timeField. El campo puede ser de cualquier tipo de dato.

Aunque el campo metaField es opcional, el uso de metadatos puede mejorar la optimización de query. Por ejemplo, MongoDB crea un índice compuesto automáticamente en los campos metaField y timeField para las nuevas colecciones. Si no proporcionas un valor para este campo, los datos se agrupan únicamente en función del tiempo.

granularity

string

Opcional. Los valores posibles son:

  • "seconds"

  • "minutes"

  • "hours"

Por defecto, MongoDB establece el granularity en "seconds" para una ingestión de alta frecuencia.

Establece manualmente el parámetro granularity para mejorar el rendimiento optimizando cómo se almacena internamente la información en la colección de series de tiempo. Para seleccionar un valor para granularity, elige la coincidencia más cercana al intervalo de tiempo entre medidas consecutivas entrantes.

Si especificas el timeseries.metaField, considera el lapso de tiempo entre mediciones entrantes consecutivas que tienen el mismo valor único para el campo metaField. Las mediciones suelen tener el mismo valor único para el campo metaField si provienen de la misma fuente.

Si no especificas timeseries.metaField, considera el intervalo de tiempo entre todas las mediciones que se insertan en la colección.

Si estableces el parámetro granularity, no puedes establecer los parámetros bucketMaxSpanSeconds y bucketRoundingSeconds.

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.

Al fragmentar colecciones de series temporales, solo puede especificar los siguientes campos en la clave de fragmentació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 saber cómo elegir mejor una clave de fragmento, consulte:

Advertencia

A partir de MongoDB 8.0, las claves de partición que contienen el timeField quedan obsoletas para las colecciones de series de tiempo.

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.

Al shardCollection ejecutar el comando, el balanceador comienza a distribuir los datos de la colección a otros fragmentos del clúster. Un fragmento solo puede participar en una migración de fragmentos a la vez. Cuando MongoDB copia correctamente un rango de datos de un fragmento a otro, el eliminador de rangos marca el rango del fragmento donante para su eliminación. Este proceso es lento y consume muchos recursos.

A partir de MongoDB,8.0 si su implementación cumple con los requisitos de recursos, se recomienda usar el reshardCollection comando para realizar este balanceo inicial de datos mediante la redistribución de los datos a la misma clave. Esto permite que MongoDB redistribuya los datos entre los fragmentos sin esperar al balanceador.

Para usar el comando reshardCollection para realizar el equilibrado inicial:

  1. Utilice el comando shardCollection para configurar la colección como colección particionada por partición.

  2. Utiliza el reshardCollection para redistribuir los datos a la misma clave de partición configurando la opción forceRedistribution en true. Luego, MongoDB equilibra los datos entre las particiones.

Para obtener más información, se puede consultar Redistribuir con la misma clave de partición.

La operación de colección de particiones (es decir, shardCollection comando y el sh.shardCollection() asistente) pueden realizar la creación y distribución inicial de fragmentos para una colección vacía o inexistente si las zonas y los rangos de zonas han sido definidos para la colección. La distribución inicial de fragmentos permite una configuración más rápida del particionado por zonas. Después de la distribución inicial, el equilibrador gestiona la distribución de fragmentos en el futuro como de costumbre.

Para particionar una colección utilizando un índice encriptada compuesto, consulta Particionado por zonas e índices encriptada 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.

Consulte Zonas predefinidas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo.

Si se especifica unique: true:

  • Si la colección está vacía, 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 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

Si la colección tiene una intercalación predeterminada, el comando debe incluir 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 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 ayuda sh.shardCollection(), y el método sh.shardAndDistributeCollection().

La siguiente operación habilita la partición para la colección people en la base de datos records y utiliza el campo zipcode como clave de partición:

db.adminCommand( { shardCollection: "records.people", key: { zipcode: 1 } } )

Volver

setAllowMigrations

En esta página