Muitos sites e aplicativos armazenam seus dados em um banco de dados. Ler e gravar dados em um banco de dados pode afetar significativamente a latência de um aplicativo. É importante reduzir a latência o máximo possível, já que os usuários esperam aplicativos rápidos e responsivos, e sites mais rápidos têm melhor desempenho para otimização de mecanismos de pesquisa (SEO).

Escrever em um banco de dados adiciona latência porque, geralmente, os bancos de dados gravam dados em um disco em vez de mantê-los na memória. É comum que bancos de dados apliquem compressão e criptografia, adicionando latência na leitura e escrita de dados. Para superar esses desafios, você pode usar um banco de dados em memória para armazenamento rápido de dados e recuperação direta da RAM, em vez de um disco.

Este artigo explora como os bancos de dados em memória funcionam, algumas opções populares e algumas das compensações em comparação com um banco de dados padrão.

O que são banco de dados In-Memory?

Os bancos de dados In-memory usam RAM ao invés de unidades de disco rígido (HDD) ou unidades de estado sólido (SSD) para armazenar dados, reduzindo drasticamente a latência da leitura e gravação de dados. A redução da latência é devida a duas razões principais: primeiro, acessar dados da memória é mais rápido do que de um disco, e segundo, as estruturas de dados usadas para armazenar dados na memória são mais simples do que o armazenamento em disco. Portanto, a sobrecarga do CPU é menor quando se lê e grava dados.

Esta baixa latência tem um custo porque os dados armazenados na memória serão perdidos se um servidor falhar. Ao contrário do armazenamento em disco, a memória não retém seu conteúdo após a perda de energia, portanto há uma compensação de resiliência e velocidade.

Bancos de dados in-memory são uma excelente opção para aplicativos que requerem dados rápidos ou em tempo real, tais como quadros de líderes ou análises em tempo real. Eles também são úteis para o cache de dados que você normalmente armazena em um banco de dados baseado em disco para reduzir o número de leituras e gravações no disco e minimizar a latência.

A redução da latência é particularmente importante para os sites. É provável que os usuários que acham o site responsivo, continuem a usá-lo. Além disso, o Google e outros mecanismos de pesquisa também usam a velocidade de carregamento do site como um fator de SEO. Sites rápidos se classificam melhor nos resultados de pesquisa, aumentando as chances dos usuários visitarem o seu site.

Explicação dos bancos de dados In-Memory

Devido ao fato de que os bancos de dados em memória armazenam dados na RAM, eles experimentam uma latência muito menor do que os discos rígidos, que usam partes mecânicas e móveis para acessar a localização correta do disco. Em seguida, o disco rígido precisa ler os dados e transferi-los através da interface entre o dispositivo de armazenamento e o computador. Apesar dos avanços dos SSDs, a RAM ainda é até 30 vezes mais rápida devido aos seus chips de memória e interface de CPU mais eficientes. Testes de benchmarking mostraram que o uso do MySQL em conjunto com o Redis – um popular banco de dados em memória – como camada de cache, pode reduzir a latência das consultas em até 25% em comparação com o uso do MySQL como banco de dados autônomo.

A graph representing the number of requests with only MySQL and with both MySQL Redis.
Benchmarks apenas com MySQL e com MySQL e Redis. (Fonte da imagem: DZone)

Existe uma segunda razão pela qual os bancos de dados in-memory são rápidos. Você pode otimizar as estruturas de dados usadas pelo banco de dados in-memory para uma recuperação mais rápida. Por exemplo, bancos de dados relacionais geralmente usam árvores B para índices, permitindo pesquisas rápidas enquanto suportam a leitura e gravação de grandes blocos de dados em disco. Bancos de dados in-memory não precisam gravar blocos de dados em disco e podem escolher estruturas de dados mais performantes, reduzindo ainda mais a latência. Bancos de dados in-memory frequentemente armazenam e usam os dados como estão, sem qualquer transformação ou análise na camada do banco de dados. Isso também aumenta a redução na latência, pois acelera o tempo de leitura e escrita.

Os banco de dados in-memory se tornaram mais populares devido a melhorias tecnológicas. Primeiro, o preço por gigabyte (GB) de RAM diminuiu significativamente nos últimos 20 anos, o que tornou o uso de memória para armazenamento de dados mais acessível. Melhorias nas soluções do banco de dados in-memory e serviços gerenciados em nuvem também ajudaram a aliviar algumas de suas principais desvantagens.

Além disso, bancos de dados in-memory como Redis podem agora capturar dados da memória para o disco, permitindo a restauração de dados se um servidor falhar. Os serviços de nuvem fornecem geo-replicação, o que significa que os aplicativos podem permanecer on-line, no caso de um problema. Essa redução de custos e melhoria na confiabilidade tornaram os banco de dados in-memory opções viáveis para aplicativos e sites modernos.

Vantagens e desvantagens dos bancos de dados in-memory

As principais vantagens dos bancos de dados in-memory são:

  • Eles melhoram o desempenho.
  • São mais simples de dimensionar devido à forma como armazenam dados.
  • Muitas vezes, melhoram a confiabilidade de um aplicativo.

Bancos de dados em memória armazenam dados como não estruturados ou semi-estruturados ao invés de armazená-los em modelos relacionais complexos. Isso simplifica a escalabilidade do banco de dados, já que não é necessário realizar operações de junção de dados que estejam em vários nodes, diminuindo a sobrecarga de transferência de dados na rede.

Melhorar a confiabilidade de um aplicativo pode parecer contraditório devido à volatilidade dos dados armazenados em RAM. Entretanto, quando usado como uma camada de cache, os bancos de dados in-memory reduzem a carga sobre o banco de dados principal durante os picos de solicitação. Uma camada de cache também pode ajudar a reduzir custos porque muitas vezes é mais caro escalar um banco de dados tradicional do que um banco de dados in-memory para acelerar solicitações frequentes e então usar o banco de dados central para armazenamento a longo prazo.

As principais desvantagens dos bancos de dados in-memory são:

  • Aumento no custo se usado como único banco de dados
  • Tamanho de armazenamento limitado
  • Menos recursos de segurança

Bancos de dados in-memory geralmente não usam recursos de segurança como criptografia, já que tudo deve estar na memória — incluindo chaves de criptografia. Estas funcionalidades tornam a criptografia de dados ineficaz porque qualquer entidade maliciosa com acesso à memória também pode, em teoria, acessar a chave de criptografia.

Bancos de dados in-memory podem reduzir custos quando usados com bancos de dados tradicionais. No entanto, eles podem ser mais caros quando utilizados como o único banco de dados, especialmente se for necessário armazenar grandes quantidades de dados, devido ao preço mais elevado da memória em relação ao armazenamento em disco. Esse custo também limita a quantidade de dados que se pode armazenar, já que o armazenamento de grandes conjuntos de dados em memória se torna caro e muitas vezes requer múltiplos servidores.

Por que nem todos os bancos de dados estão em in-memory?

A principal desvantagem que impede que eles sejam amplamente utilizados é o custo. Embora os preços da RAM tenham caído significativamente, eles ainda são muito mais altos por GB do que HDDs e SSDs. Este custo torna os bancos de dados in-memory muito caros para aplicativos mais extensos com enormes conjuntos de dados.

Se o preço da RAM continuar a cair, pode chegar um momento em que bancos de dados in-memory sejam o padrão, e bancos de dados baseados em disco sejam usados apenas em circunstâncias específicas.

Casos de uso para bancos de dados in-memory

Um dos usos mais comuns para bancos de dados in-memory é o cache. Você pode usar o banco de dados in-memory como uma camada de cache em conjunto com um banco de dados tradicional. O banco de dados in-memory armazena dados frequentemente acessados, evitando pesquisas repetidas e caras no banco de dados baseado em disco e fornecendo uma experiência de usuário mais rápida.

Bancos de dados in-memory também se tornaram populares por sites de eCommerce, fóruns e blogs de alto tráfego com seções de comentários. Isso porque estes são sites altamente dinâmicos. Os sites de eCommerce querem personalizar a experiência do usuário e mostrar a disponibilidade do produto em tempo real. Os blogs e fóruns podem ter centenas ou milhares de usuários postando e comentando simultaneamente. Isso significa que um site precisará lidar com uma alta taxa de redação e ser capaz de servir os últimos conteúdos e comentários de volta aos usuários rapidamente. Bancos de dados in-memory reduzem a latência no armazenamento do conteúdo gerado pelo usuário e fornecem uma experiência atualizada e personalizada.

Bancos de dados in-memory também são ótimos candidatos para as tabelas de liderança de jogos. Eles podem atualizar e recuperar dados em tempo real e classificar os dados eficientemente para fornecer uma visão atual do quadro de líderes à medida que o jogo avança.

Você também pode usá-los para análises em tempo real. Eles permitem que você transmita dados para o banco de dados e execute consultas na versão mais atualizada dos dados para painéis de controle em tempo real, análise de risco e modelos de aprendizado de máquina (Machine Learning).

Exemplos de bancos de dados in-memory

Existem muitas opções ao escolher um banco de dados in-memory. Algumas das mais populares são Redis, Memgraph, e Hazelcast. Redis é o mais usado e está disponível como um serviço gerenciado na maioria das plataformas de nuvem. Memgraph fornece cálculos gráficos de streaming de dados, tudo in-memory, e o Hazelcast oferece funcionalidade similar ao Redis, mas com diferentes padrões de cache.

Redis é normalmente uma camada de cache entre sites e aplicativos para melhorar o desempenho, evitando leituras caras em bancos de dados. Este aumento de desempenho também é possível para sites WordPress com a ajuda do complemento Redis da Kinsta. Com este complemento, Kinsta também fornece a ferramenta Kinsta APM para resolver qualquer problema de desempenho com as consultas Redis.

Sites rodando na Kinsta usam cache por padrão. Entretanto, sites com solicitações frequentes de banco de dados ainda se beneficiarão muito com o Redis. A latência do banco de dados é um dos fatores mais significativos que atrasam um site, mas Redis ajuda a reduzir esse carregamento e permite que o site seja escalado rapidamente.

Resumo

A latência do banco de dados pode afetar significativamente a latência geral de um site ou aplicativo. Ler e escrever em discos rígidos aumenta a latência. Bancos de dados in-memory reduzem a latência do banco de dados porque armazenam dados na RAM. Mesmo ao usar SSDs, a RAM ainda é mais rápida porque usa chips de memória mais rápidos e uma interface mais rápida para a CPU. Além disso, você pode otimizar as estruturas de dados usadas pelos bancos de dados in-memory para uma recuperação mais rápida.

Bancos de dados in-memory podem acelerar sites e aplicativos quando usados como uma camada de cache entre o site e um banco de dados tradicional. Isso porque a memória é mais rápida de acessar do que o disco, e esta redução de sobrecarga resulta em tempos mais rápidos de carregamento do site e pode contribuir para melhorar o SEO.

Redis é uma das mais populares opções de banco de dados in-memory, e você pode facilmente adicioná-la aos sites WordPress usando o complemento Kinsta. Experimente o complemento Redis  para o seu site hospedado na Kinsta.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.