SlideShare uma empresa Scribd logo
1 de 141
Baixar para ler offline
São Paulo
Amazon DynamoDB
Modelagem de dados e boas práticas para
escalar
Felipe Garcia, Amazon Web Services
28 de Maio, 2015 | São Paulo, SP
Escalar
Exemplos
• Catálogo de produtos (workload uniforme)
• Jogo online multi jogador (otimização de queries)
• Aplicativo de mensagens (distribuindo itens grandes)
• Placar de jogo de rede social (views materializadas)
• Votação em tempo real (agregação escalável)
Catálogo de Produtos
Cacheando itens lidos frequentemente
Site de E-Commerce
Produto A Produto B
Consumidor
Tabela CatalogoProdutos
Site de E-Commerce
Produto A Produto B
Consumidor
SELECT Id, Descricao, ...
FROM CatalogoProdutos
WHERE Id=“Produto A”
Tabela CatalogoProdutos
Escalando com o Amazon DynamoDB
Preciso escalar para
a BlackFriday
Administrador (Você)
Tabela CatalogoProdutos
Escalando com o Amazon DynamoDB
Administrador (Você)
Provisionar 5000 capacidades de leitura
Tabela CatalogoProdutos
Escalando com o Amazon DynamoDB
Administrador (Você)
2500 capacidades de leitura (cada)
Provisionar 5000 capacidades de leitura
Partição 1 Partição 2
Tabela CatalogoProdutos
Escalando com o Amazon DynamoDB
Administrador (Você)
(sem compartilhamento)
Partição 1 Partição 2
Tabela CatalogoProdutos
Provisionar 5000 capacidades de leitura
Escalando com o Amazon DynamoDB
Partição 1 Partição 2
Tabela CatalogoProdutos
Escalando com o Amazon DynamoDB
Administrador (Você)
Tabela CatalogoProdutos
Provisionando 100.000 capacidades de leitura
Partição 1
2000 RCU
Partição K
2000 RCU
Partição M
2000 RCU
Partição 50
2000 RCU
Gargalos ao escalar
Produto A Produto B
Consumidores
Partição 1
2000 RCU
Partição K
2000 RCU
Partição M
2000 RCU
Partição 50
2000 RCU
Tabela CatalogoProdutos
Partição 1
2000 RCU
Partição K
2000 RCU
Partição M
2000 RCU
Partição 50
2000 RCU
Gargalos ao escalar
Produto A Produto B
Consumidores
Tabela CatalogoProdutos
Partição 1
2000 RCU
Partição K
2000 RCU
Partição M
2000 RCU
Partição 50
2000 RCU
Gargalos ao escalar
Produto A Produto B
Consumidores
Tabela CatalogoProdutos
Partição 1
2000 RCU
Partição K
2000 RCU
Partição M
2000 RCU
Partição 50
2000 RCU
Gargalos ao escalar
Produto A Produto B
Consumidores
Tabela CatalogoProdutos
Como definir o que é uniforme?
Tamanho
(Gigabytes)
Desempenho
(Solitações por segundo)
Quantidade de partições: Tamanho
# de Partições =
(para tamanho)
Tamanho da Tabela (bytes) / 10 GB
Quantidade de partições: Desempenho
# de Partições =
(para desempenho)
RCU / 3000 + WCU / 1000
Quantidade de partições: Total
# de Partições =
(para tamanho)
Tamanho da Tabela (bytes) / 10 GB
# de Partições =
(para desempenho)
RCU / 3000 + WCU / 1000
(T)
(D)
# de Partições =
(total)
MAX (T | D)
Desempenho por partição
100,000 𝑅𝐶𝑈
50 𝑝𝑎𝑟𝑡𝑖çõ𝑒𝑠
≈ 𝟐𝟎𝟎𝟎 𝑐𝑎𝑝𝑎𝑐𝑖𝑑𝑎𝑑𝑒𝑠 𝑑𝑒 𝑙𝑒𝑖𝑡𝑢𝑟𝑎 𝑝𝑜𝑟 𝑝𝑎𝑟𝑡𝑖çã𝑜
Partição 1
2000 RCU
Partição K
2000 RCU
Partição M
2000 RCU
Partição 50
2000 RCU
ProductCatalog Table
Espaço
(quais hash keys)
Tempo
(capacidade consumida
por segundo)
Examine seu padrão de tráfego: Espaço
Partição
Tempo
Temperatura
Examine seu padrão de tráfego: Tempo
Flexibilidade embutida
0
400
800
1200
1600
UnidadesdeCapacidade
Time
Provisionado Consumido
“salve” a capacidade não utilizada
consuma a capacidade salva
Capacidade de “queima”
0
400
800
1200
1600
UnicdadesdeCapacidade
Tempo
Provisionado Consumido Negado
Capacidade de queima: 300 segundos
(1200 × 300 = 3600 UC)
Solicitações negadas
• Estime o desempenho por partição
• Teste seu workload para escalar horizontalmente
Conheça seu workload
Seu workload não é uniforme
Partição 1
2000 RCU
Partição K
2000 RCU
Partição M
2000 RCU
Partição 50
2000 RCU
Escalando para evitar gargalos
Produto A Produto B
Compradores
Tabela CatalogoProdutos
Examine seu padrão de tráfego: Espaço
Timestamp Tabela HashKey Leituras Escritas
2014-09-30T10:00:00.000 Products Produto A 0.5 0.0
2014-09-30T10:00:00.001 Products Produto A 0.5 0.0
2014-09-30T10:00:00.003 Products Produto A 0.5 0.0
2014-09-30T10:00:00.003 Products Produto C 0.5 0.0
2014-09-30T10:00:00.005 Products Produto A 0.5 0.0
2014-09-30T10:00:00.006 Products Produto B 0.5 0.0
2014-09-30T10:00:00.006 Products Produto A 0.5 0.0
2014-09-30T10:00:00.007 Products Produto A 0.5 0.0
Solicitaçõesporsegundo
Primary Key do Item
Distribuição de solicitações por Hash Key
Solicitações do DynamoDB
Solicitaçõesporsegundo
Primary Key do Item
Distribuição de solicitações por Hash Key
Solicitações do DynamoDB Hits no Cache
Partição 1 Partição 2
Tabela CatalogoProdutos
Usuário
DynamoDB
Usuário
SELECT Id, Descricao, ...
FROM CatalogoProdutos
WHERE Id=”PRODUTO_POPULAR"
• Torna workloads mais uniformes
• Reduz custo
• Reduz latência
Cacheie itens com leitura intensa
Leituras serão mais pesadas do
que o desempenho por partição
Jogo online Multiplayer
Substitua indexes por filtros
Dados do jogo online multiplayer
IdJogo Data Host Oponente Estado
d9bl3 2014-10-02 Felipe Alice FINALIZADO
72f49 2014-09-30 Alice Bob PENDENTE
o2pnb 2014-10-08 Bob Carol EM_PROGRESSO
b932s 2014-10-03 Carol Bob PENDENTE
ef9ca 2014-10-03 Felipe Bob EM_PROGRESSO
Tabela Jogos
IdJogo Data Host Oponente Estado
d9bl3 2014-10-02 Felipe Alice FINALIZADO
72f49 2014-09-30 Alice Bob PENDENTE
o2pnb 2014-10-08 Bob Carol EM_PROGRESSO
b932s 2014-10-03 Carol Bob PENDENTE
ef9ca 2014-10-03 Felipe Bob EM_PROGRESSO
Tabela Jogos
Multiplayer online game data
EM_PROGRESSO FINALIZADOPENDENTE
Transições dos estados de um jogo
Index Secundário
Consulta para solicitações recebidas
Bob
Oponente Estado IdJogo Data Host
Alice FINALIZADO d9bl3 2014-10-02 Felipe
Carol EM_PROGRESSO o2pnb 2014-10-08 Bob
Bob EM_PROGRESSO ef9ca 2014-10-03 Felipe
Bob PENDENTE 72f49 2014-10-03 Alice
Bob PENDENTE b932s 2014-09-30 Carol
Index Secundário
Oponente Estado IdJogo Data Host
Alice FINALIZADO d9bl3 2014-10-02 Felipe
Carol EM_PROGRESSO o2pnb 2014-10-08 Bob
Bob EM_PROGRESSO ef9ca 2014-10-03 Felipe
Bob PENDENTE 72f49 2014-10-03 Alice
Bob PENDENTE b932s 2014-09-30 Carol
Consulta para solicitações recebidas
Bob
Index Secundário
Oponente Estado IdJogo Data Host
Alice FINALIZADO d9bl3 2014-10-02 Felipe
Carol EM_PROGRESSO o2pnb 2014-10-08 Bob
Bob EM_PROGRESSO ef9ca 2014-10-03 Felipe
Bob PENDENTE 72f49 2014-10-03 Alice
Bob PENDENTE b932s 2014-09-30 Carol
Consulta para solicitações recebidas
Bob
SELECT * FROM Jogo
WHERE Oponente='Bob'
AND Estado=’PENDENTE'
Consulta para solicitações recebidas
Bob
SELECT * FROM Jogo
WHERE Oponente='Bob'
AND Estado=’PENDENTE'
ORDER BY Data?
Oponente Estado IdJogo Data Host
Alice FINALIZADO d9bl3 2014-10-02 Felipe
Carol EM_PROGRESSO o2pnb 2014-10-08 Bob
Bob EM_PROGRESSO ef9ca 2014-10-03 Felipe
Bob PENDENTE 72f49 2014-10-03 Alice
Bob PENDENTE b932s 2014-09-30 Carol
Index Secundário
Consulta para solicitações recebidas
• Indexes do DynamoDB fornecem Hash Key e
Range Key
• E com consultas para duas comparações e um
range?
SELECT * FROM Jogo
WHERE Oponente='Bob'
AND Estado='EM_PROGRESO'
ORDER BY Data?
(hash)
(range)
(?)
Index Secundário
Oponente Data IdJogo Estado Host
Alice 2014-10-02 d9bl3 FINALIZADO Felipe
Carol 2014-10-08 o2pnb EM_PROGRESSO Bob
Bob 2014-09-30 72f49 PENDENTE Alice
Bob 2014-10-03 b932s PENDENTE Carol
Bob 2014-10-03 ef9ca EM_PROGRESSO Felipe
Métdo 1: Filtro com Query
Bob
Index Secundário
Métdo 1: Filtro com Query
Bob
Oponente Data IdJogo Estado Host
Alice 2014-10-02 d9bl3 FINALIZADO Felipe
Carol 2014-10-08 o2pnb EM_PROGRESSO Bob
Bob 2014-09-30 72f49 PENDENTE Alice
Bob 2014-10-03 b932s PENDENTE Carol
Bob 2014-10-03 ef9ca EM_PROGRESSO Felipe
SELECT * FROM Jogo
WHERE Oponente='Bob'
ORDER BY Data DESC
FILTER ON Estado='PENDENTE'
(filtrado)
Agulha no palheiro
Agulha no palheiro
Bob
Agulha no palheiro ordenado
Bob
• Envie menos data pelos “cabos”
• Simplifica código da aplicação
• Expressões simples semelhantes a SQL
– AND, OR, NOT, ()
Use um filtro de query
Seu index não é todo seletivo
Método 2: Chave composta
EstadoData
FINALIZADO_2014-10-02
EM_PROGRESSO_2014-10-08
EM_PROGRESSO_2014-10-03
PENDENTE_2014-09-30
PENDENTE_2014-10-03
Estado
FINALIZADO
EM_PROGRESSO
EM_PROGRESSO
PENDENTE
PENDENTE
Data
2014-10-02
2014-10-08
2014-10-03
2014-10-03
2014-09-30
Index Secundário
Método 2: Chave composta
Oponente EstadoData IdJogo Host
Alice FINALIZADO_2014-10-02 d9bl3 Felipe
Carol EM_PROGRESSO_2014-10-08 o2pnb Bob
Bob EM_PROGRESSO_2014-10-03 ef9ca Felipe
Bob PENDENTE_2014-09-30 72f49 Alice
Bob PENDENTE_2014-10-03 b932s Carol
Opponent StatusDate GameId Host
Alice DONE_2014-10-02 d9bl3 Felipe
Carol EM_PROGRESSO_2014-10-08 o2pnb Bob
Bob EM_PROGRESSO_2014-10-03 ef9ca Felipe
Bob PENDENTE_2014-09-30 72f49 Alice
Bob PENDENTE_2014-10-03 b932s Carol
Secondary Index
Método 2: Chave composta
Bob
SELECT * FROM Jogo
WHERE Oponente='Bob'
AND EstadoData STARTS_WITH 'PENDENTE'
• Concatene atributos para formar chaves
secundárias de index úteis
Substitua o filtro com indexes
Você quer otimizar uma consulta
o máximo possível
Status + Date
Aplicativo de mensagens
Distribuir itens grandes
Applicativo de mensagens: Documentos JSON
Tabela Mensagens
Aplicativo Mensagens
Aplicativo de Mensagens
Felipe
Destinatario Data Remetente Mensagem
Felipe 2014-10-02 Bob …
… 48 mensagens adicionais para Felipe …
Felipe 2014-10-03 Alice …
Alice 2014-09-28 Bob …
Alice 2014-10-01 Carol …
…várias outras mensagens de demais usuários…
Tabela Mensagens
Destinatario Data Remetente Mensagem
Felipe 2014-10-02 Bob …
… 48 mensagens adicionais para Felipe…
Felipe 2014-10-03 Alice …
Alice 2014-09-28 Bob …
Alice 2014-10-01 Carol …
…várias outras mensagens de demais usuários…
Aplicativo de Mensagens
Felipe
Tabela Mensaens
SELECT *
FROM Mensagens
WHERE Destinatario='Felipe'
LIMIT 50
ORDER BY Data DESC
Destinatario Data Remetente Mensagem
Felipe 2014-10-02 Bob …
… 48 mensagens adicionais para Felipe…
Felipe 2014-10-03 Alice …
Alice 2014-09-28 Bob …
Alice 2014-10-01 Carol …
…várias outras mensagens dos demais usuários…
Aplicativo de Mensagens
Felipe
Tabela Mensagens
Custo da consulta?
SELECT *
FROM Mensagens
WHERE Destinatario='Felipe'
LIMIT 50
ORDER BY Data DESC
Destinatario Data Remetente Mensagem
Felipe 2014-10-02 Bob …
… 48 mensagens adicionais para Felipe …
Felipe 2014-10-03 Alice …
Alice 2014-09-28 Bob …
Alice 2014-10-01 Carol …
…várias outras mensagens dos demais usuários…
Aplicativo de Mensagens
Tabela Mensagens
Tamanho médio de cada item = 256 KB
Mensagens grandes, anexo…
Felipe
SELECT *
FROM Mensagens
WHERE Destinatario='Felipe'
LIMIT 50
ORDER BY Date DESC
Destinatario Data Remetente Mensagem
Felipe 2014-10-02 Bob …
… 48 mensagens adicionais para Felipe …
Felipe 2014-10-03 Alice …
Alice 2014-09-28 Bob …
Alice 2014-10-01 Carol …
…várias outras mensagens dos demais usuários…
Aplicativo de Mensagens
Felipe
Tabela Mensagens
50 itens × 256 KB cada
SELECT *
FROM Mensagens
WHERE Destinatario='Felipe'
LIMIT 50
ORDER BY Data DESC
Calculando o custo de uma consulta
Itens processados por consulta
Tamanho médio
Taxa de conversão
Leituras com consistência eventual
Tabela
Mensagens
Tabela
Inbox
Aplicativo de Mensagens
Destinatario Data Remetente Assunto IdMsg
Felipe 2014-10-02 Bob Olá!… afed
Felipe 2014-10-03 Alice RE: O ite… 3kf8
Alice 2014-09-28 Bob FW: Tudo… 9d2b
Alice 2014-10-01 Carol Oi!... ct7r
Separe os dados maiores
Tabela Inbox Tabela Mensagens
IdMsg Corpo
9d2b …
3kf8 …
ct7r …
afed …
(Dados maiores
das mensagens)
(Metadado das mensagens, indexado por destinatário)
Destinatario Data Remetente Assunto IdMsg
Felipe 2014-10-02 Bob Olá!… afed
Felipe 2014-10-03 Alice RE: O ite… 3kf8
Alice 2014-09-28 Bob FW: Tudo… 9d2b
Alice 2014-10-01 Carol Oi!... ct7r
Separe os dados maiores
Tabela Inbox Tabela Mensagens
IdMsg Corpo
9d2b …
3kf8 …
ct7r …
afed …
Felipe
1. Consultar a inbox: 1 RCU
(50 itens sequenciais com 128 bytes)
Destinatario Data Remetente Assunto IdMsg
Felipe 2014-10-02 Bob Olá!… afed
Felipe 2014-10-03 Alice RE: O ite… 3kf8
Alice 2014-09-28 Bob FW: Tudo… 9d2b
Alice 2014-10-01 Carol Oi!... ct7r
Separe os dados maiores
Tabela Inbox Tabela Mensagens
IdMsg Corpo
9d2b …
3kf8 …
ct7r …
afed …
Felipe
1. Consultar a Inbox: 1 RCU
2. BatchGetItem Mensagens: 1600 RCU
(50 itens separados com 256 KB)
(50 itens sequenciais com 128 bytes)
Aplicativo de Mensagens: Escritas
Tabela
Mensagens
Tabela
Inbox
Felipe
PutItem
{
IdMsg: 123,
Corpo: ...
}
PutItem
{
Destinatario: Matheus,
Data: 2014-10-23,
IdMsg: 123,
...
}
Lidando com falhas
Tabela
Mensagens
Tabela
Inbox
Felipe
PutItem
{
IdMsg: 123,
Corpo: ...
}
PutItem
{
Destinatario: Matheus,
Data: 2014-10-23,
IdMsg: 123,
...
}
Escritas simplificadas
Felipe
PutItem
{
IdMsg: 123,
Corpo: ...,
Destinatario: Matheus,
Remetente: Felipe,
Data: 2014-10-23,
...
}
Inbox
Índice Secundário
Global (GSI)
Tabela
Mensagens
Projeções do Índice Secundário
Aplicativo Mensagens: Escritas
Inbox
Índice Global
Secundário (GSI)
Tabela
Mensagens
Felipe
Outbox
Índice Global
Secundário (GSI)
• Reduzir o tamanho dos itens um-para-muitos
• Configure as projeções dos índices secundários
Distribua itens grandes
Consultar muitos itens grandes
simultaneamente
Inbox
Messages
Placar de jogo
de rede social
De-normalize os schemas
Desenhe para tolerância a falhas
Placar de jogo de rede social
• Encontrar amigos jogando o mesmo jogo
• Veja como você está, comparando aos seus
amigos
Placar de jogo de rede social
Usuario MP
Chuck 20
Alice 1000
Bob 470
Dave 850
Erin 580
Tabela Amigos Tabela MaioresPlacares
Usuario Amigo
Bob Alice
Bob Chuck
Alice Bob
Alice Chuck
Alice Erin
Placar de jogo de rede social
Usuario MP
Chuck 20
Alice 1000
Bob 470
Dave 850
Erin 580
Tabela Amigos Tabela MaioresPlacares
Usuario Amigo
Bob Alice
Bob Chuck
Alice Bob
Alice Chuck
Alice Erin
Alice
Placar de jogo de rede social
Usuario Placar
Chuck 20
Alice 1000
Bob 470
Dave 850
Erin 580
Tabela Amigos Tabela MaioresPlacares
Usuario Amigo
Bob Alice
Bob Chuck
Alice Bob
Alice Chuck
Alice Erin
1. Query 2. BatchGetItem
Alice
Ineficiências no modelo de dados
• Sempre traz todos os amigos
– Alguns amigos, não jogam
– Talvez esteja interessado somente nos top 10
• Operações de um item para cada amigo
– Query custa 1 RCU para 4 KB de dados
– GetItem arredonda cada item para 1RCU
Placar de amigos melhorado: Leituras
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 20
Alice Bob 470
Alice Chuck 20
Alice Erin 580
Usuario MP
Chuck 20
Alice 1000
Bob 470
Dave 850
Erin 580
Tabela
Tabela Amigos Tabela MaioresPlacares
Placar de amigos melhorado: Leituras
Usuari
o
Amigo MP
Bob Alice 1000
Bob Chuck 20
Alice Bob 470
Alice Chuck 20
Alice Erin 580
Usuario MP
Chuck 20
Alice 1000
Bob 470
Dave 850
Erin 580
Usuario MP Amigo
Bob 20 Chuck
Bob 1000 Alice
Alice 20 Chuck
Alice 470 Bob
Alice 580 Erin
Tabela Índice Local Secundário (LSI)
Tabela PlacarAmigos Tabela MaioresPlacares
Placar de amigos melhorado: Leituras
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 20
Alice Bob 470
Alice Chuck 20
Alice Erin 580
Usuario MP
Chuck 20
Alice 1000
Bob 470
Dave 850
Erin 580
Usuario MP Amigo
Bob 20 Chuck
Bob 1000 Alice
Alice 20 Chuck
Alice 470 Bob
Alice 580 Erin
Tabela Índice Local Secundário (LSI)
Tabela PlacarAmigos Tabela MaioresPlacares
Query
FROM PlacarAmigos-Index
WHERE Usuario=Alice, DESC, LIMIT 10Alice
• Reduza o custo das consultas
• Otimize a latência da consulta
• Decisão custo de escrita vs custo leitura, desempenho
De-normalize os schemas
Desempenho de leitura importa
mais que o custo de escrita
PlacaresAmigos
Usuario MP
Chuck 30
Alice 1000
Bob 470
Dave 850
Erin 580
Placar de amigos melhorado: Escritas
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 30
Alice Bob 470
Alice Chuck 30
Alice Erin 580
Tabela PlacaresAmigos Tabela MaioresPlacares
1. UpdateItem
2. UpdateItem(s)
Chuck
Usuario MP
Chuck 30
Alice 1000
Bob 470
Dave 850
Erin 580
Quando algo de errado acontece
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 30
Alice Bob 470
Alice Chuck 20
Alice Erin 580
Tabela PlacaresAmigos Tabela MaioresPlacares
1. UpdateItem
2. UpdateItem(s)
Chuck
Usuario MP Atualizando
Chuck 20
Alice 1000
Bob 470
Dave 850
Erin 580
Planejando para falhas
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 20
Alice Bob 470
Alice Chuck 20
Alice Erin 580
Tabela PlacaresAmigos Tabela MaioresPlacares
true enquanto estiver atualizando o placar
Usuario MP Atualizando
Chuck 30 true
Alice 1000
Bob 470
Dave 850
Erin 580
Planejando para falhas
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 20
Alice Bob 470
Alice Chuck 20
Alice Erin 580
Tabela PlacaresAmigos Tabela MaioresPlacares
1. UpdateItem
Chuck
Usuario MP Atualizando
Chuck 30 true
Alice 1000
Bob 470
Dave 850
Erin 580
Planejando para falhas
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 30
Alice Bob 470
Alice Chuck 20
Alice Erin 580
Tabela PlacaresAmigos Tabela MaioresPlacares
Chuck
2. UpdateItem(s)
Usuario MP Atualizando
Chuck 30 true
Alice 1000
Bob 470
Dave 850
Erin 580
Planejando para falhas
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 30
Alice Bob 470
Alice Chuck 20
Alice Erin 580
Tabela PlacaresAmigos Tabela MaioresPlacares
Chuck
3. GetItem
Usuario MP A
Chuck 30 true
Alice 1000
Bob 470
Dave 850
Erin 580
Planejando para falhas
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 30
Alice Bob 470
Alice Chuck 30
Alice Erin 580
Tabela PlacaresAmigos Tabela MaioresPlacares
Chuck
4. UpdateItem(s)
Usuario MP Atualizando
Chuck 30
Alice 1000
Bob 470
Dave 850
Erin 580
Planejando para falhas
Usuario Amigo MP
Bob Alice 1000
Bob Chuck 30
Alice Bob 470
Alice Chuck 30
Alice Erin 580
Tabela PlacaresAmigos Tabela MaioresPlacares
5. UpdateItem
Chuck
Biblioteca de transações (cliente)
PutItemRequest aceitarBob;
PutItemRequest confirmarChuck;
Transaction t = txManager.newTransaction();
t.putItem(aceitarBob);
t.putItem(confirmarChuck);
t.commit();
Biblioteca de transações (cliente)
Tabela
Amigos
Tabela
Transacoes
Tabela
ImagensTransacao
Cliente
Transação
Bob
Biblioteca de transações (cliente)
• Desenhada para casos de uso de baixa
contenção
• Custo das operações e latência são maiores do
que escritas normais
• Fácil de usar
• Desenhe para tolerância a falhas, e que as escritas
possam ser recuperadas
• Espere escritas sobrepostas
• Estude quando limpar as transações travadas
• Biblioteca de transações pode te ajudar a começar
Desenhe para tolerância a falhas
Estiver escrevendo múltiplos
itens ou tabelas
Arquitetura Placar: Antes
Seu
Aplicativo
Tabela
AmigoPlacares
Tabela
MaioresPlacares
Arquitetura Placar: Antes
Seu
Aplicativo
Tabela
AmigoPlacares
Tabela
MaioresPlacares
Arquitetura Placar:
DynamoDB Streams
Seu aplicativo
Kinesis
Seu
Aplicativo
Tabela
AmigoPlacares
MaioresPlacares
DynamoDB
Stream
Tabela
MaioresPlacares
Usuario MP
Chuck 20
Alice 100
Tabela MaioresPlacares
Planejando para falha
Chuck
Seq Usuario Velho Novo
1 Chuck 10 20
2 Alice 80 90
3 Alice 90 100
Stream MaioresPlacares
Usuario MP
Chuck 30
Alice 100
Tabela MaioresPlacares
Planejando para falha
Chuck
Seq Usuario Antigo Novo
1 Chuck 10 20
2 Alice 80 90
3 Alice 90 100
Stream MaioresPlacares
Usuario MP
Chuck 30
Alice 100
Tabela MaioresPlacares
Planejando para falha
Chuck
Seq Usuario Antigo Novo
1 Chuck 10 20
2 Alice 80 90
3 Alice 90 100
4 Chuck 20 30
Stream MaioresPlacares
User H.S.
Chuck 30
Alice 100
HighScores Table
Planejando para falha
Chuck
Seq User Old New
1 Chuck 10 20
2 Alice 80 90
3 Alice 90 100
4 Chuck 20 30
HighScores Stream
Usuario MP
Chuck 30
Alice 100
Tabela MaioresPlacares
Planejando para falha
Usuari
o
Amigo MP
Bob Chuck 20
Alice Chuck 20
Tabela AmigoPlacares
Amigo Usuario
Chuck Alice
Chuck Bob
Tabela Índice Secundário Global (GSI)
Seq Usuario Antigo Novo
1 Chuck 10 20
2 Alice 80 90
3 Alice 90 100
4 Chuck 20 30
Stream MaioresPlacares
Seu aplicativo
Kinesis
Usuario MP
Chuck 30
Alice 100
Tabela MaioresPlacares
Planejando para falha
Usuario Amigo MP
Bob Chuck 20
Alice Chuck 20
Tabela AmigoPlacares
Amigo Usuario
Chuck Alice
Chuck Bob
Tabela Índice Secundário Global (GSI)
Seq Usuario Antigo Novo
1 Chuck 10 20
2 Alice 80 90
3 Alice 90 100
4 Chuck 20 30
Stream MaioresPlacares
Seu aplicativo
Kinesis
Usuario MP
Chuck 30
Alice 100
Tabela MaioresPlacares
Planejando para falha
Usuario Amigo MP
Bob Chuck 30
Alice Chuck 30
Tabela AmigoPlacares
Amigo Usuari
o
Chuck Alice
Chuck Bob
Tabela Índice Secundário Global (GSI)
Seq Usuario Antigo Novo
1 Chuck 10 20
2 Alice 80 90
3 Alice 90 100
4 Chuck 20 30
Stream MaioresPlacares
Seu aplicativo
Kinesis
Usuario MP
Chuck 30
Alice 100
Tabela MaioresPlacares
Planning for failure
Usuari
o
Amigo MP
Bob Chuck 30
Alice Chuck 30
Tabela AmigoPlacares
Amigo Usuario
Chuck Alice
Chuck Bob
Tabela Índice Secundário Global (GSI)
Seq Usuario Antig
o
Novo
1 Chuck 10 20
2 Alice 80 90
3 Alice 90 100
4 Chuck 20 30
Stream MaioresPlacares
Seu Aplicativo
Kinesis
Table de
Progresso das
Streams
Propagação de escritas
com DynamoDB Streams
• Simplifique o gerenciamento de erros com escritas
assíncronas
Manter múltiplas tabelas ou
fontes de dados sincronizadas
Votação em
tempo real
Particionar itens de escrita
intensa
Desenhe para tolerância a falhas
Votação
Candidato A
Vots: 20
Candidato B
Vots: 30
Eleitor
Tabela Votos
Candidato A
Votos: 21
Candidato B
Votos: 30
Tabela Votos
Votação
UPDATE Votos
SET Votos = Votos + 1
WHERE Id=“Candidato A”Eleitor
(incremento atômico)
Escalando com o Amazon DynamoDB
Preciso escalar
para a eleição
Administrador (Você)
Tabela Votos
Escalando com o Amazon DynamoDB
Administrador (Você)
Provisionar 200.000 capacidades de escrita
Partição 1
1000 WCU
Partição K
1000 WCU
Partição M
1000 WCU
Partição N
1000 WCU
Tabela Votos
Gargalos ao escalar
Candidato A Candidato B
Eleitor
Partição 1
1000 WCU
Partição K
1000 WCU
Partição M
1000 WCU
Partição N
1000 WCU
Tabela Votos
Partição 1
1000 WCU
Partição K
1000 WCU
Partição M
1000 WCU
Partição N
1000 WCU
Tabela Votos
Candidato A Candidato B
Gargalos ao escalar
Eleitores
Particionando escritas
Candidato A
Candidato A_2
Candidato A_1
Candidato A_3
Candidato A_4
Candidato A_7
CandidatoA_6 Candidato A_8
Candidato A_5
Particionando escritas
Candidato A_2
Candidato B_1
Candidato B_2
Candidato B_3
Candidato B_5
Candidato B_4
Candidato B_7
Candidato B_6
Candidato A_1
Candidato A_3
Candidato A_4
Candidato A_7 Candidato B_8
Candidato A_6 Candidato A_8
Candidato A_5
Eleitor
Tabela Votos
Particionando escritas
Candidato A_2
Candidato B_1
Candidato B_2
Candidato B_3
Candidato B_5
Candidato B_4
Candidato B_7
Candidato B_6
Candidato A_1
Candidato A_3
Candidato A_4
Candidato A_7 Candidato B_8
UpdateItem: “CandidatoA_” + rand(0, 10)
ADD 1 to Votos
Candidato A_6 Candidato A_8
Candidato A_5
Eleitor
Votes Table
Tabela Votos
Agregando partições
Candidato A_2
Candidato B_1
Candidato B_2
Candidato B_3
Candidato B_5
Candidato B_4
Candidato B_7
Candidato B_6
Candidato A_1
Candidato A_3
Candidato A_4
Candidato A_5
Candidato A_6 Candidato A_8
Candidato A_7 Candidato B_8
Processo
Periódico
Candidato A
Total: 2.5M
1. Somar
2. Armazenar Eleitor
• Decisão custo leitura vs escalabilidade na escrita,
desempenho
• Considere o desempenho por chave-valor e por partição
Particione chaves-valor com escrita
intensa
Seu workload de escrita não é
horizontalmente escalável
Requerimentos para votação
• Permitir cada pessoa votar somente uma vez
• Não é permitido alterar os votos
• Agregação em tempo real
• Análises dos eleitors, demografia
Exatidão na votação
Usuario Candidato Data
Alice A 2013-10-02
Bob B 2013-10-02
Eve B 2013-10-02
Chuck A 2013-10-02
Tabela UsuarioVotos
Eleitor
Exatidão na votação
Usuario Candidato Data
Alice A 2013-10-02
Bob B 2013-10-02
Eve B 2013-10-02
Chuck A 2013-10-02
Tabela UsuarioVotos
Segmento Votos
A_1 23
B_2 12
B_1 14
A_2 25
Tabela VotosAgregados
Eleitor
1. Gravar voto, de-duplicar, re-tentar 2. Incrementar contador do
candidato
Exatidão na agregação?
Usuario Candidato Data
Alice A 2013-10-02
Bob B 2013-10-02
Eve B 2013-10-02
Chuck A 2013-10-02
Tabela CandidatoVotos
Segmento Votos
A_1 23
B_2 12
B_1 14
A_2 25
Tabela VotosAgregados
Eleitor
Arquitetura de votação em tempo real
Tabela
VotosAgregados
Eleitores
Tabela
UsuarioVotos
Aplicativo
Votação
Arquitetura de votação em tempo real (melhorada)
Tabela
VotosAgregados
Amazon
Redshift Amazon EMR
Seu aplicativo
Kinesis
Eleitores Tabela
UsuarioVotos
Aplicativo
Votação
UsuarioVotos
DynamoDB
Stream
Arquitetura de votação em tempo real
Tabela
VotosAgregados
Amazon
Redshift Amazon EMR
Seu aplicativo
Kinesis
Eleitores Tabela UsuarioVotosAplicativo Votação UsuarioVotos
DynamoDB
Stream
Arquitetura de votação em tempo real
Tabela
VotosAgregados
Amazon
Redshift Amazon EMR
Seu aplicativo
Kinesis
Eleitores Tabela UsuarioVotosAplicativo Votação UsuarioVotos
DynamoDB
Stream
Arquitetura de votação em tempo real
Tabela
VotosAgregados
Amazon
Redshift Amazon EMR
Seu aplicativo
Kinesis
Eleitores Tabela UsuarioVotosAplicativo Votação UsuarioVotos
DynamoDB
Stream
Arquitetura de votação em tempo real
Tabela
VotosAgregados
Amazon
Redshift Amazon EMR
Seu aplicativo
Kinesis
Eleitores Tabela UsuarioVotosAplicativo Votação UsuarioVotos
DynamoDB
Stream
Análises com
DynamoDB Streams
• Colete e de-duplique dados no DynamoDB
• Agregue dados em memória e salve
periodicamente
Executar agregação e análise em
tempo real
Aprendizados
Catálogo de Produtos
Avalie os requerimentos de desempenho por chave-valor
Cacheie itens de leitura intensa
Jogo online multiplayer
Converta consultas filtradas em consultas
indexadas
Estado + Data
Aplicativo de mensagem
Distribua itens grandes
Inbox
Mensagens
Placar de jogo de rede social
De-normalize dados para otimizar consultas
Desenhe para tolerância a falhas
Propague escritas com DynamoDB Streams
PlacaresAmigos
Votação em tempo real
Particione itens de escrita intensa
Execute análises com DynamoDB Streams
Escalar
Obrigado!

Mais conteúdo relacionado

Mais procurados

A tour of Amazon Redshift
A tour of Amazon RedshiftA tour of Amazon Redshift
A tour of Amazon RedshiftKel Graham
 
第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」裕之 木下
 
Data modeling star schema
Data modeling star schemaData modeling star schema
Data modeling star schemaSayed Ahmed
 
Zfs Nuts And Bolts
Zfs Nuts And BoltsZfs Nuts And Bolts
Zfs Nuts And BoltsEric Sproul
 
Data Warehousing with Amazon Redshift
Data Warehousing with Amazon RedshiftData Warehousing with Amazon Redshift
Data Warehousing with Amazon RedshiftAmazon Web Services
 
Always on in SQL Server 2012
Always on in SQL Server 2012Always on in SQL Server 2012
Always on in SQL Server 2012Fadi Abdulwahab
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスMicrosoft
 
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略歩 柴田
 
Advanced Dimensional Modelling
Advanced Dimensional ModellingAdvanced Dimensional Modelling
Advanced Dimensional ModellingVincent Rainardi
 
Training AWS: Module 8 - RDS, Aurora, ElastiCache
Training AWS: Module 8 - RDS, Aurora, ElastiCacheTraining AWS: Module 8 - RDS, Aurora, ElastiCache
Training AWS: Module 8 - RDS, Aurora, ElastiCacheBùi Quang Lâm
 
Sql 2012 always on
Sql 2012 always onSql 2012 always on
Sql 2012 always ondilip nayak
 
Enabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache SparkEnabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache SparkKazuaki Ishizaki
 
Oracle Cloud Infrastructure セキュリティの取り組み [2021年8月版]
Oracle Cloud Infrastructure セキュリティの取り組み [2021年8月版]Oracle Cloud Infrastructure セキュリティの取り組み [2021年8月版]
Oracle Cloud Infrastructure セキュリティの取り組み [2021年8月版]オラクルエンジニア通信
 

Mais procurados (20)

A tour of Amazon Redshift
A tour of Amazon RedshiftA tour of Amazon Redshift
A tour of Amazon Redshift
 
第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」第15回JSSUG「Azure SQL Database 超入門」
第15回JSSUG「Azure SQL Database 超入門」
 
Data modeling star schema
Data modeling star schemaData modeling star schema
Data modeling star schema
 
Deep Dive on Amazon Redshift
Deep Dive on Amazon RedshiftDeep Dive on Amazon Redshift
Deep Dive on Amazon Redshift
 
Zfs Nuts And Bolts
Zfs Nuts And BoltsZfs Nuts And Bolts
Zfs Nuts And Bolts
 
Data Warehousing with Amazon Redshift
Data Warehousing with Amazon RedshiftData Warehousing with Amazon Redshift
Data Warehousing with Amazon Redshift
 
Always on in SQL Server 2012
Always on in SQL Server 2012Always on in SQL Server 2012
Always on in SQL Server 2012
 
SQLd360
SQLd360SQLd360
SQLd360
 
Azure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL PoolベストプラクティスAzure Synapse Analytics 専用SQL Poolベストプラクティス
Azure Synapse Analytics 専用SQL Poolベストプラクティス
 
Deep Dive on Amazon DynamoDB
Deep Dive on Amazon DynamoDBDeep Dive on Amazon DynamoDB
Deep Dive on Amazon DynamoDB
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
 
AWS Elemental MediaTailor
AWS Elemental MediaTailorAWS Elemental MediaTailor
AWS Elemental MediaTailor
 
Advanced Dimensional Modelling
Advanced Dimensional ModellingAdvanced Dimensional Modelling
Advanced Dimensional Modelling
 
Azure Synapse Analytics
Azure Synapse AnalyticsAzure Synapse Analytics
Azure Synapse Analytics
 
Training AWS: Module 8 - RDS, Aurora, ElastiCache
Training AWS: Module 8 - RDS, Aurora, ElastiCacheTraining AWS: Module 8 - RDS, Aurora, ElastiCache
Training AWS: Module 8 - RDS, Aurora, ElastiCache
 
Sql 2012 always on
Sql 2012 always onSql 2012 always on
Sql 2012 always on
 
Enabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache SparkEnabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache Spark
 
Deep Dive on Amazon Redshift
Deep Dive on Amazon RedshiftDeep Dive on Amazon Redshift
Deep Dive on Amazon Redshift
 
Oracle Cloud Infrastructure セキュリティの取り組み [2021年8月版]
Oracle Cloud Infrastructure セキュリティの取り組み [2021年8月版]Oracle Cloud Infrastructure セキュリティの取り組み [2021年8月版]
Oracle Cloud Infrastructure セキュリティの取り組み [2021年8月版]
 

Destaque

Destaque (13)

DynamoDB: um banco NoSQL
DynamoDB: um banco NoSQLDynamoDB: um banco NoSQL
DynamoDB: um banco NoSQL
 
DynamoDB - Uma Introdução
DynamoDB - Uma IntroduçãoDynamoDB - Uma Introdução
DynamoDB - Uma Introdução
 
Escalando primeiros 10 milhões de usuários
Escalando primeiros 10 milhões de usuáriosEscalando primeiros 10 milhões de usuários
Escalando primeiros 10 milhões de usuários
 
Webinar: Introdução a Big data
Webinar: Introdução a Big dataWebinar: Introdução a Big data
Webinar: Introdução a Big data
 
Webinar: Otimização de Custos na AWS
Webinar: Otimização de Custos na AWSWebinar: Otimização de Custos na AWS
Webinar: Otimização de Custos na AWS
 
Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWSBancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
 
Tendências de Big Data
Tendências de Big DataTendências de Big Data
Tendências de Big Data
 
Arquiteturas Cloud: Uma Introdução
Arquiteturas Cloud: Uma IntroduçãoArquiteturas Cloud: Uma Introdução
Arquiteturas Cloud: Uma Introdução
 
Bancos de Dados gerenciados na nuvem AWS
Bancos de Dados gerenciados na nuvem AWSBancos de Dados gerenciados na nuvem AWS
Bancos de Dados gerenciados na nuvem AWS
 
NoSQL e Big Data na Nuvem
NoSQL e Big Data na NuvemNoSQL e Big Data na Nuvem
NoSQL e Big Data na Nuvem
 
Webinar: Como explorar os recursos de aprendizagem da AWS
Webinar: Como explorar os recursos de aprendizagem da AWSWebinar: Como explorar os recursos de aprendizagem da AWS
Webinar: Como explorar os recursos de aprendizagem da AWS
 
Utilizando NoSQL para Big Data com DynamoDB
Utilizando NoSQL para Big Data com DynamoDB Utilizando NoSQL para Big Data com DynamoDB
Utilizando NoSQL para Big Data com DynamoDB
 
Padrões de Arquitetura na Nuvem da AWS
Padrões de Arquitetura na Nuvem da AWSPadrões de Arquitetura na Nuvem da AWS
Padrões de Arquitetura na Nuvem da AWS
 

Semelhante a Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar

02 armazenamento de dados em blocos de dados
02   armazenamento de dados em blocos de dados02   armazenamento de dados em blocos de dados
02 armazenamento de dados em blocos de dadosconfidencial
 
Arquitetura de Computadores: Sistemas de numeração
Arquitetura de Computadores: Sistemas de numeraçãoArquitetura de Computadores: Sistemas de numeração
Arquitetura de Computadores: Sistemas de numeraçãoAlex Camargo
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?Nico Steppat
 
Pré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkPré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkFelipe
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'C. Augusto Proiete
 
Campus Party Brasil 2017: Angular 2 #cpbr10
Campus Party Brasil 2017: Angular 2 #cpbr10Campus Party Brasil 2017: Angular 2 #cpbr10
Campus Party Brasil 2017: Angular 2 #cpbr10Loiane Groner
 
Replicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageReplicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageRuda Filgueiras
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 
postgres servlab
postgres servlabpostgres servlab
postgres servlabbjsjd
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Alexandre Saboia Fuziyama
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)PAULO R. DEOLINDO JUNIOR
 

Semelhante a Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar (20)

Deep dive de Amazon DynamoDB
Deep dive de Amazon DynamoDBDeep dive de Amazon DynamoDB
Deep dive de Amazon DynamoDB
 
02 armazenamento de dados em blocos de dados
02   armazenamento de dados em blocos de dados02   armazenamento de dados em blocos de dados
02 armazenamento de dados em blocos de dados
 
Arquitetura de Computadores: Sistemas de numeração
Arquitetura de Computadores: Sistemas de numeraçãoArquitetura de Computadores: Sistemas de numeração
Arquitetura de Computadores: Sistemas de numeração
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?
 
Pré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache SparkPré processamento de grandes dados com Apache Spark
Pré processamento de grandes dados com Apache Spark
 
CLP S7 300 E S7 400
CLP S7 300 E S7 400CLP S7 300 E S7 400
CLP S7 300 E S7 400
 
CLP S7 300 E S7 400
CLP S7 300 E S7 400CLP S7 300 E S7 400
CLP S7 300 E S7 400
 
Pro2 04p
Pro2 04pPro2 04p
Pro2 04p
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
PostgreSQL 8.4
PostgreSQL 8.4PostgreSQL 8.4
PostgreSQL 8.4
 
Campus Party Brasil 2017: Angular 2 #cpbr10
Campus Party Brasil 2017: Angular 2 #cpbr10Campus Party Brasil 2017: Angular 2 #cpbr10
Campus Party Brasil 2017: Angular 2 #cpbr10
 
Replicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorageReplicação e escalabidade do ZODB com RelStorage
Replicação e escalabidade do ZODB com RelStorage
 
Migrei meu ambiente de BI para o Redshift
Migrei meu ambiente de BI para o RedshiftMigrei meu ambiente de BI para o Redshift
Migrei meu ambiente de BI para o Redshift
 
Stoe 02 p
Stoe 02 pStoe 02 p
Stoe 02 p
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
postgres servlab
postgres servlabpostgres servlab
postgres servlab
 
Pro2 15p
Pro2 15pPro2 15p
Pro2 15p
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)
 

Mais de Amazon Web Services LATAM

AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAmazon Web Services LATAM
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAmazon Web Services LATAM
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.Amazon Web Services LATAM
 
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAmazon Web Services LATAM
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAmazon Web Services LATAM
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.Amazon Web Services LATAM
 
Automatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAutomatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAmazon Web Services LATAM
 
Automatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAutomatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAmazon Web Services LATAM
 
Ransomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWSRansomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWSAmazon Web Services LATAM
 
Ransomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWSRansomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWSAmazon Web Services LATAM
 
Aprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWSAprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWSAmazon Web Services LATAM
 
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWSAprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWSAmazon Web Services LATAM
 
Cómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administradosCómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administradosAmazon Web Services LATAM
 
Os benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWSOs benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWSAmazon Web Services LATAM
 

Mais de Amazon Web Services LATAM (20)

AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
 
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
 
Automatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAutomatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWS
 
Automatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAutomatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWS
 
Cómo empezar con Amazon EKS
Cómo empezar con Amazon EKSCómo empezar con Amazon EKS
Cómo empezar con Amazon EKS
 
Como começar com Amazon EKS
Como começar com Amazon EKSComo começar com Amazon EKS
Como começar com Amazon EKS
 
Ransomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWSRansomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWS
 
Ransomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWSRansomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWS
 
Ransomware: Estratégias de Mitigação
Ransomware: Estratégias de MitigaçãoRansomware: Estratégias de Mitigação
Ransomware: Estratégias de Mitigação
 
Ransomware: Estratégias de Mitigación
Ransomware: Estratégias de MitigaciónRansomware: Estratégias de Mitigación
Ransomware: Estratégias de Mitigación
 
Aprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWSAprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWS
 
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWSAprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWS
 
Cómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administradosCómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administrados
 
Simplifique su BI con AWS
Simplifique su BI con AWSSimplifique su BI con AWS
Simplifique su BI con AWS
 
Simplifique o seu BI com a AWS
Simplifique o seu BI com a AWSSimplifique o seu BI com a AWS
Simplifique o seu BI com a AWS
 
Os benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWSOs benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWS
 

Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar

  • 2. Amazon DynamoDB Modelagem de dados e boas práticas para escalar Felipe Garcia, Amazon Web Services 28 de Maio, 2015 | São Paulo, SP
  • 4. Exemplos • Catálogo de produtos (workload uniforme) • Jogo online multi jogador (otimização de queries) • Aplicativo de mensagens (distribuindo itens grandes) • Placar de jogo de rede social (views materializadas) • Votação em tempo real (agregação escalável)
  • 5. Catálogo de Produtos Cacheando itens lidos frequentemente
  • 6.
  • 7. Site de E-Commerce Produto A Produto B Consumidor Tabela CatalogoProdutos
  • 8. Site de E-Commerce Produto A Produto B Consumidor SELECT Id, Descricao, ... FROM CatalogoProdutos WHERE Id=“Produto A” Tabela CatalogoProdutos
  • 9. Escalando com o Amazon DynamoDB Preciso escalar para a BlackFriday Administrador (Você) Tabela CatalogoProdutos
  • 10. Escalando com o Amazon DynamoDB Administrador (Você) Provisionar 5000 capacidades de leitura Tabela CatalogoProdutos
  • 11. Escalando com o Amazon DynamoDB Administrador (Você) 2500 capacidades de leitura (cada) Provisionar 5000 capacidades de leitura Partição 1 Partição 2 Tabela CatalogoProdutos
  • 12. Escalando com o Amazon DynamoDB Administrador (Você) (sem compartilhamento) Partição 1 Partição 2 Tabela CatalogoProdutos Provisionar 5000 capacidades de leitura
  • 13. Escalando com o Amazon DynamoDB Partição 1 Partição 2 Tabela CatalogoProdutos
  • 14. Escalando com o Amazon DynamoDB Administrador (Você) Tabela CatalogoProdutos Provisionando 100.000 capacidades de leitura Partição 1 2000 RCU Partição K 2000 RCU Partição M 2000 RCU Partição 50 2000 RCU
  • 15. Gargalos ao escalar Produto A Produto B Consumidores Partição 1 2000 RCU Partição K 2000 RCU Partição M 2000 RCU Partição 50 2000 RCU Tabela CatalogoProdutos
  • 16. Partição 1 2000 RCU Partição K 2000 RCU Partição M 2000 RCU Partição 50 2000 RCU Gargalos ao escalar Produto A Produto B Consumidores Tabela CatalogoProdutos
  • 17. Partição 1 2000 RCU Partição K 2000 RCU Partição M 2000 RCU Partição 50 2000 RCU Gargalos ao escalar Produto A Produto B Consumidores Tabela CatalogoProdutos
  • 18. Partição 1 2000 RCU Partição K 2000 RCU Partição M 2000 RCU Partição 50 2000 RCU Gargalos ao escalar Produto A Produto B Consumidores Tabela CatalogoProdutos
  • 19. Como definir o que é uniforme?
  • 21. Quantidade de partições: Tamanho # de Partições = (para tamanho) Tamanho da Tabela (bytes) / 10 GB
  • 22. Quantidade de partições: Desempenho # de Partições = (para desempenho) RCU / 3000 + WCU / 1000
  • 23. Quantidade de partições: Total # de Partições = (para tamanho) Tamanho da Tabela (bytes) / 10 GB # de Partições = (para desempenho) RCU / 3000 + WCU / 1000 (T) (D) # de Partições = (total) MAX (T | D)
  • 24. Desempenho por partição 100,000 𝑅𝐶𝑈 50 𝑝𝑎𝑟𝑡𝑖çõ𝑒𝑠 ≈ 𝟐𝟎𝟎𝟎 𝑐𝑎𝑝𝑎𝑐𝑖𝑑𝑎𝑑𝑒𝑠 𝑑𝑒 𝑙𝑒𝑖𝑡𝑢𝑟𝑎 𝑝𝑜𝑟 𝑝𝑎𝑟𝑡𝑖çã𝑜 Partição 1 2000 RCU Partição K 2000 RCU Partição M 2000 RCU Partição 50 2000 RCU ProductCatalog Table
  • 26. Examine seu padrão de tráfego: Espaço Partição Tempo Temperatura
  • 27. Examine seu padrão de tráfego: Tempo
  • 29. Capacidade de “queima” 0 400 800 1200 1600 UnicdadesdeCapacidade Tempo Provisionado Consumido Negado Capacidade de queima: 300 segundos (1200 × 300 = 3600 UC) Solicitações negadas
  • 30. • Estime o desempenho por partição • Teste seu workload para escalar horizontalmente Conheça seu workload Seu workload não é uniforme
  • 31. Partição 1 2000 RCU Partição K 2000 RCU Partição M 2000 RCU Partição 50 2000 RCU Escalando para evitar gargalos Produto A Produto B Compradores Tabela CatalogoProdutos
  • 32. Examine seu padrão de tráfego: Espaço Timestamp Tabela HashKey Leituras Escritas 2014-09-30T10:00:00.000 Products Produto A 0.5 0.0 2014-09-30T10:00:00.001 Products Produto A 0.5 0.0 2014-09-30T10:00:00.003 Products Produto A 0.5 0.0 2014-09-30T10:00:00.003 Products Produto C 0.5 0.0 2014-09-30T10:00:00.005 Products Produto A 0.5 0.0 2014-09-30T10:00:00.006 Products Produto B 0.5 0.0 2014-09-30T10:00:00.006 Products Produto A 0.5 0.0 2014-09-30T10:00:00.007 Products Produto A 0.5 0.0
  • 33. Solicitaçõesporsegundo Primary Key do Item Distribuição de solicitações por Hash Key Solicitações do DynamoDB
  • 34. Solicitaçõesporsegundo Primary Key do Item Distribuição de solicitações por Hash Key Solicitações do DynamoDB Hits no Cache
  • 35. Partição 1 Partição 2 Tabela CatalogoProdutos Usuário DynamoDB Usuário SELECT Id, Descricao, ... FROM CatalogoProdutos WHERE Id=”PRODUTO_POPULAR"
  • 36. • Torna workloads mais uniformes • Reduz custo • Reduz latência Cacheie itens com leitura intensa Leituras serão mais pesadas do que o desempenho por partição
  • 37. Jogo online Multiplayer Substitua indexes por filtros
  • 38.
  • 39. Dados do jogo online multiplayer IdJogo Data Host Oponente Estado d9bl3 2014-10-02 Felipe Alice FINALIZADO 72f49 2014-09-30 Alice Bob PENDENTE o2pnb 2014-10-08 Bob Carol EM_PROGRESSO b932s 2014-10-03 Carol Bob PENDENTE ef9ca 2014-10-03 Felipe Bob EM_PROGRESSO Tabela Jogos
  • 40. IdJogo Data Host Oponente Estado d9bl3 2014-10-02 Felipe Alice FINALIZADO 72f49 2014-09-30 Alice Bob PENDENTE o2pnb 2014-10-08 Bob Carol EM_PROGRESSO b932s 2014-10-03 Carol Bob PENDENTE ef9ca 2014-10-03 Felipe Bob EM_PROGRESSO Tabela Jogos Multiplayer online game data
  • 42.
  • 43. Index Secundário Consulta para solicitações recebidas Bob Oponente Estado IdJogo Data Host Alice FINALIZADO d9bl3 2014-10-02 Felipe Carol EM_PROGRESSO o2pnb 2014-10-08 Bob Bob EM_PROGRESSO ef9ca 2014-10-03 Felipe Bob PENDENTE 72f49 2014-10-03 Alice Bob PENDENTE b932s 2014-09-30 Carol
  • 44. Index Secundário Oponente Estado IdJogo Data Host Alice FINALIZADO d9bl3 2014-10-02 Felipe Carol EM_PROGRESSO o2pnb 2014-10-08 Bob Bob EM_PROGRESSO ef9ca 2014-10-03 Felipe Bob PENDENTE 72f49 2014-10-03 Alice Bob PENDENTE b932s 2014-09-30 Carol Consulta para solicitações recebidas Bob
  • 45. Index Secundário Oponente Estado IdJogo Data Host Alice FINALIZADO d9bl3 2014-10-02 Felipe Carol EM_PROGRESSO o2pnb 2014-10-08 Bob Bob EM_PROGRESSO ef9ca 2014-10-03 Felipe Bob PENDENTE 72f49 2014-10-03 Alice Bob PENDENTE b932s 2014-09-30 Carol Consulta para solicitações recebidas Bob SELECT * FROM Jogo WHERE Oponente='Bob' AND Estado=’PENDENTE'
  • 46. Consulta para solicitações recebidas Bob SELECT * FROM Jogo WHERE Oponente='Bob' AND Estado=’PENDENTE' ORDER BY Data? Oponente Estado IdJogo Data Host Alice FINALIZADO d9bl3 2014-10-02 Felipe Carol EM_PROGRESSO o2pnb 2014-10-08 Bob Bob EM_PROGRESSO ef9ca 2014-10-03 Felipe Bob PENDENTE 72f49 2014-10-03 Alice Bob PENDENTE b932s 2014-09-30 Carol Index Secundário
  • 47. Consulta para solicitações recebidas • Indexes do DynamoDB fornecem Hash Key e Range Key • E com consultas para duas comparações e um range? SELECT * FROM Jogo WHERE Oponente='Bob' AND Estado='EM_PROGRESO' ORDER BY Data? (hash) (range) (?)
  • 48. Index Secundário Oponente Data IdJogo Estado Host Alice 2014-10-02 d9bl3 FINALIZADO Felipe Carol 2014-10-08 o2pnb EM_PROGRESSO Bob Bob 2014-09-30 72f49 PENDENTE Alice Bob 2014-10-03 b932s PENDENTE Carol Bob 2014-10-03 ef9ca EM_PROGRESSO Felipe Métdo 1: Filtro com Query Bob
  • 49. Index Secundário Métdo 1: Filtro com Query Bob Oponente Data IdJogo Estado Host Alice 2014-10-02 d9bl3 FINALIZADO Felipe Carol 2014-10-08 o2pnb EM_PROGRESSO Bob Bob 2014-09-30 72f49 PENDENTE Alice Bob 2014-10-03 b932s PENDENTE Carol Bob 2014-10-03 ef9ca EM_PROGRESSO Felipe SELECT * FROM Jogo WHERE Oponente='Bob' ORDER BY Data DESC FILTER ON Estado='PENDENTE' (filtrado)
  • 52. Agulha no palheiro ordenado Bob
  • 53. • Envie menos data pelos “cabos” • Simplifica código da aplicação • Expressões simples semelhantes a SQL – AND, OR, NOT, () Use um filtro de query Seu index não é todo seletivo
  • 54. Método 2: Chave composta EstadoData FINALIZADO_2014-10-02 EM_PROGRESSO_2014-10-08 EM_PROGRESSO_2014-10-03 PENDENTE_2014-09-30 PENDENTE_2014-10-03 Estado FINALIZADO EM_PROGRESSO EM_PROGRESSO PENDENTE PENDENTE Data 2014-10-02 2014-10-08 2014-10-03 2014-10-03 2014-09-30
  • 55. Index Secundário Método 2: Chave composta Oponente EstadoData IdJogo Host Alice FINALIZADO_2014-10-02 d9bl3 Felipe Carol EM_PROGRESSO_2014-10-08 o2pnb Bob Bob EM_PROGRESSO_2014-10-03 ef9ca Felipe Bob PENDENTE_2014-09-30 72f49 Alice Bob PENDENTE_2014-10-03 b932s Carol
  • 56. Opponent StatusDate GameId Host Alice DONE_2014-10-02 d9bl3 Felipe Carol EM_PROGRESSO_2014-10-08 o2pnb Bob Bob EM_PROGRESSO_2014-10-03 ef9ca Felipe Bob PENDENTE_2014-09-30 72f49 Alice Bob PENDENTE_2014-10-03 b932s Carol Secondary Index Método 2: Chave composta Bob SELECT * FROM Jogo WHERE Oponente='Bob' AND EstadoData STARTS_WITH 'PENDENTE'
  • 57. • Concatene atributos para formar chaves secundárias de index úteis Substitua o filtro com indexes Você quer otimizar uma consulta o máximo possível Status + Date
  • 59. Applicativo de mensagens: Documentos JSON
  • 61. Aplicativo de Mensagens Felipe Destinatario Data Remetente Mensagem Felipe 2014-10-02 Bob … … 48 mensagens adicionais para Felipe … Felipe 2014-10-03 Alice … Alice 2014-09-28 Bob … Alice 2014-10-01 Carol … …várias outras mensagens de demais usuários… Tabela Mensagens
  • 62. Destinatario Data Remetente Mensagem Felipe 2014-10-02 Bob … … 48 mensagens adicionais para Felipe… Felipe 2014-10-03 Alice … Alice 2014-09-28 Bob … Alice 2014-10-01 Carol … …várias outras mensagens de demais usuários… Aplicativo de Mensagens Felipe Tabela Mensaens SELECT * FROM Mensagens WHERE Destinatario='Felipe' LIMIT 50 ORDER BY Data DESC
  • 63. Destinatario Data Remetente Mensagem Felipe 2014-10-02 Bob … … 48 mensagens adicionais para Felipe… Felipe 2014-10-03 Alice … Alice 2014-09-28 Bob … Alice 2014-10-01 Carol … …várias outras mensagens dos demais usuários… Aplicativo de Mensagens Felipe Tabela Mensagens Custo da consulta? SELECT * FROM Mensagens WHERE Destinatario='Felipe' LIMIT 50 ORDER BY Data DESC
  • 64. Destinatario Data Remetente Mensagem Felipe 2014-10-02 Bob … … 48 mensagens adicionais para Felipe … Felipe 2014-10-03 Alice … Alice 2014-09-28 Bob … Alice 2014-10-01 Carol … …várias outras mensagens dos demais usuários… Aplicativo de Mensagens Tabela Mensagens Tamanho médio de cada item = 256 KB Mensagens grandes, anexo… Felipe SELECT * FROM Mensagens WHERE Destinatario='Felipe' LIMIT 50 ORDER BY Date DESC
  • 65. Destinatario Data Remetente Mensagem Felipe 2014-10-02 Bob … … 48 mensagens adicionais para Felipe … Felipe 2014-10-03 Alice … Alice 2014-09-28 Bob … Alice 2014-10-01 Carol … …várias outras mensagens dos demais usuários… Aplicativo de Mensagens Felipe Tabela Mensagens 50 itens × 256 KB cada SELECT * FROM Mensagens WHERE Destinatario='Felipe' LIMIT 50 ORDER BY Data DESC
  • 66. Calculando o custo de uma consulta Itens processados por consulta Tamanho médio Taxa de conversão Leituras com consistência eventual
  • 68. Destinatario Data Remetente Assunto IdMsg Felipe 2014-10-02 Bob Olá!… afed Felipe 2014-10-03 Alice RE: O ite… 3kf8 Alice 2014-09-28 Bob FW: Tudo… 9d2b Alice 2014-10-01 Carol Oi!... ct7r Separe os dados maiores Tabela Inbox Tabela Mensagens IdMsg Corpo 9d2b … 3kf8 … ct7r … afed … (Dados maiores das mensagens) (Metadado das mensagens, indexado por destinatário)
  • 69. Destinatario Data Remetente Assunto IdMsg Felipe 2014-10-02 Bob Olá!… afed Felipe 2014-10-03 Alice RE: O ite… 3kf8 Alice 2014-09-28 Bob FW: Tudo… 9d2b Alice 2014-10-01 Carol Oi!... ct7r Separe os dados maiores Tabela Inbox Tabela Mensagens IdMsg Corpo 9d2b … 3kf8 … ct7r … afed … Felipe 1. Consultar a inbox: 1 RCU (50 itens sequenciais com 128 bytes)
  • 70. Destinatario Data Remetente Assunto IdMsg Felipe 2014-10-02 Bob Olá!… afed Felipe 2014-10-03 Alice RE: O ite… 3kf8 Alice 2014-09-28 Bob FW: Tudo… 9d2b Alice 2014-10-01 Carol Oi!... ct7r Separe os dados maiores Tabela Inbox Tabela Mensagens IdMsg Corpo 9d2b … 3kf8 … ct7r … afed … Felipe 1. Consultar a Inbox: 1 RCU 2. BatchGetItem Mensagens: 1600 RCU (50 itens separados com 256 KB) (50 itens sequenciais com 128 bytes)
  • 71. Aplicativo de Mensagens: Escritas Tabela Mensagens Tabela Inbox Felipe PutItem { IdMsg: 123, Corpo: ... } PutItem { Destinatario: Matheus, Data: 2014-10-23, IdMsg: 123, ... }
  • 72. Lidando com falhas Tabela Mensagens Tabela Inbox Felipe PutItem { IdMsg: 123, Corpo: ... } PutItem { Destinatario: Matheus, Data: 2014-10-23, IdMsg: 123, ... }
  • 73. Escritas simplificadas Felipe PutItem { IdMsg: 123, Corpo: ..., Destinatario: Matheus, Remetente: Felipe, Data: 2014-10-23, ... } Inbox Índice Secundário Global (GSI) Tabela Mensagens
  • 74. Projeções do Índice Secundário
  • 75. Aplicativo Mensagens: Escritas Inbox Índice Global Secundário (GSI) Tabela Mensagens Felipe Outbox Índice Global Secundário (GSI)
  • 76. • Reduzir o tamanho dos itens um-para-muitos • Configure as projeções dos índices secundários Distribua itens grandes Consultar muitos itens grandes simultaneamente Inbox Messages
  • 77. Placar de jogo de rede social De-normalize os schemas Desenhe para tolerância a falhas
  • 78. Placar de jogo de rede social • Encontrar amigos jogando o mesmo jogo • Veja como você está, comparando aos seus amigos
  • 79. Placar de jogo de rede social Usuario MP Chuck 20 Alice 1000 Bob 470 Dave 850 Erin 580 Tabela Amigos Tabela MaioresPlacares Usuario Amigo Bob Alice Bob Chuck Alice Bob Alice Chuck Alice Erin
  • 80. Placar de jogo de rede social Usuario MP Chuck 20 Alice 1000 Bob 470 Dave 850 Erin 580 Tabela Amigos Tabela MaioresPlacares Usuario Amigo Bob Alice Bob Chuck Alice Bob Alice Chuck Alice Erin Alice
  • 81. Placar de jogo de rede social Usuario Placar Chuck 20 Alice 1000 Bob 470 Dave 850 Erin 580 Tabela Amigos Tabela MaioresPlacares Usuario Amigo Bob Alice Bob Chuck Alice Bob Alice Chuck Alice Erin 1. Query 2. BatchGetItem Alice
  • 82. Ineficiências no modelo de dados • Sempre traz todos os amigos – Alguns amigos, não jogam – Talvez esteja interessado somente nos top 10 • Operações de um item para cada amigo – Query custa 1 RCU para 4 KB de dados – GetItem arredonda cada item para 1RCU
  • 83. Placar de amigos melhorado: Leituras Usuario Amigo MP Bob Alice 1000 Bob Chuck 20 Alice Bob 470 Alice Chuck 20 Alice Erin 580 Usuario MP Chuck 20 Alice 1000 Bob 470 Dave 850 Erin 580 Tabela Tabela Amigos Tabela MaioresPlacares
  • 84. Placar de amigos melhorado: Leituras Usuari o Amigo MP Bob Alice 1000 Bob Chuck 20 Alice Bob 470 Alice Chuck 20 Alice Erin 580 Usuario MP Chuck 20 Alice 1000 Bob 470 Dave 850 Erin 580 Usuario MP Amigo Bob 20 Chuck Bob 1000 Alice Alice 20 Chuck Alice 470 Bob Alice 580 Erin Tabela Índice Local Secundário (LSI) Tabela PlacarAmigos Tabela MaioresPlacares
  • 85. Placar de amigos melhorado: Leituras Usuario Amigo MP Bob Alice 1000 Bob Chuck 20 Alice Bob 470 Alice Chuck 20 Alice Erin 580 Usuario MP Chuck 20 Alice 1000 Bob 470 Dave 850 Erin 580 Usuario MP Amigo Bob 20 Chuck Bob 1000 Alice Alice 20 Chuck Alice 470 Bob Alice 580 Erin Tabela Índice Local Secundário (LSI) Tabela PlacarAmigos Tabela MaioresPlacares Query FROM PlacarAmigos-Index WHERE Usuario=Alice, DESC, LIMIT 10Alice
  • 86. • Reduza o custo das consultas • Otimize a latência da consulta • Decisão custo de escrita vs custo leitura, desempenho De-normalize os schemas Desempenho de leitura importa mais que o custo de escrita PlacaresAmigos
  • 87. Usuario MP Chuck 30 Alice 1000 Bob 470 Dave 850 Erin 580 Placar de amigos melhorado: Escritas Usuario Amigo MP Bob Alice 1000 Bob Chuck 30 Alice Bob 470 Alice Chuck 30 Alice Erin 580 Tabela PlacaresAmigos Tabela MaioresPlacares 1. UpdateItem 2. UpdateItem(s) Chuck
  • 88. Usuario MP Chuck 30 Alice 1000 Bob 470 Dave 850 Erin 580 Quando algo de errado acontece Usuario Amigo MP Bob Alice 1000 Bob Chuck 30 Alice Bob 470 Alice Chuck 20 Alice Erin 580 Tabela PlacaresAmigos Tabela MaioresPlacares 1. UpdateItem 2. UpdateItem(s) Chuck
  • 89. Usuario MP Atualizando Chuck 20 Alice 1000 Bob 470 Dave 850 Erin 580 Planejando para falhas Usuario Amigo MP Bob Alice 1000 Bob Chuck 20 Alice Bob 470 Alice Chuck 20 Alice Erin 580 Tabela PlacaresAmigos Tabela MaioresPlacares true enquanto estiver atualizando o placar
  • 90. Usuario MP Atualizando Chuck 30 true Alice 1000 Bob 470 Dave 850 Erin 580 Planejando para falhas Usuario Amigo MP Bob Alice 1000 Bob Chuck 20 Alice Bob 470 Alice Chuck 20 Alice Erin 580 Tabela PlacaresAmigos Tabela MaioresPlacares 1. UpdateItem Chuck
  • 91. Usuario MP Atualizando Chuck 30 true Alice 1000 Bob 470 Dave 850 Erin 580 Planejando para falhas Usuario Amigo MP Bob Alice 1000 Bob Chuck 30 Alice Bob 470 Alice Chuck 20 Alice Erin 580 Tabela PlacaresAmigos Tabela MaioresPlacares Chuck 2. UpdateItem(s)
  • 92. Usuario MP Atualizando Chuck 30 true Alice 1000 Bob 470 Dave 850 Erin 580 Planejando para falhas Usuario Amigo MP Bob Alice 1000 Bob Chuck 30 Alice Bob 470 Alice Chuck 20 Alice Erin 580 Tabela PlacaresAmigos Tabela MaioresPlacares Chuck 3. GetItem
  • 93. Usuario MP A Chuck 30 true Alice 1000 Bob 470 Dave 850 Erin 580 Planejando para falhas Usuario Amigo MP Bob Alice 1000 Bob Chuck 30 Alice Bob 470 Alice Chuck 30 Alice Erin 580 Tabela PlacaresAmigos Tabela MaioresPlacares Chuck 4. UpdateItem(s)
  • 94. Usuario MP Atualizando Chuck 30 Alice 1000 Bob 470 Dave 850 Erin 580 Planejando para falhas Usuario Amigo MP Bob Alice 1000 Bob Chuck 30 Alice Bob 470 Alice Chuck 30 Alice Erin 580 Tabela PlacaresAmigos Tabela MaioresPlacares 5. UpdateItem Chuck
  • 95. Biblioteca de transações (cliente) PutItemRequest aceitarBob; PutItemRequest confirmarChuck; Transaction t = txManager.newTransaction(); t.putItem(aceitarBob); t.putItem(confirmarChuck); t.commit();
  • 96. Biblioteca de transações (cliente) Tabela Amigos Tabela Transacoes Tabela ImagensTransacao Cliente Transação Bob
  • 97. Biblioteca de transações (cliente) • Desenhada para casos de uso de baixa contenção • Custo das operações e latência são maiores do que escritas normais • Fácil de usar
  • 98. • Desenhe para tolerância a falhas, e que as escritas possam ser recuperadas • Espere escritas sobrepostas • Estude quando limpar as transações travadas • Biblioteca de transações pode te ajudar a começar Desenhe para tolerância a falhas Estiver escrevendo múltiplos itens ou tabelas
  • 101. Arquitetura Placar: DynamoDB Streams Seu aplicativo Kinesis Seu Aplicativo Tabela AmigoPlacares MaioresPlacares DynamoDB Stream Tabela MaioresPlacares
  • 102. Usuario MP Chuck 20 Alice 100 Tabela MaioresPlacares Planejando para falha Chuck Seq Usuario Velho Novo 1 Chuck 10 20 2 Alice 80 90 3 Alice 90 100 Stream MaioresPlacares
  • 103. Usuario MP Chuck 30 Alice 100 Tabela MaioresPlacares Planejando para falha Chuck Seq Usuario Antigo Novo 1 Chuck 10 20 2 Alice 80 90 3 Alice 90 100 Stream MaioresPlacares
  • 104. Usuario MP Chuck 30 Alice 100 Tabela MaioresPlacares Planejando para falha Chuck Seq Usuario Antigo Novo 1 Chuck 10 20 2 Alice 80 90 3 Alice 90 100 4 Chuck 20 30 Stream MaioresPlacares
  • 105. User H.S. Chuck 30 Alice 100 HighScores Table Planejando para falha Chuck Seq User Old New 1 Chuck 10 20 2 Alice 80 90 3 Alice 90 100 4 Chuck 20 30 HighScores Stream
  • 106. Usuario MP Chuck 30 Alice 100 Tabela MaioresPlacares Planejando para falha Usuari o Amigo MP Bob Chuck 20 Alice Chuck 20 Tabela AmigoPlacares Amigo Usuario Chuck Alice Chuck Bob Tabela Índice Secundário Global (GSI) Seq Usuario Antigo Novo 1 Chuck 10 20 2 Alice 80 90 3 Alice 90 100 4 Chuck 20 30 Stream MaioresPlacares Seu aplicativo Kinesis
  • 107. Usuario MP Chuck 30 Alice 100 Tabela MaioresPlacares Planejando para falha Usuario Amigo MP Bob Chuck 20 Alice Chuck 20 Tabela AmigoPlacares Amigo Usuario Chuck Alice Chuck Bob Tabela Índice Secundário Global (GSI) Seq Usuario Antigo Novo 1 Chuck 10 20 2 Alice 80 90 3 Alice 90 100 4 Chuck 20 30 Stream MaioresPlacares Seu aplicativo Kinesis
  • 108. Usuario MP Chuck 30 Alice 100 Tabela MaioresPlacares Planejando para falha Usuario Amigo MP Bob Chuck 30 Alice Chuck 30 Tabela AmigoPlacares Amigo Usuari o Chuck Alice Chuck Bob Tabela Índice Secundário Global (GSI) Seq Usuario Antigo Novo 1 Chuck 10 20 2 Alice 80 90 3 Alice 90 100 4 Chuck 20 30 Stream MaioresPlacares Seu aplicativo Kinesis
  • 109. Usuario MP Chuck 30 Alice 100 Tabela MaioresPlacares Planning for failure Usuari o Amigo MP Bob Chuck 30 Alice Chuck 30 Tabela AmigoPlacares Amigo Usuario Chuck Alice Chuck Bob Tabela Índice Secundário Global (GSI) Seq Usuario Antig o Novo 1 Chuck 10 20 2 Alice 80 90 3 Alice 90 100 4 Chuck 20 30 Stream MaioresPlacares Seu Aplicativo Kinesis Table de Progresso das Streams
  • 110. Propagação de escritas com DynamoDB Streams • Simplifique o gerenciamento de erros com escritas assíncronas Manter múltiplas tabelas ou fontes de dados sincronizadas
  • 111. Votação em tempo real Particionar itens de escrita intensa Desenhe para tolerância a falhas
  • 112. Votação Candidato A Vots: 20 Candidato B Vots: 30 Eleitor Tabela Votos
  • 113. Candidato A Votos: 21 Candidato B Votos: 30 Tabela Votos Votação UPDATE Votos SET Votos = Votos + 1 WHERE Id=“Candidato A”Eleitor (incremento atômico)
  • 114. Escalando com o Amazon DynamoDB Preciso escalar para a eleição Administrador (Você) Tabela Votos
  • 115. Escalando com o Amazon DynamoDB Administrador (Você) Provisionar 200.000 capacidades de escrita Partição 1 1000 WCU Partição K 1000 WCU Partição M 1000 WCU Partição N 1000 WCU Tabela Votos
  • 116. Gargalos ao escalar Candidato A Candidato B Eleitor Partição 1 1000 WCU Partição K 1000 WCU Partição M 1000 WCU Partição N 1000 WCU Tabela Votos
  • 117. Partição 1 1000 WCU Partição K 1000 WCU Partição M 1000 WCU Partição N 1000 WCU Tabela Votos Candidato A Candidato B Gargalos ao escalar Eleitores
  • 118. Particionando escritas Candidato A Candidato A_2 Candidato A_1 Candidato A_3 Candidato A_4 Candidato A_7 CandidatoA_6 Candidato A_8 Candidato A_5
  • 119. Particionando escritas Candidato A_2 Candidato B_1 Candidato B_2 Candidato B_3 Candidato B_5 Candidato B_4 Candidato B_7 Candidato B_6 Candidato A_1 Candidato A_3 Candidato A_4 Candidato A_7 Candidato B_8 Candidato A_6 Candidato A_8 Candidato A_5 Eleitor Tabela Votos
  • 120. Particionando escritas Candidato A_2 Candidato B_1 Candidato B_2 Candidato B_3 Candidato B_5 Candidato B_4 Candidato B_7 Candidato B_6 Candidato A_1 Candidato A_3 Candidato A_4 Candidato A_7 Candidato B_8 UpdateItem: “CandidatoA_” + rand(0, 10) ADD 1 to Votos Candidato A_6 Candidato A_8 Candidato A_5 Eleitor Votes Table
  • 121. Tabela Votos Agregando partições Candidato A_2 Candidato B_1 Candidato B_2 Candidato B_3 Candidato B_5 Candidato B_4 Candidato B_7 Candidato B_6 Candidato A_1 Candidato A_3 Candidato A_4 Candidato A_5 Candidato A_6 Candidato A_8 Candidato A_7 Candidato B_8 Processo Periódico Candidato A Total: 2.5M 1. Somar 2. Armazenar Eleitor
  • 122. • Decisão custo leitura vs escalabilidade na escrita, desempenho • Considere o desempenho por chave-valor e por partição Particione chaves-valor com escrita intensa Seu workload de escrita não é horizontalmente escalável
  • 123. Requerimentos para votação • Permitir cada pessoa votar somente uma vez • Não é permitido alterar os votos • Agregação em tempo real • Análises dos eleitors, demografia
  • 124. Exatidão na votação Usuario Candidato Data Alice A 2013-10-02 Bob B 2013-10-02 Eve B 2013-10-02 Chuck A 2013-10-02 Tabela UsuarioVotos Eleitor
  • 125. Exatidão na votação Usuario Candidato Data Alice A 2013-10-02 Bob B 2013-10-02 Eve B 2013-10-02 Chuck A 2013-10-02 Tabela UsuarioVotos Segmento Votos A_1 23 B_2 12 B_1 14 A_2 25 Tabela VotosAgregados Eleitor 1. Gravar voto, de-duplicar, re-tentar 2. Incrementar contador do candidato
  • 126. Exatidão na agregação? Usuario Candidato Data Alice A 2013-10-02 Bob B 2013-10-02 Eve B 2013-10-02 Chuck A 2013-10-02 Tabela CandidatoVotos Segmento Votos A_1 23 B_2 12 B_1 14 A_2 25 Tabela VotosAgregados Eleitor
  • 127. Arquitetura de votação em tempo real Tabela VotosAgregados Eleitores Tabela UsuarioVotos Aplicativo Votação
  • 128. Arquitetura de votação em tempo real (melhorada) Tabela VotosAgregados Amazon Redshift Amazon EMR Seu aplicativo Kinesis Eleitores Tabela UsuarioVotos Aplicativo Votação UsuarioVotos DynamoDB Stream
  • 129. Arquitetura de votação em tempo real Tabela VotosAgregados Amazon Redshift Amazon EMR Seu aplicativo Kinesis Eleitores Tabela UsuarioVotosAplicativo Votação UsuarioVotos DynamoDB Stream
  • 130. Arquitetura de votação em tempo real Tabela VotosAgregados Amazon Redshift Amazon EMR Seu aplicativo Kinesis Eleitores Tabela UsuarioVotosAplicativo Votação UsuarioVotos DynamoDB Stream
  • 131. Arquitetura de votação em tempo real Tabela VotosAgregados Amazon Redshift Amazon EMR Seu aplicativo Kinesis Eleitores Tabela UsuarioVotosAplicativo Votação UsuarioVotos DynamoDB Stream
  • 132. Arquitetura de votação em tempo real Tabela VotosAgregados Amazon Redshift Amazon EMR Seu aplicativo Kinesis Eleitores Tabela UsuarioVotosAplicativo Votação UsuarioVotos DynamoDB Stream
  • 133. Análises com DynamoDB Streams • Colete e de-duplique dados no DynamoDB • Agregue dados em memória e salve periodicamente Executar agregação e análise em tempo real
  • 135. Catálogo de Produtos Avalie os requerimentos de desempenho por chave-valor Cacheie itens de leitura intensa
  • 136. Jogo online multiplayer Converta consultas filtradas em consultas indexadas Estado + Data
  • 137. Aplicativo de mensagem Distribua itens grandes Inbox Mensagens
  • 138. Placar de jogo de rede social De-normalize dados para otimizar consultas Desenhe para tolerância a falhas Propague escritas com DynamoDB Streams PlacaresAmigos
  • 139. Votação em tempo real Particione itens de escrita intensa Execute análises com DynamoDB Streams