Parece que a fragmentação do banco de dados é ótima se eu tiver grandes coleções. E se eu tiver muitas coleções de tamanho razoável? Digamos que para 1 coleção de 100.000.000 documentos (comentários não muito grandes), a fragmentação é eficaz. Também é eficaz para 10.000 coleções com 10.000 documentos cada?
(Acho que esta questão 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, bem como a resposta no cenário específico do MongoDB, se diferente do teórico responda.)
A maioria das pessoas tem o problema de "coleção grande única" e, portanto, o sharding é claramente útil para reduzir as dores de cabeça de balancear esses dados.
No entanto, quando você tem 10.000 coleções pequenas, sua dor de cabeça provavelmente não é "equilibrar os dados". Com tantas coleções pequenas, seu problema provavelmente é rastrear essas coleções. Dependendo do tamanho do seu documento, você pode nem quebrar o limite inferior para que a fragmentação realmente aconteça.
Para coleções realmente pequenas, você pode usar o pouco conhecido comando movePrimary para gerenciar a localização de seus dados.
Claro, a outra maneira de ver isso é por que você tem 10 mil coleções? Uma coleção não precisa de objetos homogêneos e, com 10 mil coleções, a maioria delas precisa ser gerada. É bem possível armazenar diferentes "tipos" de dados na mesma coleção, reduzir o número de coleções e incluir o tipo como parte da chave de fragmentação.
A fragmentação do MongoDB funciona dividindo uma coleção em 'pedaços' menores e distribuindo-os uniformemente em várias máquinas. O tamanho do bloco padrão, que geralmente é o mais eficiente, é de 200 MB. Portanto, a menos que uma coleção ultrapasse 200 MB, ela não será dividida em partes e, portanto, não será elegível para fragmentação, portanto, não haverá benefícios.
No caso geral, a fragmentação de dados em várias máquinas é uma maneira muito eficaz de dimensionar 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. Escalar a memória é particularmente importante para o MongoDB, onde o alto desempenho é muito sensível ao ajuste dos dados na memória.