Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

dividir

Nesta página

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

Alterado na versão 4,2.

Divisão um parte em um cluster fragmentado em dois parte. A partir do MongoDB 4.2, os shards managed e divisão os parte com base nas estatísticas de tamanho do parte 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 sh.splitAt() e sh.splitFind() auxiliar.

Os métodos auxiliares são convenientes 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 conveniência não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

O comando split deve ser executado no banco de dados admin e utiliza o seguinte formulário:

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

O comando split recebe um documento com 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
variedade

Novidades na versão 2.4: Os limites de uma parte para divisão. bounds se aplica a partes em collection particionadas usando uma chave de fragmento com hash. A array do parâmetro deve consistir em dois documento especificando os valores de chave de fragmento inferior e superior da parte. Os valores devem corresponder aos valores mínimo e máximo de uma parte 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 a { _id : 99 }. não exige que exista uma correspondência para identificarsplit o chunk apropriado. Em seguida, o comando o divide em dois pedaços de tamanho igual.

Observação

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 .

← estado de fragmentação