DEV Community

Camila Figueira
Camila Figueira

Posted on

11 6 6 7 8

DynamoDB: Query x Scan! Para de torrar dinheiro usando Scan em produção

Como Economizei 50 mil dólares com DynamoDB!

Eu já consegui economizar 50 mil dólares, só mudando o tipo de leitura no DynamoDB. Mas antes de explicar como eu fiz isso, vamos aos conceitos!

Conteúdo:

O que é um DynamoDB?

O DynamoDB é um banco de dados NoSQL (chave-valor) da AWS. Quando você precisa buscar informações nele, existem duas maneiras principais de fazer isso: Query e Scan.

Image description

Imagine que sua empresa está usando o DynamoDB para armazenar informações de eventos de monitoramento dos servidores. Cada evento contém um ID de servidor, um timestamp e mensagens de log.

Query: Procurando um Problema em um Servidor Específico

O que é?
O Query funciona como uma busca direcionada. Você já sabe qual servidor e qual período precisa analisar, então faz uma busca direta por esses critérios.

Características:

  • Rápido e eficiente para buscas específicas.
  • Precisa de um ID de servidor (chave primária) e pode filtrar por timestamp (chave de classificação).

Exemplo de Query:
Imagine que você precisa verificar erros ocorridos no servidor ID_123 na última hora. Você faz a seguinte consulta:


Servidor: ID_123
Horário: Entre 10:00 e 11:00
Enter fullscreen mode Exit fullscreen mode

O DynamoDB retorna apenas os eventos para o servidor específico no intervalo de tempo definido. Você lê apenas as linhas que interessam.

Scan: Procurando Problemas em Todos os Servidores

O que é?
O Scan é como uma varredura completa de todos os eventos. Se você quer procurar problemas gerais ou eventos de todos os servidores, precisa varrer a tabela inteira.

Características:

  • Lento e consome mais recursos, pois lê toda a tabela.
  • Ideal para buscas gerais, onde você não tem um ID específico.

Exemplo de Scan:
Agora, imagine que você precisa buscar erros de alta gravidade em todos os servidores ocorridos nas últimas 24 horas. Como não tem um ID de servidor específico, é necessário fazer um Scan com filtro:

Filtro: Gravidade do erro >= "Alto" e Horário >= "10:00 de ontem"
Enter fullscreen mode Exit fullscreen mode

O DynamoDB varre todos os eventos de um em um de todos os servidores para aplicar o filtro e trazer os resultados.

Tipos de Leitura no DynamoDB

O DynamoDB cobra com base em unidades de leitura (RCU) e unidades de escrita (WCU) que você usa. Para entender os custos, é preciso conhecer:

RCU (Read Capacity Unit): Medida de capacidade de leitura. 1 RCU = 1 leitura eventual de até 4 KB por segundo.

  1. Leitura Consistente:
    1 unidade de leitura é suficiente para ler até 4 KB de dados com total precisão.
    Sempre retorna dados mais recentes, bom para aplicações que não podem tolerar inconsistência.

  2. Leitura Eventual:
    1 unidade de leitura pode cobrir até 8 KB de dados, mas com uma chance de a informação estar ligeiramente desatualizada, o que consome menos RCU.

Custo de Leitura no DynamoDB

Agora a parte legal! 🎉

Obs: Os valores e informações a seguir são fictícios! 🚨

Observando o cenário da imagem abaixo:

Image description

Cenário Atual: Scan Completo

  • Quantidade de Itens na Tabela: 200.547 itens armazenados.
  • Tamanho da Tabela: 254,1 MB (convertido para 254.100 KB).
  • RCU (Unidade de Capacidade de Leitura): Cada unidade de leitura consegue processar 4 KB de dados.
  • ReadRequestUnits (Solicitações de Leitura): 64.483.473.398,00, que representa a quantidade de unidades de leitura necessárias. OBS: A cada 1 milhão de RRU's é consumida 1 RCU.

Resultado:
O custo total de leitura de toda a tabela foi de $15.650,87 no mês!

Mudança para Query: Cenário Otimizado

Antes, toda vez que a aplicação precisava consultar algo, ela consultava 100% da tabela usando Scan, percorrendo todos os itens até encontrar o que precisava.

Quando mudamos para Query, o cenário mudou. Agora, veja na tabela abaixo o impacto:

Image description

Se a consulta for feita em 10% da tabela, já há uma economia de $14.085,78.
Agora, imagine cenários em que as consultas são feitas em 1% da tabela ou até menos! É babado!

Resumo:

Query é como pedir uma lista específica de itens. Você paga apenas pelos dados que realmente lê.

Scan é como vasculhar uma caixa inteira para encontrar itens específicos. Você paga por todo o conteúdo da caixa, mesmo que precise de apenas algumas coisas.

Então, foi assim que consegui economizar 50 mil dólares mudando apenas a estratégia de leitura no DynamoDB! 😎

E aí, o que achou?

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (6)

Collapse
 
guidev115 profile image
Guilherme Fabrício

Artigo muito bom cami, o lance de custo de leitura me deixou bastante intrigado. Vlw pelo artigo 👍💜

Collapse
 
adrianemuller profile image
Adriane Müller

Muito bom Camila, parabéns!!

Collapse
 
danielhe4rt profile image
Daniel Reis

Dynamo sempre vai ser custoso pelo modelo deles independente de otimização…

Ótimo artigo, prima 👏

Collapse
 
clintonrocha98 profile image
Clinton Rocha

Ótimo artigo :D 💜

Collapse
 
brunociccarino profile image
Bruno Ciccarino λ

A complexidade da query é O(log n) e do scan é O(n), muito bom o artigo!

Collapse
 
carloseduardodb profile image
Carlos Eduardo Dias Batista

Ótimo artigo!

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay