ReadySet na Prática: Cache Inteligente para MySQL com Ganho Real de Performance

Introdução

Com o crescimento das aplicações modernas, o volume de consultas ao banco de dados aumenta significativamente, especialmente em cenários com alta concorrência e grande volume de leitura. Mesmo com otimizações tradicionais,  como índices bem definidos, tuning de queries e ajustes de configuração, chega um momento em que o banco de dados se torna um gargalo.

Esse cenário é comum em sistemas que escalam rapidamente, como APIs, dashboards e aplicações transacionais com forte demanda de leitura.

É nesse contexto que surge o ReadySet, uma solução que atua como uma camada inteligente de cache para bancos relacionais como o MySQL e também o PostgreSQL.

O que é o ReadySet?

O ReadySet é um mecanismo de cache em tempo real que funciona como um endpoint compatível com bancos relacionais. Ele recebe queries SQL e armazena automaticamente seus resultados em memória, acelerando respostas subsequentes.

Ele é compatível com:

  • MySQL
  • PostgreSQL

Diferente de soluções tradicionais como Redis ou Memcached, o ReadySet não exige mudanças na aplicação nem implementação manual de lógica de cache.

A própria query SQL é utilizada como base para o gerenciamento do cache.

Como o ReadySet funciona?

O funcionamento do ReadySet pode ser entendido em três pilares:

  1. Interceptação de Queries
    A aplicação se conecta ao ReadySet da mesma forma que se conectaria ao banco de dados. As queries são enviadas normalmente, sem necessidade de alteração.
  1. Cache Inteligente
    O ReadySet identifica padrões de leitura e armazena resultados em memória, permitindo respostas mais rápidas em acessos frequentes aos mesmos dados.
  1. Atualização via CDC (Change Data Capture)
    O ReadySet utiliza o conceito de Change Data Capture (CDC) para manter os dados sincronizados.

Ele monitora os mecanismos de log dos bancos suportados:

  • No MySQL: binlog
  • No PostgreSQL: WAL (Write-Ahead Log)

Capturando alterações como:

  • INSERT
  • UPDATE
  • DELETE

O cache é atualizado automaticamente, sem  necessidade de invalidação manual, mantendo a consistência dos dados.

Proposta do laboratório

Após compreender os conceitos do ReadySet, foi construído um laboratório local com o objetivo de validar seu comportamento na prática.

Neste experimento, foi utilizado o MySQL como banco de dados principal, mas a arquitetura apresentada também se aplica ao uso com PostgreSQL.

O ambiente foi composto por:

  • Um banco de dados
  • O ReadySet como camada de cache
  • Uma aplicação simples para geração de carga
  • Execução de testes e observação dos resultados

Hands-on

Antes da execução do laboratório, foi necessária a preparação do ambiente no Oracle Linux 8, com a remoção do Podman e instalação do Docker:

Após a instalação, foi criada a estrutura de diretórios utilizada no laboratório:

Em seguida, os arquivos do projeto foram organizados conforme a estrutura abaixo:

Construção do ambiente com docker-compose ja banco de dados ja preparado com um pequena amostra de dados

Apos subir o docker verificação de funcionamento e replicação entre o Mysql e o Readyset 

Meu docker compose ja nos trouxe em sua construção uma pequena amostra de dados: 

tabelas: produtos, clientes, pedidos , validando esses dados em ambos ambientes:

Um ponto interessante observado nos testes foi a diferença no tempo de resposta entre a execução direta no MySQL e via ReadySet.

Na execução direta no MySQL, a query apresentou um tempo  de aproximadamente 0.027s, enquanto a mesma consulta executada via ReadySet retornou em cerca de 0.015s.

Embora ambos os tempos sejam baixos, já que se trata de um ambiente controlado e com volume reduzido de dados, é possível notar uma redução de latência ao utilizar o ReadySet.

Esse comportamento indica que parte do processamento da query foi otimizado, especialmente nas execuções realizadas através da camada de cache.

Além disso, os resultados retornados foram idênticos em ambos os cenários, o que demonstra consistência nos dados apresentados.

Validando a sincronização de registros e caches : 

Criando os caches no Readyset e consultando

Para validar seu comportamento em uma situação mais próxima de um ambiente real, foi realizado um teste com aumento significativo de volume de dados, inserindo aproximadamente 500k registros nas tabelas.

Além disso, foi utilizada uma consulta mais complexa, envolvendo:

  • JOIN entre tabelas
  • GROUP BY
  • HAVING
  • ORDER BY
  • LIMIT

Execução da consulta sem a criação do cache:

Criação do cache para atender a consulta:

Warmup – ReadySet executa a query pela primeira vez e armazena seu resultado em cache.

Resultados obtidos com a consulta em cache:

Conclusão

A implementação do ReadySet demonstrou, de forma prática, o impacto que uma camada de cache inteligente pode gerar em aplicações que utilizam MySQL.

Durante os testes, foi possível observar claramente a diferença de comportamento entre a execução tradicional e o uso do cache.

Na execução sem cache, a consulta apresentou um tempo de aproximadamente 2.55 segundos, o que é esperado, já que o banco de dados precisa realizar todas as etapas de processamento, incluindo joins, agregações (SUM, COUNT), aplicação de filtros (HAVING) e ordenação dos resultados.

Após o aquecimento do cache (warmup), a mesma consulta passou a ser respondida em cerca de 0.015 segundos.

Essa diferença representa uma redução superior a 99% no tempo de resposta, evidenciando o ganho significativo proporcionado pelo uso do cache.

Esse comportamento reforça um ponto fundamental: o principal benefício do ReadySet não está apenas na aceleração de leitura, mas na eliminação do custo de execução de queries complexas no banco de dados.

Mesmo em um ambiente controlado, os resultados foram expressivos e indicam que, em cenários com maior volume de dados e carga de acesso, o impacto tende a ser ainda mais relevante.

ReadySet se mostra como uma solução eficiente para otimização de leitura, permitindo ganhos reais de performance sem necessidade de alterações na aplicação, atuando como uma camada complementar ao banco de dados.

Demonstração prática

 

Links uteis:

https://readyset.io/docs

https://github.com/readysettech

https://github.com/marcio28costa/readyset_handson 

 

COMPARTILHE:
Picture of Marcio

Marcio

Minha paixão por tecnologia e minhas habilidades em resolução de problemas me permitem enfrentar desafios complexos e entregar soluções de banco de dados de alta qualidade. Estou sempre ávido por aprender e me manter atualizado com as últimas tendências em administração de banco de dados.
Picture of Marcio

Marcio

Minha paixão por tecnologia e minhas habilidades em resolução de problemas me permitem enfrentar desafios complexos e entregar soluções de banco de dados de alta qualidade. Estou sempre ávido por aprender e me manter atualizado com as últimas tendências em administração de banco de dados.

PARTICIPE

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

POSTADO POR
Picture of Marcio

Marcio

Minha paixão por tecnologia e minhas habilidades em resolução de problemas me permitem enfrentar desafios complexos e entregar soluções de banco de dados de alta qualidade. Estou sempre ávido por aprender e me manter atualizado com as últimas tendências em administração de banco de dados.
PARCEIROS