O MongoDB 3.0 com WiredTiger introduz um novo recurso chamado 'Compressão de prefixo de índice' que reduz bastante a memória consumida pelos índices. Menos memória usada pelos índices significa mais memória para armazenamento de documentos ou outros índices, o que implica em melhor desempenho.
Para melhor desempenho no MongoDB, é ótimo manter seus índices na memória. Uma falta de página em um índice é um golpe duplo – uma falha de página para trazer a página de índice real na memória e outra falha de página posterior para trazer a página de dados para a memória.
Tecnologia
A compactação de prefixo de índice não usa compactação de bloco (como zlib, snappy etc), mas é uma técnica diferente para armazenar os índices na memória. Reduz o uso de memória armazenando prefixos idênticos apenas uma vez. A “compactação de prefixo de chave” é uma maneira específica de domínio de compactar dados e se refere ao formato de armazenamento de chave no WiredTiger. Para obter mais detalhes, você pode consultar a documentação do WiredTiger de formatos de arquivo.
Testes de desempenho
Para nossos testes de desempenho, usamos uma estrutura de documentos conforme detalhado abaixo:
{ employeeID: <long>, firstName: <string>, lastName: <string>, income: <long>, supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;} }
Adicionamos os seguintes índices nesta configuração:
Index 1: db.ensureIndex({'employeeID':1}); Index 2: db.ensureIndex({'lastName':1, 'firstName':1}); Index 3: db.ensureIndex({'income':1}); Index 4: db.ensureIndex({'supervisor.lastName':1, 'supervisor.firstName':1})
Resultados
Em nosso teste, inserimos dados idênticos (cerca de 10 milhões de registros) em dois clusters – um conjunto de réplicas 2.6.xe outro MongoDB 3.0 com WiredTiger. Em seguida, adicionamos os índices acima em ambas as configurações de cluster. Os resultados são bastante surpreendentes – em alguns casos, há uma diferença de ordem de magnitude no tamanho do índice!
Nome do índice | Tamanho do índice MMAP (MB) | Tamanho do índice WT (MB) | % Redução no tamanho |
{employeeID:1} | 230,7 | 94 | 59% |
{lastName:1, firstName:1} | 1530 | 36 | 97% |
{renda:1} | 230 | 94 | 59% |
{'supervisor.lastName':1, 'supervisor.firstName':1} | 1530 | 35 | 97% |
Toda a memória salva nos índices é memória que pode ser usada para armazenar dados em cache, outros índices etc. Sua milhagem pode variar – certifique-se de testar sua estrutura de índice específica. A redução dos tamanhos dos índices é uma melhoria muito pouco vendida no Mongo 3.0 e pode fazer uma enorme diferença no seu desempenho!