Dividir grupos em um cluster fragmentado
Por padrão, o MongoDB pode dividir um pedaço somente ao migrar dados pertencentes a ele. No entanto, é possível dividir chunks manualmente se tiver uma grande quantidade de dados no cluster e poucos chunks, como é o caso depois de distribuir um cluster usando dados existentes.
Para dividir chunks manualmente, use o comando split
com os campos middle
ou find
. mongosh
fornece os métodos auxiliares sh.splitFind()
e sh.splitAt()
.
splitFind()
divide a parte que contém o primeiro documento retornado que corresponde a essa query em duas partes do mesmo tamanho. Você deve especificar o namespace completo (ou seja, "<database>.<collection>
") da coleção fragmentada para splitFind()
. A query em splitFind()
não precisa usar a chave fragmentada, embora quase sempre faça sentido fazer isso.
Exemplo
O seguinte comando divide o chunk que contém o valor de 63109
para o campo zipcode
na collection people
do banco de dados records
:
sh.splitFind( "records.people", { "zipcode": "63109" } )
Use splitAt()
para dividir um chunk em dois, usando o documento consultado como o limite inferior no novo chunk:
Exemplo
O seguinte comando divide o bloco que contém o valor de 63109
para o campo zipcode
na coleção people
do banco de dados records
.
sh.splitAt( "records.people", { "zipcode": "63109" } )
Observação
splitAt()
não necessariamente divide o pedaço em dois pedaços de tamanhos iguais. A divisão ocorre no local do documento que corresponde à query, independentemente de onde esse documento esteja no bloco.