Definición
shardCollectionParticiones una colección para distribuir sus documentos entre particiones. El El comando
shardCollectiondebe ejecutarse en la base de datosadmin.Tip
En
mongosh, este comando también se puede ejecutar a través del método asistentesh.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.
Compatibilidad
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.
Sintaxis
Para ejecutar shardCollection, utiliza el método db.runCommand( { <command> } ).
El comando tiene la siguiente forma:
db.adminCommand( { shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, numInitialChunks: <integer>, 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.
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| string | El namespace de la colección para particionar en la forma |
| Documento | El documento que especifica el campo o campos que se utilizarán como clave de partición.
Establecer los valores de 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 Ver también Índices de claves de fragmento |
| booleano | Especifica No puedes especificar |
| entero | Especifica el número inicial de fragmentos que se crearán en todas las particiones del clúster al fragmentar una colección vacía con una clave particionada con hash. Luego, MongoDB creará y equilibrará fragmentos en todo el clúster. El 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.
|
| Documento | opcional. Si la colección especificada para |
booleano | opcional. Especificar
| |
Objeto | 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 Para obtener la sintaxis detallada, consulta Opciones de series de tiempo. Nuevo en la versión 5.1. |
Opciones de series de tiempo
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 |
|---|---|---|
| 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 |
Considerations
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
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.
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 particionar una colección utilizando un índice encriptada compuesto, consulta Particionado por zonas e índices encriptada compuestos.
Particionado de zonas e índices compuesto con hash
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.
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:
Si la colección está vacía,
shardCollectioncrea 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.
Ver también Colección particionada e índices únicos
Intercalación
Si la colección tiene una intercalación por defecto, el comando shardCollection debe incluir un parámetro collation con el valor { locale: "simple" }. Para colecciones no vacías con una intercalación por defecto, debe 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.
Nivel de confirmación de escritura
mongos utiliza "majority" para el nivel de confirmación de escritura (write concern) del comando shardCollection y su asistente sh.shardCollection().
Ejemplo
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 } } )