Criei um cluster com dois fragmentos. Ou assim pensei. No meu projeto, o primeiro servidor possui mongos_router shard1 (3 nós) e servidores de configuração. O segundo servidor possui apenas 2 nós de fragmento. Depois de configurar os shards, habilitei o sharding para cada banco de dados. E quando olho a saída de sh.status() vejo a saída abaixo:
...
{
database: {
_id: 'wins_emission',
primary: 'shard1rs',
partitioned: false,
version: {
uuid: UUID('aebf94cf-6069-41ba-9a91-f91a944071b1'),
timestamp: Timestamp({ t: 1711952615, i: 3000 }),
lastMod: 1
}
},
collections: {}
},
{
database: {
_id: 'wins_healthcheck',
primary: 'shard2rs',
partitioned: false,
version: {
uuid: UUID('663cb5f7-b7b3-4f40-9f52-2c3d1969fb65'),
timestamp: Timestamp({ t: 1711952305, i: 4 }),
lastMod: 1
}
},
...
Eu entendi isso porque os bancos de dados serão distribuídos entre os fragmentos. E eu esperava que os dados entre os nós não fossem iguais. Por exemplo, a tabela de notificações tem 17,7 mil documentos. E espero que esses documentos sejam compartilhados entre os nós. Como o primeiro nó do shard1 tem 4k, o nó do segundo shard1 tem 4k etc. Cada nó em cada fragmento tem a mesma quantidade de 17,7k. Posso estar sendo mal interpretado.
Tentei fragmentar no nível da coleção para a tabela de notificações. Eu criei uma chave de fragmento com hash. E então executou sh.shardCollection()
o comando. E agora meu primeiro shard tem 4,7 mil documentos entre seus próprios nós, enquanto o shard2 tem 12,9 mil em si. Agora, isso me fez pensar nessas questões.
- Preciso fragmentar todas as coleções para usar um cluster fragmentado?
- Devo fragmentar todas as coleções ou apenas aquelas que contêm grandes dados, como logs.
- Por que todos os nós em um fragmento têm a mesma quantidade de documentos? Eles não deveriam distribuir os dados por si só?
Qualquer ajuda é apreciada.
Edição 1: Saída do getShardDistribution de uma coleção específica;
{
data: '382.25MiB',
docs: 7006,
chunks: 3,
'estimated data per chunk': '127.41MiB',
'estimated docs per chunk': 2335
}
---
Shard shard2rs at shard2rs/172.16.114.129:27020,172.16.114.129:27021,172.16.114.129:27022
{
data: '579.78MiB',
docs: 10578,
chunks: 1,
'estimated data per chunk': '579.78MiB',
'estimated docs per chunk': 10578
}
---
Totals
{
data: '962.03MiB',
docs: 17584,
chunks: 4,
'Shard shard1rs': [
'39.73 % data',
'39.84 % docs in cluster',
'55KiB avg obj size on shard'
],
'Shard shard2rs': [
'60.26 % data',
'60.15 % docs in cluster',
'56KiB avg obj size on shard'
]
}
MongoDB distribui dados em pedaços . O tamanho padrão do bloco é 128 MiBytes.
Assim, o tamanho dos dados coletados deve ser superior a 128 MiBytes, caso contrário não será distribuído.
Em relação às suas perguntas:
Na versão anterior do MongoDB, os dados eram fragmentados para obter um número distribuído uniformemente de documentos/pedaços. Na versão mais recente do MongoDB, os dados são fragmentados para obter uma quantidade de dados distribuída uniformemente.
Veja este exemplo em meu cluster fragmentado: