Menu Docs
Página inicial do Docs
/ / /
Mongoid
/

Configuração de fragmentação

Nesta página

  • Declaração de chaves de shard
  • Tarefas de Rake de gerenciamento de fragmentação

O Mongoid pode ajudar a configurar a fragmentação de collections em ambientes fragmentados.

As chaves de shard podem ser declaradas em modelos usando a macro shard_key :

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

Observe que, para fragmentar uma collection, a collection deve ter um índice que comece com a tecla shard. O Mongoid fornece funcionalidadede gerenciamento de índice , que os exemplos aqui aproveitam.

O Mongoid suporta duas sintaxes para declarar chaves de shard. A sintaxe padrão segue o formato doajudante de shell shardCollection do MongoDB e permite especificar chaves de shard com intervalo e hash, chaves de shard compostas e opções de fragmentação de collection:

shard_key ssn: 1
shard_key ssn: 1, country: 1
shard_key ssn: :hashed
shard_key {ssn: :hashed}, unique: true

A alternativa é a sintaxe abreviada , na qual somente as chaves são fornecidas. Essa sintaxe suporta apenas chaves de fragmento à distância e não permite a especificação de opções:

shard_key :ssn
shard_key :ssn, :country

shard_key A macro pode levar o nome de uma associação belongs_to no lugar de um nome de campo , caso em que o Mongoid usará a chave estrangeira configurada na associação como o nome do campo :

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

A chave de shard também pode fazer referência a um campo em um documento incorporado, usando o "." caractere para delimitar os nomes dos campo :

shard_key "location.x" => 1, "location.y" => 1
shard_key "location.x", "location.y"

Observação

Porque o "." caractere é usado para delimitar campos em documentos incorporados, o Mongoid não suporta atualmente campos de chave de shard que contêm literalmente o "." personagem.

Observação

Se um modelo declarar uma chave de shard, o Mongoid espera que a respectiva collection seja fragmentada com a chave de shard especificada. Ao recarregar modelos, o Mongoid fornecerá a chave de shard além do valor de campo id para o comando find para melhorar o desempenho da query, especialmente em clusters fragmentados distribuídos geograficamente. Se a collection não for fragmentada com a chave de shard especificada, as queries poderão produzir resultados incorretos.

Para fragmentar collections no banco de dados de dados de acordo com as chaves de shard definidas nos modelos, execute a tarefa db:mongoid:shard_collections Rake. Se necessário, execute a tarefa db:mongoid:create_indexes Rake antes de fragmentar as collections:

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

Observação

Assim como acontece com as tarefas de varredura de gerenciamento de índice, as tarefas de varredura de gerenciamento de fragmentação geralmente não param e falham quando encontram o problema com uma classe de modelo específica. Em vez disso, eles registram o problema (no registrador Mongoid configurado) em um nível apropriado e continuam com o próximo modelo. Quando o Mongoid é usado em um aplicação Rails, isso significa que os resultados da execução da tarefa de rastelo geralmente serão encontrados no arquivo de log por ambiente, como log/development.log.

Observação

Ao realizar operações relacionadas ao esquema em um cluster fragmentado, como o sharding de collections conforme descrito neste documento ou a criação ou eliminação de collections ou bancos de dados, os nós do cluster podem acabar com dados de cache relacionados à configuração local desatualizados. Execute o comando flushRouterConfig em cada nó mongos para limpar estes caches.

Voltar

Gerenciamento de índices