dividir
Nesta página
Definição
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 envolvemsplit
.O comando
split
deve ser executado no banco de dadosadmin
.Dica
Em
mongosh
, esse comando também pode ser executado por meio dos métodos auxiliaressh.splitAt()
esh.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.
Compatibilidade
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
Sintaxe
O comando tem a seguinte sintaxe:
db.adminCommand( { split: <database>.<collection>, <find|middle|bounds> } )
Campos de comando
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: Você não pode usar a opção |
bounds | array |
Você não pode usar a opção |
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 . |
Considerações
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()
.
Formatos de comando
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.
Exemplos
As seções seguintes fornecem exemplos do comando split
.
Divisão uma parte ao meio
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.
Definir um ponto de divisão arbitrário
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.
Dividir um bloco usando valores de uma chave de fragmento com hash
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.
Erro de bloqueio de metadados
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
.