Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
dividir
Definição
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 envolvemsplit
.Dica
Em
mongosh
, esse comando também pode ser executado por meio dos métodossh.splitAt()
esh.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 dadosadmin
e utiliza o seguinte formulário:db.adminCommand( { split: <database>.<collection>, <find|middle|bounds> } ) O comando
split
recebe um documento com os seguintes campos:CampoTipoDescriçãosplit
stringO nome da collection onde o chunk existe. Especifique o namespace completo da coleção, incluindo o nome do banco de dados.find
documentoUma 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
oumiddle
.Você não pode usar a opção
find
em uma collection vazia.bounds
variedadeNovidades 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
oumiddle
.Você não pode usar a opção
bounds
em uma collection vazia.middle
documentoO documento a ser usado como ponto de divisão para criar dois chunks.split
requer uma das seguintes opções:find
,bounds
oumiddle
.
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.
Dica
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 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
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
.