Parece que o sharding do banco de dados é ótimo se eu tiver coleções enormes. E se eu tiver muitas coleções de tamanho razoável? Digamos que para uma coleção de 100.000.000 de documentos (comentários não muito grandes), a fragmentação seja eficaz. Também é eficaz para 10.000 coleções com 10.000 documentos cada?
(Acho que essa pergunta ainda é válida para bancos de dados orientados a tabelas, se você substituir coleções por tabelas e documentos por linhas. Se possível, gostaria de saber a resposta teórica e a resposta no cenário específico do MongoDB, se diferente da teórica responda.)
foo
ebar
com a mesma estrutura de dados, você pode fundi-los nabaz
coleta e substituir o_ids
(em código):{ _id: "foo123" }, { _id: "bar123" }
. Você tem um índice maior, mas você tem apenas um índice que inclui o tipo. Não é um requisito, apenas "alimento para o pensamento".O shard do MongoDB funciona dividindo uma coleção em 'pedaços' menores e distribuindo-os uniformemente em várias máquinas. O tamanho padrão do bloco, que geralmente é o mais eficiente, é de 200 MB. Portanto, a menos que uma coleção cresça muito mais que 200 MB, ela não será dividida em partes e, portanto, não será elegível para sharding, portanto, não haverá benefícios.
Em geral, o compartilhamento de dados em várias máquinas é uma maneira muito eficaz de escalar leituras, gravações e consultas. Você obtém os benefícios de várias CPUs, discos rígidos e armazenamento de memória, trabalhando em paralelo para ler, gravar e processar dados. A expansão da memória é particularmente importante para o MongoDB, onde o alto desempenho é muito sensível ao ajuste de dados na memória.
fonte