Estou testando o MongoDB Sharding com uma Sharded Collection e um forloop para inserir cerca de 1 milhão de documentos para ver como funciona a divisão e a movimentação.
Estou surpreso que depois de alguns documentos o MongoDB comece a dividir pedaços (bem antes de 64 MB),
No final das inserções de 1M (e algumas) eu tenho essas estatísticas:
mongos> db.users.getShardDistribution()
Shard rs0 at rs0/mongod00.local.net:2000,mongod01.local.net:2001,mongod02.local.net:2002
data : 84.76MiB docs : 1010010 chunks : 9
estimated data per chunk : 9.41MiB
estimated docs per chunk : 112223
Totals
data : 84.76MiB docs : 1010010 chunks : 9
Shard rs0 contains 100% data, 100% docs in cluster, avg obj size on shard : 88B
Por que o MongoDB criou 9 blocos de uma coleção que contém 85 MB?
Eu não mudei o parâmetro padrão do tamanho do bloco:
mongos> db.settings.findOne()
{ "_id" : "chunksize", "value" : 64 }
Obrigado,
máx.
Os
mongos
processos controlam quando ocorre a divisão automática (você também pode pré-dividir e dividir manualmente ). A heurística que eles usam é um pouco mais complicada do que estou prestes a descrever, mas você pode usá-la como um guia aproximado:Portanto, se você inseriu dados suficientes para encontrar pontos de divisão válidos, verá a divisão antes da marca de 32 MB (o número de documentos é um motivo válido para dividir, nem tudo está relacionado ao tamanho).
Se você não deseja que isso aconteça, você pode iniciar o
mongos
que você usará para gravar dados com a--noAutoSplit
opção ou você pode executar com um servidor de configuração inativo (o que significa que todas as divisões falharão quando tentadas porque os metadados são somente leitura) . Geralmente, isso não seria recomendado para produção, mas às vezes pode ser necessário para fins de teste.