O WiredTiger tem diferentes representações de dados no disco versus na memória e usa diferentes abordagens de compactação para índices versus dados de coleta.
A resposta sobre o que é compactado na memória é um pouco diferente, mas o resumo de alto nível é:
- os dados da coleta são compactados no cache do sistema de arquivos
- os dados da coleta são descompactados no cache interno do WiredTiger
- os índices são compactados no disco e na memória
Abordagens de compactação
Por padrão, o WiredTiger usa a compactação de blocos do Snappy para dados de coleta, mas há outras opções disponíveis, incluindo a compactação zlib ou nenhuma compactação. A compactação de bloco pode fornecer economias significativas de armazenamento, mas os dados devem ser descompactados para serem manipulados pelo servidor. Independentemente das opções de compressão, os dados ainda são gravados no disco em um formato de bloco que difere da representação na memória no cache do WiredTiger.
Índices são compactados usando compactação de prefixo de índice, o que efetivamente desduplica prefixos comuns de campos indexados. Isso pode ser especialmente efetivo para índices compostos, já que os valores dos campos principais serão repetidos com valores exclusivos para campos adicionais no índice. A compactação de prefixo também permite que as consultas operem diretamente em índices compactados.
O que é compactado na RAM?
Como no MongoDB 3.4 (e incluindo versões anteriores do MongoDB com o WiredTiger), há dois caches significativos para dados na RAM:
-
O cache interno do WiredTiger, que é controlado pela configuração
cacheSizeGB
configuração .O tamanho do cache padrão no MongoDB 3.4 é o maior de 50% da RAM, menos 1 GB ou 256 MB. Os dados de coleta no cache interno são descompactados, no entanto, os dados de índice ainda usam compactação de prefixo. Os dados no cache interno do WiredTiger são efetivamente o conjunto de trabalho atual .
-
O cache do sistema de arquivos O / S, que geralmente é o restante da RAM livre que não é usada pelo cache do WiredTiger ou por outros processos.
O cache do sistema de arquivos é idêntico à representação em disco.
Ajuste de cache
Observe que o cache WiredTiger não representa o uso total de memória do MongoDB: mongod
ainda precisará alocar memória fora do cache para outros usos, como conexões e processamento de dados (por exemplo, agregação, mapeamento / redução, memória tipo).
O cache interno do WiredTiger geralmente deve ser deixado no tamanho padrão ou potencialmente reduzido. Se seus dados compactarem bem e os dados descompactados forem muito maiores do que a RAM, você poderá ajustar mais dados na memória RAM, reduzindo o tamanho do cache do WiredTiger para liberar memória para o cache do sistema de arquivos. O manual do MongoDB tem um FAQ com mais informações: Para qual tamanho devo configurar o cache interno do WiredTiger? .
Para mais informações, recomendo rever as Novas opções de compactação no MongoDB 3.0 post de blog e Apresentação de uma introdução técnica ao WiredTiger .