Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/

Considerações sobre a alocação de recursos para sistemas mongot

Esta seção responde a perguntas críticas de planejamento sobre sua implantação do mongot e fornece etapas práticas para projetar sua arquitetura de pesquisa. Para obter uma visão geral abrangente, leia esta seção linearmente. Como alternativa, você pode usar esta seção como referência, pulando para as seções relevantes conforme necessário. O objetivo desta seção é ajudar a estimar com precisão os requisitos de recursos e criar uma implementação robusta.

A estrutura dos dados e a definição do índice são os principais drivers do uso do disco e dos requisitos de RAM. Use esta seção para estimar o tamanho do índice final e a memória necessária para gerenciar os índices com eficiência.

1

Use a seguinte fórmula como ponto de partida para sua estimativa de espaço em disco:

Estimated Index Size = (Number of Documents) x (Avg. Size of Indexed Text per Doc) x (Expansion Factor)

O fator de expansão é crítico e depende muito da sua estratégia de tokenização. Use estes multiplicadores como guia:

Caso de uso
Multiplicador

Tokenização padrão/de linguagem

1.5x - 3x

Tokenização de palavra-chave/simples

1.1x - 1.5x

edgeGram (Preenchimento automático)

5x - 8x

nGram (Correspondência parcial)

8x - 15x+ (Isto pode ser extremamente grande, especialmente com um valor baixo de minGram.)

Observação

Os multiplicadores do fator de expansão anteriores representam um exemplo generalizado e podem não se aplicar a todo o conteúdo baseado em texto. Certifique-se de testar com seus próprios dados para determinar o cálculo do índice para seu sistema.

2

Para pesquisa vetorial, calcule o tamanho do índice separadamente e adicione-o ao total. O tamanho dos dados vetoriais brutos é uma linha de base razoável para esse valor.

Vector Index Size = (Total Number of Vectors) x (Vector Dimensions) x 4 bytes / dimension

Observação

Esta fórmula é para vetores float32. O índice HNSW final no disco terá sobrecarga adicional.

3
Usar mapeamentos estáticos
Se a estrutura do documento for imprevisível, desative os mapeamentos dinâmicos. O mapeamento dinâmico pode levar a uma "explosão de mapeamento" em que milhares de campos não intencionais são criados, consumindo RAM excessiva e causando instabilidade. Defina explicitamente seu índice com dynamic: false. Para saber mais, consulte Mapeamentos estáticos e dinâmicos.
Limitar campos de origem armazenados
Armazene somente o conjunto mínimo de campos exigidos para seus resultados de pesquisa dentro do próprio índice mongot. A busca de campos da collection primária do MongoDB geralmente é mais eficiente e reduz o espaço em disco usado pelo índice. Para saber mais, consulte Definir campos de origem armazenados no índice de pesquisa do MongoDB.
Contabilizar recursos de alta memória
Esteja ciente de que coleções de sinônimos e embeddedDocuments profundamente aninhados criam artefatos de memória significativos. Se você utilizar fortemente esses recursos, deverá alocar mais espaço de heap Java para o processo mongot.

A taxa e o tipo de gravações (inserções, atualizações, exclusões) determinam a CPU e o IOPS de disco necessários para manter seu índice de pesquisa sincronizado com seu banco de dados.

Para provisionar taxa de transferência e manutenção de gravação:

1
Alta taxa de gravação (>1,000 operação por segundo)
Esse volume de trabalho é limitado a CPU e a E/S. Provisione servidores com alta contagem de CPU e armazenamento rápido. Monitore a utilização da CPU do processo mongot e o comprimento da fila de E/S do disco. Se essas métricas forem consistentemente altas e o atraso de replicação estiver crescendo, você precisará escalar seu hardware.
Baixa taxa de gravação ( <100 operações por segundo)
As configurações de hardware padrão geralmente são suficientes.
2
Consolide índices
Evite definir vários índices de pesquisa separados em uma única collection. Cada índice adiciona sobrecarga. Em vez disso, crie uma única e abrangente definição de índice.
Materializar visualizações complexas
Se você estiver indexando uma visualização complexa, o desempenho do change stream pode ser uma restrição. Considere a possibilidade de criar uma visualização materializada para fornecer uma fonte de dados simples e pré-agregados para mongot indexar.
3

A alteração de uma definição de índice aciona uma reconstrução completa e com uso intensivo de recursos.

Uma reconstrução cria um novo índice além do antigo antes de alternar as solicitações de query para o novo índice. Certifique-se sempre de ter pelo menos 125% do tamanho do índice atual disponível como espaço livre em disco para acomodar esse processo sem ficar sem armazenamento.

4

Para volumes de trabalho de gravação extremamente exigidos, dimensionar um único nó mongot verticalmente pode não ser suficiente.

Se você antecipar cargas de gravação sustentadas superiores a 10,000 operações por segundo, a fragmentação é a estratégia de escalabilidade mais eficaz. Você precisa de um mínimo de 1 mongot por shard. mongot indexa collections somente dentro do fragmento ao qual está conectado, o que ajuda a distribuir a carga de indexação horizontalmente.

O desempenho da query é principalmente uma função da CPU para processamento e da RAM para armazenamento em cache. A complexidade e o volume de suas queries determinam os recursos necessários para atingir suas metas de latência.

Para estimar os tamanhos de implantação necessários para o desempenho da query:

1

Para estabelecer uma linha de base da CPU, use seu alvo de Queries por Segundo (QPS). Um ponto de partida geral é 1 núcleos de CPU para cada 10 QPS.

Esta linha de base pressupõe queries simples. Para volumes de trabalho pesados com aggregations complexas, correspondência difusa ou queries regex, você só pode obter 2-5 QPS por núcleo. Por outro lado, a correspondência simples de termo pode gerar 20+ QPS por núcleo. Sempre teste o desempenho com uma mistura realista de consultas.

2

A RAM é o fator mais importante para queries rápidas.

Full Text Search
O objetivo é caber o máximo possível do índice no cache do sistema de arquivos do sistema operacional. Para um desempenho ideal, provisione RAM suficiente no nó mongot para corresponder ao tamanho total do índice no disco. Isso minimiza leituras de disco lentas.
Vector Search
Para pesquisa vetorial de baixa latência, o índice de gráfico HNSW deve existir na memória. Para calcular a RAM mínima necessária, use as etapas no procedimento de estimativa de tamanho do índice e adicione um buffer de 20-25% para a sobrecarga. Se o índice do vetor não couber na RAM, a latência da query aumentará.

Observação

Para reduzir os requisitos de RAM, considere usar a quantização vetorial. A quantização vetorial pode comprimir incorporações vetoriais, o que reduz seu espaço ocupado na memória (e, portanto, a RAM necessária para mantê-las), geralmente com impacto mínimo na recuperação ou precisão.

Voltar

Padrões de arquitetura

Nesta página