O documento discute estratégias para modelagem de dados no DynamoDB para diferentes casos de uso, incluindo um catálogo de produtos, jogo online multiplayer e aplicativo de mensagens. Exemplos mostram como distribuir dados em partições, usar filtros de consulta para melhorar desempenho e armazenar itens grandes para reduzir custos de transferência de dados.
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)
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
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
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)
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
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
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)
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
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
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
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
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