MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Compressão de prefixo de índice no MongoDB 3.0 WiredTiger



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!