Docs Menu
Docs Home
/
Manual de base de datos
/

Claves de partición

La clave de fragmento es una clave indexada única campo o campos múltiples cubiertos por un índice compuesto que determina la distribución de los documentos de la colección entre los fragmentos del clúster.

MongoDB divide el rango de valores de clave de partición (o valores de clave de partición encriptados) en rangos no superpuestos de valores de clave de partición (o valores de clave de partición encriptados). Cada rango está asociado con un fragmento, y MongoDB intenta distribuir los fragmentos uniformemente entre los fragmentos del clúster.

Diagrama del espacio del valor de la clave de partición segmentado en rangos o fragmentos más pequeños.

La clave de partición tiene una relación directa con la efectividad de la distribución de fragmentos. Consultar Elegir una clave de partición.

Las colecciones particionadas suelen requerir un índice que admita la clave de partición. El índice puede ser un índice en la clave de partición o un índice compuesto donde la clave de partición es un prefijo del índice.

No se puede descartar ni ocultar un índice si es el único índice no oculto que admite la clave de fragmentación.

A partir de MongoDB 6.0.12 y,5.0.22 puede eliminar el índice de una clave de fragmento con hash. Para más información, consulte Eliminar un índice de clave de fragmento con hash.

MongoDB puede aplicar una restricción de unicidad a un índice de clave de fragmento con rango. Mediante el uso de un índice único en la clave de fragmento, MongoDB aplica la unicidad a toda la combinación de claves, no a sus componentes individuales.

Para una colección particionada clasificada por rango, solo los siguientes índices pueden ser únicos:

  • El índice en la clave de fragmentación

  • Un índice compuesto donde la clave de partición es un prefijo

  • El índice _id por defecto; sin embargo, el índice _id solo aplica la restricción de unicidad por fragmento si el campo _id no es la clave de fragmentación.

Importante

Los clústeres particionados no aplican la restricción de unicidad en los campos _id en todo el clúster cuando el campo _id no es la clave de partición.

Si el campo _id no es la clave del fragmento, la restricción de unicidad solo se aplica al fragmento que almacena el documento. Esto significa que dos o más documentos pueden tener el mismo valor _id, siempre que se encuentren en fragmentos diferentes.

Por ejemplo, una colección particionada con la clave de partición {x: 1} que se extiende por dos particiones A y B. Dado que la clave _id no es la clave de partición, la colección podría tener un documento con el valor _id 1 en la partición A y otro documento con el valor _id 1 en el partición B.

En los casos donde el campo _id no es la clave del fragmento, MongoDB espera que las aplicaciones apliquen la unicidad de los valores _id en los fragmentos.

Las restricciones de índices únicos implican que:

  • Para una colección particionada, no puede fragmentarse la colección si tiene varios índices únicos, a menos que la clave de partición sea el prefijo de todos los índices únicos.

  • Para una colección ya particionada, no puedes crear índices únicos en otros campos a menos que la clave de partición se incluya como prefijo.

  • Un índice único almacena un valor nulo para un documento al que le falta el campo indexado; es decir, un campo de índice que falta se trata como otra instancia de un valor de clave de índice null. Para más información, consultar Campo de documento faltante en un índice único de un solo campo.

Para aplicar la unicidad en los valores de la clave de fragmentación, pasar el parámetro unique como true al método sh.shardCollection():

  • Si la colección está vacía, sh.shardCollection() crea un índice único en la clave de fragmentación si tal índice no existe ya.

  • Si la colección no está vacía, primero se debe crear el índice antes de usar sh.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.

No puedes especificar una restricción única en un índice encriptado.

Para mantener la singularidad en un campo que no es la clave de partición, se debe consultar Restricciones de singularidad en campos arbitrarios.

Los documentos en colecciones particionadas pueden no tener los campos de clave de partición. Para establecer los campos de clave de partición que faltan, consultar Establecer campos de clave de partición que faltan.

Los campos de clave de partición que faltan caen dentro del mismo rango de partición que las claves de partición con valores nulos. Por ejemplo, si la clave de partición está en los campos { x: 1, y: 1 }, entonces:

Documento sin clave de partición
Cae en el mismo rango que

{ x: "hello" }

{ x: "hello", y: null }

{ y: "goodbye" }

{ x: null, y: "goodbye" }

{ z: "oops" }

{ x: null, y: null }

Para dirigirse a documentos con campos de clave de partición faltantes, se puede utilizar la condición de filtro { $exists: false } en los campos de clave de partición. Por ejemplo, si la clave de partición está en los campos { x: 1, y: 1 }, se pueden encontrar los documentos con campos de clave de partición faltantes ejecutando esta query:

db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } )

Si especifica una condición de filtro de coincidencia de igualdad nula (por { x: null } ejemplo,), el filtro coincide tanto aquellos documentos con campos de clave de fragmento faltantes como aquellos con campos de clave de fragmento configurados null en.

Algunas operaciones de escritura, como una escritura con una especificación de upsert, requieren una coincidencia exacta en la clave de fragmentación. En esos casos, para dirigirse a un documento que carece de la clave de fragmentación, incluya otra condición de filtro además de la coincidencia exacta null. Por ejemplo:

{ _id: <value>, <shardkeyfield>: null } // _id of the document missing shard key

Volver

Router (mongos)

Obtén una insignia de habilidad

¡Domina "Estrategias de partición" gratis!

Más información

En esta página