Menu Docs

Configuração de fragmentação

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.

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.

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

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.

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.

Para saber mais sobre fragmentação com o MongoDB, consulte o guia de fragmentação no manual do MongoDB Server .

Para saber mais sobre a shard_key macro discutida neste guia, consulte a documentação da API shard_key.