Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon DynamoDB: Principais conceitos para usar...

Amazon DynamoDB: Principais conceitos para usar profissionalmente

Bate papo com o pessoal do AWS User Group Goiânia sobre os conceitos básicos do Amazon DynamoDB.

Marcelo Palladino

August 25, 2020
Tweet

More Decks by Marcelo Palladino

Other Decks in Technology

Transcript

  1. D e v o l t a a o b

    á s i c o Os blocos de construção mais básicos do DynamoDB
  2. Partições e partition key + sort key Livro: O Senhor

    dos anéis Nome: Frodo Bolseiro fx(Livro): Partição 1 Partição 1 Partição 2
  3. É t u d o u m a q u

    e s t ã o d e c r i t é r i o s c l a r o s Escolhendo entre SQL e noSQL
  4. SQL Estrutura • Tabelas • Restrições • Relacionamentos (JOINS) Armazenamento

    • Centralizado Escala • Vertical • Horizontal Acesso • SQL • Conexão com o banco de dados
  5. noSQL Estrutura • Tabelas • Documentos (JSON) • Grafos Armazenamento

    • Hashing input Escala • Mais partições Acesso • API REST/HTTP
  6. Quando utilizar um ou outro? SQL noSQL • Quando os

    padrões de acesso não são conhecidos • Quando há necessidade de consultas flexíveis • Quando há a necessidade de garantir as restrições acima de qualquer outra questão • Quando utilizar SQL é uma vantagem • Quando os padrões de acesso são conhecidos • Quando as chaves primárias são conhecidas • Quando o dado é naturalmente “não relacional” • Quando alto desempenho e baixa latência são requisitos do negócio
  7. E s q u e ç a a m o

    d e l a g e m r e l a c i o n a l Modelagem de dados no DynamoDB
  8. Passos para modelagem de dados 1. Entenda os padrões de

    acesso mais comuns e importantes do seu sistema 2. Faça a modelagem 3. Observe 4. Volte ao passo 1 até que fique bom
  9. Entenda os padrões de acesso mais comuns e importantes do

    seu sistema Padrões de acesso (locação de imóveis) Leitura • Procurar imóveis por localização • Recuperar todos os detalhes do imóvel pela identificação • Recuperar todos os alugueis de um imóvel (do ponto de vista do dono do imóvel) • Recuperar todos os imóveis alugados (do ponto de vista do usuário) • Recuperar todos os imóveis (do ponto de vista do dono do imóvel) • .... Escrita • Adicionar um novo imóvel • Alugar um imóvel • ...
  10. Modelando os dados MeuAirbnb PK SK Atributos id_imovel id_dono titulo

    descricao pais cidade • Adicionar um novo imóvel • Recuperar todos os detalhes do imóvel pela identificação
  11. Modelando os dados MeuAirbnb Tipo PK SK Atributos TABELA id_imovel

    “imovel” id_dono titulo descricao pais cidade TABELA id_imovel data_inicio data_fim id_usuario • Adicionar um novo imóvel • Recuperar todos os detalhes do imóvel pela identificação • Alugar um imóvel • Recuperar todos os alugueis de um imóvel (do ponto de vista do dono do imóvel)
  12. Modelando os dados MeuAirbnb Tipo PK SK Atributos TABELA id_imovel

    “imovel” id_dono titulo descricao pais cidade TABELA id_imovel data_inicio data_fim id_usuario ? ? id_imovel id_dono titulo descricao • Adicionar um novo imóvel • Recuperar todos os detalhes do imóvel pela identificação • Alugar um imóvel • Recuperar todos os alugueis de um imóvel (do ponto de vista do dono do imóvel) • Procurar imóveis por localização
  13. D a n d o a l g u m

    a f l e x i b i l i d a d e a o s m o d e l o s DynamoDB GSI (Global Secondary Index)
  14. Imóveis por localização: Solução inviável • where: cidade == “São

    Paulo” scan + FilterExpression(cidade == “São Paulo”)
  15. Imóveis por localização: Solução utilizando índice • Índice GSI por

    localização Permite recuperar todos os imóveis de uma cidade em uma única requisição
  16. Modelando os dados MeuAirbnb Tipo PK SK Atributos TABELA id_imovel

    “imovel” id_dono titulo descricao pais cidade pais#cida de TABELA id_imovel data_inicio data_fim id_usuário GSI1 pais#cidade id_imovel id_dono titulo descricao • Adicionar um novo imóvel • Recuperar todos os detalhes do imóvel pela identificação • Alugar um imóvel • Recuperar todos os alugueis de um imóvel (do ponto de vista do dono do imóvel) • Procurar imóveis por localização
  17. Modelando os dados MeuAirbnb Tipo PK SK Atributos TABELA id_imovel

    “imovel” id_dono titulo descricao pais cidade pais#cida de TABELA id_imovel data_inicio data_fim id_usuário GSI1 pais#cidade id_imovel id_dono titulo descricao GSI2 id_usuario data_inicio data_fim id_imovel • Adicionar um novo imóvel • Recuperar todos os detalhes do imóvel pela identificação • Alugar um imóvel • Recuperar todos os alugueis de um imóvel (do ponto de vista do dono do imóvel) • Procurar imóveis por localização • Recuperar todos os imóveis alugados (do ponto de vista do usuário)
  18. Modelando os dados MeuAirbnb Tipo PK SK Atributos TABELA id_imovel

    “imovel” id_dono titulo descricao pais cidade pais#cid ade TABELA id_imovel data_inicio data_fim id_usuário GSI1 pais#cidade id_imovel id_dono titulo descricao GSI2 id_usuario data_inicio data_fim id_imovel GSI3 id_dono id_imovel titulo descricao pais cidade • Adicionar um novo imóvel • Recuperar todos os detalhes do imóvel pela identificação • Alugar um imóvel • Recuperar todos os alugueis de um imóvel (do ponto de vista do dono do imóvel) • Procurar imóveis por localização • Recuperar todos os imóveis alugados (do ponto de vista do usuário) • Recuperar todos os imóveis (do ponto de vista do dono do imóvel) https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html#bp-general-nosql-design-concepts
  19. E n t e n d e n d o

    a s u n i d a d e s d e l e i t u r a e e s c r i t a Provisionando o DynamoDB
  20. Read capacity unit • read capacity unit = uma leitura

    consistente por segundo ou duas leituras eventuais por segundo, para um item até 4 KB • Para efeito de cálculo, o tamanho do item deve ser arredondado para o próximo múltiplo de 4 KB (uma leitura de 2.5 KB vai consumir 4KB)
  21. Read capacity unit Exemplo: • Tamanho do item: 10KB •

    Número de itens lidos por segundo: 5 • RCU para leitura consistente: 10=>12=>12/4=3=>3*5=>15 • RCU para leitura eventualmente consistente: 10=>12=>12/4=3=>3*5=>15=>15/2=7.5=>8
  22. Write capacity unit • write capacity unit = uma escrita

    por segundo para um item até 1 KB • Para efeito de cálculo, o tamanho do item deve ser arredondado para o próximo múltiplo de 1 KB (uma leitura de 429 KB vai consumir 1KB)
  23. Write capacity unit Exemplo: • Tamanho do item: 2.5KB •

    Número de itens escritos por segundo: 5 • WCU: 2.5=>3=>3*5=>15 400=>1=>1*5=>5
  24. L e i t u r a s e e

    s c r i t a s e m u m a t a x a m a i o r d o q u e a p r e v i s t a DynamoDB Request Throttling (ProvisionedThroughput ExceededException)
  25. F l e x i b i l i z

    a n d o a f o r m a d e p r o v i s i o n a r o D y n a m o D B DynamoDB capacidade provisionada, “autoscaling” e “on demand”
  26. Provisionado, autoscaling e on demand Provisionado Autoscaling Sob demanda A

    capacidade provisionada considerando os “picos” vai ser “desperdiçada” nos momentos de menos acesso. Nos momentos de menos pico não pagamos por recursos provisionados, mas não utilizados. Resolve o problema do modelo provisionado, mas não é perfeito, já que o processo de autoscaling pode levar vários minutos para provisionar o que é necessário. Não é necessário se preocupar com o Throttling e, no limite, monitoramento de capacidade. O foco é atender o negócio. Melhor se considerarmos o tráfego previsível e constante Melhor se considerarmos o tráfego previsível Melhor se considerarmos que não temos como prever o tráfego (sem padrão). Requer bom monitoramento dos limites de leitura/escrita Requer bom monitoramento dos limites de leitura/escrita Não requer bom monitoramento dos limites de leitura/escrita Pagamento por hora Pagamento por hora Pagamento por requisição
  27. L i m i t e s i m p

    o r t a n t e s Alguns limites do DynamoDB
  28. Limites • Tamanho dos itens • Requisições (Query ou Scan)

    • Taxa de transferência de partição • Coleção de itens https://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Limits.html
  29. O b s e r v a n d o

    , e n t e n d e n d o a l g u n s l i m i t e s e f u t u r o Monitoramento, limites e um monte de coisas para encontros futuros
  30. Limites importantes • Tamanho dos itens • Requisições (Query ou

    Scan) • Taxa de transferência de partição • Coleção de itens https://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/Limits.html
  31. O que ficou de fora? • DynamoDB Accelerator • DynamoDB

    Stream • DynamoDB Transactions • DynamoDB API (Query, Scan, PutItem, GetItem, CreateTable, etc...) • DynamoDB API (Pagination)