Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

dividir

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Campos de comando
  • Considerações
  • Formatos de comando
  • Exemplos
  • Erro de bloqueio de metadados
split

Divide umchunk em um cluster fragmentado em dois chunks. Os fragmentos gerenciam e divisão chunks com base nas estatísticas de tamanho de chunk que mantêm.

Para circunstâncias excepcionais, o comando split permite que os administradores criem divisões manualmente. Consulte Dividir pedaços em um cluster fragmentado para obter informações sobre essas circunstâncias e sobre os comandos de shell do MongoDB que envolvem split.

Dica

Em mongosh, esse comando também pode ser executado por meio dos métodos auxiliares sh.splitAt() e sh.splitFind().

Os métodos auxiliares são práticos para os usuários mongosh, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Importante

Este comando não é suportado em instâncias sem servidor. Para obter mais informações, consulte Comandos não suportados.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

O comando tem a seguinte sintaxe:

db.adminCommand( { split: <database>.<collection>,
<find|middle|bounds> } )

O comando utiliza os seguintes campos:

Campo
Tipo
Descrição
split
string
O nome da collection onde o chunk existe. Especifique o namespace completo da coleção, incluindo o nome do banco de dados.
find
documento

Uma query que especifica uma correspondência de igualdade na chave de fragmento. A correspondência seleciona a parte que contém o documento especificado. Você deve especificar somente uma das seguintes opções: find, bounds ou middle.

Você não pode usar a opção find em uma collection vazia.

bounds
array

Novidades na versão 2.4: Os limites de um chunk a ser dividido. bounds se aplica a chunks em collections particionadas usando uma hashed shard key. A array do parâmetro deve consistir em dois documentos especificando os valores de chave de shard inferior e superior do chunk. Os valores devem corresponder aos valores mínimo e máximo de um chunk existente. Especifique apenas uma das seguintes opções: find, bounds ou middle.

Você não pode usar a opção bounds em uma collection vazia.

middle
documento
O documento a ser usado como ponto de divisão para criar dois chunks. split requer uma das seguintes opções: find, bounds ou middle.

Quando usado com a opção find ou bounds , o comando split divide o chunk ao longo da mediana. Dessa forma, o comando não pode usar a opção find ou bounds para dividir um chunk vazio, pois um chunk vazio não tem mediana.

Para criar divisões em blocos vazios, use a opção middle com o comando split ou use o comando sh.splitAt() .

Para criar uma divisão de parte, conecte-se a uma instância mongos e emita o seguinte comando para o reconhecimento de data center admin :

db.adminCommand( { split: <database>.<collection>,
find: <document> } )

Ou:

db.adminCommand( { split: <database>.<collection>,
middle: <document> } )

Ou:

db.adminCommand( { split: <database>.<collection>,
bounds: [ <lower>, <upper> ] } )

Para criar uma divisão para uma collection que utiliza uma chave de fragmento com hash, utilize o parâmetro bounds. Não utilize o parâmetro middle para este propósito.

Aviso

Tenha cuidado ao dividir dados em uma collection fragmentada para criar novos parte. Quando você fragmenta uma collection que tem dados existentes, o MongoDB cria automaticamente partes para distribuir uniformemente a collection. Para fazer a divisão dos dados de forma eficaz em um cluster fragmentado, você deve considerar o número de documento em uma parte e o tamanho médio do documento para criar um tamanho uniforme de parte. Quando as partes têm tamanhos irregulares, os fragmentos podem ter um número igual de partes, mas ter tamanhos de dados muito diferentes. Evite criar divisão que levem a uma collection com parte de tamanhos diferentes.

Dica

Veja também:

As seções seguintes fornecem exemplos do comando split.

db.adminCommand( { split : "test.people", find : { _id : 99 } } )

O comando identifica o chunk split na people coleção do test banco de dados , que contém documentos que correspondem { _id : 99 } a . split não exige que exista uma correspondência para identificar o chunk apropriado. Em seguida, o comando o divide em dois pedaços de tamanho igual.

Observação

split cria dois blocos iguais por intervalo em oposição ao tamanho e não usa o ponto selecionado como limite para os novos blocos.

Para definir um ponto de divisão arbitrário, use o seguinte formulário:

db.adminCommand( { split : "test.people", middle : { _id : 99 } } )

O comando identifica o chunk split na people collection do test banco de dados , que conteria documentos correspondentes à query { _id : 99 }. split não exige que exista uma correspondência para identificar o chunk apropriado. Em seguida, o comando o divide em dois blocos, com o documento correspondente como o limite inferior de um dos blocos divididos.

Esse formulário é normalmente usado ao pré-divisão dados em uma collection.

Este exemplo utiliza a chave de fragmento com hash userid em uma collection people de um reconhecimento de data center test . O comando a seguir usa uma array que contém dois documentos de campo único para representar os valores mínimos e máximos da chave de fragmento com hash para a divisão da parte:

db.adminCommand( { split: "test.people",
bounds : [ { userid: NumberLong("-5838464104018346494") },
{ userid: NumberLong("-5557153028469814163") }
] } )

Observação

O MongoDB usa o tipo 64-bit NumberLong para representar o valor com hash.

Use sh.status() para ver os limites existentes das chaves de fragmento.

Se outro processo, como um processo de balancer, alterar metadados enquanto split estiver em execução, você poderá ver um metadata lock error.

errmsg: "The collection's metadata lock is already taken."

Esta mensagem indica que a divisão falhou sem efeitos colaterais. Tente novamente o comando split .

Voltar

estado de fragmentação