Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

Configuración de particionado

El particionado es una forma de distribuir tus datos entre varias máquinas. MongoDB utiliza particionado para admitir implementaciones con grandes conjuntos de datos y operaciones de alto rendimiento. En esta guía, puedes aprender cómo configurar el particionado en tu aplicación Mongoid.

MongoDB utiliza claves de partición para distribuir los documentos de una colección entre las particiones. Una clave de partición es un campo indexado, o varios campos cubiertos por un índice compuesto, que determina la distribución de los documentos de la colección entre las particiones del clúster. En tu aplicación Mongoid, puedes declarar una clave de partición utilizando la shard_key macro al crear un modelo.

El siguiente ejemplo crea una clase Person con una clave de partición en el campo ssn:

class Person
include Mongoid::Document
field :ssn
shard_key ssn: 1
# The collection must also have an index that starts with the shard key.
index ssn: 1
end

Nota

Para fragmentar una colección, esta debe tener un índice que comience con la clave de fragmentación. El índice puede estar basado únicamente en la clave de fragmentación o puede ser un índice compuesto donde la clave de fragmentación es el prefijo. Puede usar la función de gestión de índices de Mongoid para crear el índice. Para obtener más información sobre la gestión de índices con Mongoid, consulte Guíade gestión de índices.

Si un modelo declara una clave de partición, Mongoid espera que la colección particionada utilice la clave declarada para particionar. Cuando Mongoid recarga modelos, proporciona la clave de partición junto con el campo _id al comando find para mejorar el rendimiento de la query. Si la colección no está particionada con la clave de partición especificada, es posible que las consultas no devuelvan los resultados esperados.

Puedes declarar claves de fragmento utilizando sintaxis completa de MongoDB o empleando una sintaxis abreviada.

La sintaxis completa sigue el formato de mongosh métodoshardCollection() y le permite especificar los siguientes tipos de claves de fragmento:

  • Teclas clasificadas por rango

  • Claves encriptadas

  • Teclas compuestas

La sintaxis completa también le permite especificar opciones de recopilación y fragmentación.

El siguiente ejemplo crea cada uno de los tipos anteriores de clave de partición en el campo sson:

# Create a ranged shard key
shard_key ssn: 1
# Create a compound shard key
shard_key ssn: 1, country: 1
# Create a hashed shard key
shard_key ssn: :hashed
# Specify a shard key option
shard_key {ssn: :hashed}, unique: true

La sintaxis abreviada te permite declarar una clave de partición especificando solo el nombre del campo. Esta sintaxis solo admite claves de partición mixtas y por rango, y no permite especificar opciones de partición ni de colección.

El siguiente ejemplo crea una clave de partición compuesta y clasificada por rango:

# Create a ranged shard key
shard_key :ssn
# Create a compound shard key
shard_key :ssn, :country

Puede especificar una clave de partición en una asociación de belongs_to en lugar de un nombre de campo. Al hacerlo, Mongoid crea la clave de partición en la clave primaria de la colección asociada.

El siguiente ejemplo crea una clave de partición en la asociación belongs_to en un modelo Person. Debido a que la colección asociada country tiene una llave primaria llamada country_id, Mongoid realiza la partición por ese campo:

class Person
include Mongoid::Document
belongs_to :country
# Shards by country_id
shard_key country: 1
# The collection must have an index that starts with the shard key
index country: 1
end

Puedes especificar una clave de partición en un documento incrustado utilizando notación de puntos para delimitar los nombres de los campos. El siguiente ejemplo crea una clave de partición en el campo address.city:

class Person
include Mongoid::Document
field :address
shard_key "address.city"
end

Nota

Debido a que el carácter de punto (.) se utiliza para delimitar campos integrados, Mongoid no admite la creación de claves de fragmentos en campos con nombres que contengan un carácter de punto.

Puedes fragmentar colecciones en tu base de datos siguiendo las claves de partición definidas en tus modelos de Mongoid ejecutando la tarea db:mongoid:shard_collections rake. Para asegurarte de que las colecciones contengan índices que empiecen con la clave de partición, primero puedes ejecutar la tarea Rake db:mongoid:create_indexes.

Ejecute los siguientes comandos rake para crear los índices y fragmentar las colecciones basadas en las claves de fragmentación de tu modelo:

rake db:mongoid:create_indexes
rake db:mongoid:shard_collections

Las tareas de rake de gestión de índices y particionado no se detienen cuando encuentran un error con una clase de modelo en particular. En cambio, registran el error y continúan procesando el siguiente modelo. Para garantizar que las tareas de rake no encuentren ningún error, revise la salida del logger de Mongoid configurado para su aplicación.

Nota

Al realizar operaciones relacionadas con el esquema en un clúster particionado, los nodos podrían contener datos de caché relacionados con la configuración local que están desactualizados. Para borrar los cachés, ejecute el comando flushRouterConfig en cada nodo mongos.

Para aprender más sobre el particionado con MongoDB, consulte la guía de particionado en el manual de MongoDB Server.

Para obtener más información sobre la shard_key macro analizada en esta guía, consulte la documentación de la API shard_key.

Volver

Configuración de persistencia

En esta página