O sharding é eficaz para coleções pequenas?

11

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.)

João Pinto Jerónimo
fonte

Respostas:

5

Também é eficaz para 10.000 coleções com 10.000 documentos cada?

A maioria das pessoas tem o problema da "grande coleção única" e, portanto, o sharding é claramente útil para reduzir dores de cabeça ao equilibrar esses dados.

No entanto, quando você possui 10.000 pequenas coleções, sua dor de cabeça provavelmente não está "equilibrando os dados". Com tantas coleções pequenas, é provável que seu problema seja rastrear essas coleções. Dependendo do tamanho do documento, você pode nem quebrar o limite inferior para que o sharding realmente ocorra.

Para coleções realmente pequenas, você pode usar o comando movePrimary pouco conhecido para gerenciar a localização dos seus dados.

Claro, a outra maneira de ver isso é por que você tem coleções de 10 mil? 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 do shard.

Gates VP
fonte
Obrigado, eu estava exatamente tentando saber se o melhor que podia fazer era me livrar dessas toneladas de coleções e fazer uma grande. Eu já tinha várias coleções antes porque ouvi uma crença comum: "Coleções enormes são ruins para você porque os índices não se encaixam na RAM e será muito lento para consultá-las e atualizá-las". Mas acho que o sharding foi criado para resolver esse problema ... Obrigado !!
João Pinto Jerónimo
Honestamente, acho que você também pode "trapacear" nos índices. Se você tem duas coleções fooe barcom a mesma estrutura de dados, você pode fundi-los na bazcoleta 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".
Gates VP
4

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.

Chris Fulstow
fonte
O tamanho do pedaço padrão da FYI é de 64 MB a partir de 1,8.
Gates VP