MongoDB – Estratégias de índices para escalabilidade

MongoDB

MongoDB

Como consultor, tenho atendido diversas empresas que estão utilizando MongoDB. Um problema bastante comum é o crescimento exponencial da base que causa certa lentidão na leitura e gravação dos dados que estão no MongoDB.

Em quase todos os casos, essa lentidão acontece por erros básicos na implementação do MongoDB, seja no schema design ou na criação de índices. Para solucionar, muita gente costuma aumentar a capacidade dos servidores (memória e processamento), o que pode até causar uma melhora momentânea, mas o problema poderá acontecer novamente a medida que a base continua crescendo.

Uma implementação eficiente de MongoDB engloba os seguintes pontos:

  1. Schema Design — É necessário conhecer bem que tipo de informação está sendo gravada no banco, assim como o comportamento da aplicação ao ler e gravar essas dados. A otimização precisa acontecer tanto na leitura quanto na escrita, a aplicação precisa ler e escrever o maior número de informações com o menor número de operações possível. Para chegar a esse número mágico, um bom schema design é indispensável.
  2. Índices — Já vi muitos casos onde índices são criados para tudo. Isso não vai aumentar a performance, — pelo contrário — vai apenas tornar o acesso aos dados mais lento. A criação de índices precisa caminhar em paralelo com schema design e novamente, entender bem como a aplicação grava e extrai informações do banco. Os índices precisam caber na memória RAM, isso vai aumentar muito a performance do banco e é o grande pulo do gato.
  3. Otimização do servidor — A configuração da infra também ajuda muito, desde o básico, como usar sempre servidores 64bits, discos SSD de preferência, placas de rede gigabit, até itens mais avançados, como tuning no kernel, limits do servidor, etc. É sempre bom seguir o Production Notes como checklist em implementações com MongoDB.

Já participei de vários casos onde ao fazer a arquitetura de forma adequada (seguindo os pontos acima e atá realizando alterações na aplicação), foi possível reduzir custos de infra (colocando servidores menores) e fazendo o MongoDB atender muito mais requisições sem ficar sobrecarregado.

É errado utilizar a mesma cartilha de otimização para bancos SQL, já que o NoSQL possui uma natureza bem diferente.

Para concluir esse post, indico o webinar do Dmitry Baev, arquiteto de soluções da MongoDB, que fala da criação adequada de índices com foco em escalabilidade. Basta clicar no botão abaixo para assistir e ver os slides:

Indexing Strategies to Help You Scale{.small-button.smallsilver}


Veja também