Docs Menu
Docs Home
/ /

Configuración de fragmentación

La fragmentación es una forma de distribuir los datos entre varias máquinas. MongoDB utiliza la fragmentación para facilitar implementaciones con grandes conjuntos de datos y operaciones de alto rendimiento. En esta guía, aprenderá a configurar la fragmentación en su aplicación Mongoid.

MongoDB utiliza claves de fragmento para distribuir los documentos de una colección entre fragmentos. Una clave de fragmento 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 los fragmentos del clúster. En su aplicación Mongoid, puede declarar una clave de fragmento mediante el comando 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 fragmentación, Mongoid espera que la colección fragmentada utilice dicha clave para la fragmentación. Al recargar los modelos, Mongoid proporciona la clave de fragmentación junto con el campo _id al comando find para mejorar el rendimiento de las consultas. Si la colección no está fragmentada con la clave de fragmentación especificada, es posible que las consultas no devuelvan los resultados esperados.

Puede declarar claves de fragmentos utilizando la sintaxis completa de MongoDB o una sintaxis abreviada.

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

  • Teclas a distancia

  • Claves hash

  • 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 de clave de fragmento anteriores 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 permite declarar una clave de fragmento especificando únicamente el nombre del campo. Esta sintaxis solo admite claves de fragmento de rango y compuestas, y no permite especificar opciones de colección ni de fragmentació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 fragmento en una asociación belongs_to en lugar de un nombre de campo. Al hacerlo, Mongoid crea la clave de fragmento en la clave principal de la colección asociada.

El siguiente ejemplo crea una clave de fragmento en la asociación belongs_to de un modelo Person. Dado que la colección country asociada tiene una clave principal llamada country_id, Mongoid fragmenta 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.

Puede fragmentar colecciones en su base de datos según las claves de fragmentación definidas en sus modelos Mongoid ejecutando la tarea de rake db:mongoid:shard_collections. Para garantizar que las colecciones contengan índices que comiencen con la clave de fragmentación, primero puede ejecutar la tarea de rake db:mongoid:create_indexes.

Ejecute los siguientes comandos rake para crear los índices y fragmentar las colecciones según las claves de fragmentación de su modelo:

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

Las tareas de gestión de índices y fragmentación no se detienen al detectar un error en una clase de modelo específica. En su lugar, registran el error y continúan procesando el siguiente modelo. Para garantizar que las tareas de gestión no hayan detectado ningún error, revise la salida del registrador Mongoid configurado para su aplicación.

Nota

Al realizar operaciones relacionadas con el esquema en un clúster fragmentado, los nodos podrían contener datos de caché de configuración local obsoletos. Para borrar las cachés, ejecute el comando flushRouterConfig en cada mongos nodo.

Para obtener más información sobre la fragmentación con MongoDB, consulte la guía de fragmentación en el manual del servidor MongoDB.

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

Objetivos de persistencia

En esta página