Configuração de fragmentação
Nesta página
Visão geral
A fragmentação é uma forma de distribuir seus dados em várias máquinas. O MongoDB usa fragmentação para oferecer suporte a implantações com grandes conjuntos de dados e operações de alto rendimento. Neste guia, você pode aprender como configurar a fragmentação em seu aplicação Mongoid.
Declarar chaves de shard
O MongoDB usa chaves de fragmento para distribuir os documentos de uma coleção entre fragmentos. Uma chave de shard é um campo indexado ou vários campos cobertos por um índice composto, que determina a distribuição dos documentos da coleção entre os shards do cluster. Em seu aplicação Mongoid, você pode declarar uma chave de shard usando a macro shard_key
ao criar um modelo.
O exemplo seguinte cria uma classe Person
com uma chave de shard no 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
Observação
Para fragmentar uma coleta, a coleta deve ter um índice que comece com a chave de fragmento. O índice pode estar apenas na chave de fragmentação ou pode ser um índice composto onde a chave de fragmentação é o prefixo. Você pode usar a funcionalidade de gerenciamento de índices do Mongoid para criar o índice. Para saber mais sobre gerenciamento de índice com Mongoid, consulte o guia Gerenciamento de índice.
Se um modelo declarar uma chave de fragmentação, o Mongoid espera que a collection fragmentada use a chave declarada para fragmentação. Quando o Mongoid recarrega os modelos, ele fornece a chave de shard junto com o campo _id
para o comando find
para melhorar o desempenho da query. Se a collection não for fragmentada com a chave de shard especificada, as queries poderão não retornar os resultados esperados.
Sintaxe
Você pode declarar chaves de shard usando a sintaxe completa do MongoDB ou uma sintaxe abreviada .
A sintaxe completa segue o formato do mongosh
método shardCollection() e permite a você especificar os seguintes tipos de chaves de shard:
Chaves de longo alcance
Chaves com hash
Chaves compostas
A sintaxe completa também permite especificar opções de collection e fragmentação.
O exemplo a seguir cria cada um dos tipos anteriores de chave de shard no 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
A sintaxe abreviada permite declarar uma chave de shard especificando apenas o nome do campo . Essa sintaxe oferece suporte apenas a chaves de shard à distância e compostas e não permite especificar opções de collection ou fragmentação.
O exemplo a seguir cria uma chave de shard composta e à distância:
# Create a ranged shard key shard_key :ssn # Create a compound shard key shard_key :ssn, :country
Especificar campos associados e incorporados
Você pode especificar uma chave de shard em uma associação belongs_to
no lugar de um nome de campo . Ao fazer isso, o Mongoid cria a chave de shard na chave primária da coleção associada.
O exemplo seguinte cria uma chave de fragmento na associação belongs_to
em um modelo Person
. Como a coleção country
associada tem uma chave primária chamada country_id
, o Mongoid fragmenta por esse 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
Você pode especificar uma chave de shard em um documento incorporado usando a notação de ponto para delimitar os nomes dos campo . O exemplo seguinte cria uma chave de shard no campo address.city
:
class Person include Mongoid::Document field :address shard_key "address.city" end
Observação
Como o caractere ponto (.
) é usado para delimitar campos incorporados, o Mongoid não oferece suporte à criação de chaves de shard em campos com nomes que contenham um caractere de ponto.
Tarefas de Rake de gerenciamento de fragmentação
Você pode fragmentar collections em seu banco de dados de acordo com as chaves de shard definidas em seus modelos Mongoid executando a tarefa de rastelo db:mongoid:shard_collections
. Para garantir que as collections contenham índices que comecem com a chave de shard, você pode primeiro executar a tarefa db:mongoid:create_indexes
de varredura.
Execute os seguintes comandos de antro para criar os índices e fragmentar as coleções com base nas chaves de fragmento do seu modelo:
rake db:mongoid:create_indexes rake db:mongoid:shard_collections
O gerenciamento de índices e as tarefas de fragmentação do Rake não param quando encontram um erro em uma classe de modelo específica. Em vez disso, eles registram o erro e continuam processando o próximo modelo. Para garantir que as tarefas de antro não encontrem erros, verifique a saída do registrador Mongoid configurado para seu aplicação.
Observação
Ao executar operações relacionadas ao esquema em um cluster fragmentado, os nós podem conter dados de cache relacionados à configuração local desatualizados. Para limpar os caches, execute o comando flushRouterConfig em cada mongos
nó do.
Informações adicionais
Para saber mais sobre fragmentação com o MongoDB, consulte o guia de fragmentação no manual do MongoDB Server .
Documentação da API
Para saber mais sobre a shard_key
macro discutida neste guia, consulte a documentação da API shard_key.