DynamoDB Flashcards

1
Q

O que é o DynamoDb?

A

É um banco de dados NoSQL, serverless, de alta performance, capaz de receber milhões de requisições por segundo com uma baixa latência

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Descreva como o DynamoDb funciona

A

DynamoDB é formado por tabelas, com chaves primárias. Cada tabela pode ter um número infinito de items (rows) com atributos.

Cada item pode conter até 400KB.

Os tipos de dados suportados são:

  • Scalar Types: String, number, binary, boolean, null
  • Document Types: List, Map
  • Set Types: String Set, Number Set, Binary Set
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

O que são Primary Keys no DynamoDb?

A

Precisão ser únicas para cada item. As melhores são as que possuem maior cardinalidade.

Uma opção é utilizar HASH, baseado em atributos das tabelas (user_id ou name + idade).

Outra opção é a utilização de uma Partition Key + Sort Key, onde a combinação precisa ser única. Neste caso os dados são agrupados pela Partition Key.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Como funciona o Throughput do DynamoDB?

A

A tabela precisa ser provisionada com read and write capacity units.
Read Capacity Units (RCU) e Write Capacity Units.
É possível habilitar auto-scaling para o throughput atender a demanda.

Devo a isso, é aconselhado implementar exponential back-off retry nas requisições.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

O que são DynamoDB Write Capacity Units?

A

É o throughput de escrita no DynamoDB. Uma unidade de WCU representa uma escrita por segundo de um item de 1KB. Caso seja maior, será necessário mais WCU.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Quantos WCU são necessários no DynamoDb caso tenhamos a escrita de 10 objetos por segundo de 2KB cada? E 6 objetos por segundo de 4.5KB?

A

Será necessário 2*10 = 20WCU

Será necessário 6*5=30WCU

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Qual a diferença entre Strongly Consistent Read e Eventually Consistent Read do DynamoDB?

A

São modos de leitura do DynamoDB.

No caso do Strongly Consitent Read é forçado que as operações de leitura estejam sempre up to date com as de escritas (não tem defasagem, nem mesmo entre as replicas do DynamoDB).

No caso do Eventyally Consisntent Read, pode haver uma latência entre a leitura e o resultado de alguma escrita recente, até o dado ficar up to date para todas as replicações.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

O que são DynamoDB Read Capacity Units?

A

É o throughput de leitura no DynamoDB. Uma unidade de RCU representa uma leitura por segundo - para stronglt consistent read, ou duas leituras para eventually consistent reads de um item de 4KB.

Caso seja maior, será necessário mais RCU.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Quantos RCU são necessários para 10 strongly consistent reads por segundo de 4KB cada.

E para 16 eventually consistent reads por segundo de 12KB cada?

A

Será necessário 10*(4/4) = 10RCU

Será necessário (16/2) * (12/4) = 24 RCU

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

O que são DynamoDb Partitions Internal? Como ficam o WCU e RCU neste caso? Que tipo de problema podemos ter?

A

São partições do DynamoDb para dividir os dados.

WCU e RCU são divididos entre as partições. Ex: temos 100 WCU e 100 RCU e temos 10 partições. Teremos então 10WCU e 10 RCU por partição.

Caso uma partição seja muito mais acessada que as outras, o consumo de WCU e RCU pode ficar desbalanceado e gerar ProvisionedThroughtputExceedExceptions. Como solução, utilizar exponential back-off, distribuir as partições da melhor forma e usar DAX (DynamoDB Accelerator)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Como aumentar a eficiência de escritas no DynamoDb? Qual cuidado importante a ser tomado?

A

Basta utilizar a API BatchWriteItem. É possível executar até 25 PutItem e/ou DeleteItem em uma única chamada.

Todas essas operações são realizadas em paralelo nativamente. Como essas operações são realizadas em uma única chamada, há também uma redução de latência na comunicação.

Caso parte do batch falhe, é responsabilidade do desenvolvedor implementar auto retry (com exponential back-off algorithm)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Como melhorar a performance de leitura do DynamoDb?

A

É possível utilizar ProjectionExpression, para especificar os atributos que serão lidos em vez de retornar todos os atributos do item.

Também é possível utilizar a operação BatchGetItem para realizar a leitura de até 100 itens, com até 16MB de dado. A operação de batch já é paralelizada nativamente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Quando se realiza uma query no DynamoDb, é possível realizar a operação FilterExpression para filtrar os resultados. Onde esta operação é realizada?

A

A operação FilterExpression é realizada no lado do cliente

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Como é realizada query no DynamoDb?

A

É realizada baseada em PartitionKey e SortKey (optional).

Além disso também é possível realizar FIlterExpression, porém esta operação é feito no lado do cliente e não do servidor.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Quais são as duas formas de consultas no DynamoDb?

A

Através de SCAN (full table, baseado em atributos) ou Query (baseada no PartitionKey + optional sort Key).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

O que é Global Secondary Index (GSI) do DynamoDb?

A

É uma forma de criar uma tabela secundária com um index (Partition Key e Sort Key) diferente da tabela principal.

17
Q

Que tipo de problema podemos ter utilizando GSI (Global Secondary Index) do DynamoDb?

A

É possível que esteja mal configurado o WCU da GSI, causando throttling na tabela secundária do GSI, quando ocorrer escrita na tabela principal. Isso irá fazer com que a tabela principal também lance exceções para as escritas.

18
Q

Como é possível otimizar consultas no DynamoDb?

A

É possível otimizar as consultas através de Local Seconday Index (LSI) ou Global Secondary Index (GSI).

19
Q

O que é Local Secondary Index (LSI) no DynamoDb?

A

É uma forma de adicionar um atributo, também ordenado, junto ao Partition Key, para ser possível realizar queries eficientes através deste atributo também.

É possível criar LSI apenas no momento de criação da tabela. É possível criar até 5 LSI por tabela.

20
Q

Como é a concorrência no DynamoDb?

A

É Optimistic locking / concurrency database. Você pode garantir que um item não mudou antes de alterá-lo. (Conditional Update / Delete)

21
Q

O que é DAX DynamoDb? O que ele resolve?

A

DAX é DynamoDb Accelerator. É um cache para o DynamoDb, com latência super baixa para reads & queries.

Resolve o problema de Hot Key, com muitas leituras, reduzindo a quantidade de RCU necessárias.

22
Q

O que é DynamoDb Streams?

A

É uma forma de iniciar eventos através de alterações (Create, update, delete) no DynamoDb, trigando funções lambda por exemplo para reagir a essas alterações.

Ex: envio de e-mail para um novo usuário cadastrado.

23
Q

Como funciona DynamoDb TTL?

A

DynamoDb TTL é o tempo de vida de um dado. É utilizado para deletar itens após o seu tempo de vida expirar. É importante ressaltar que essas operações não consomem WCU nem RCU.

24
Q

Quais são as formas de escritas no DynamoDb?

A

É possível utilizar o modo standard e o modo transactional.

25
Q

É necessário garantir que todos os itens foram criados e atualizados no DynamoDb. Qual tipo de escrita deve ser utilizado?

A

deve ser utilizado o modo de escrita transactional. Nele é possível realizar criação, escrita e delete de vários itens em diferentes tabelas ao mesmo tempo. Ou todas tem sucesso ou nenhuma é commitada.

Consome 2x WCU. O nome da API é TransactWriteItems / TransactGetItems

26
Q

Quantos WCU são necessários para escrever 3 items, de 5KB cada, por segundo, utilizando o modo Transactional Capacity Computations no DynamoDb?

A

=[5 KB / 1KB per WCU] * 2 (cost of transactional) * 3 (# writes per sec) = 30 WCU

27
Q

Quantos RCU são necessários para ler 5 items, de 5KB cada, por segundo, utilizando o modo Transactional Capacity Computations no DynamoDb?

A

=[5KB / 4KB per RCU] * 2 (cost of transactional) * 5 (# per sec)
= 2 (high celling) * 2 * 5
= 20 RCU

28
Q

Quais ferramentas posso utilizar para criar um cache de sessão?

A

DynamoDb (serverless), ElastiCache (in memory), EFS (EFS must be attached to EC2 instances as a network drive).

S3 can be used, but not for small objects (higher latency)

29
Q

Como posso dar acesso a um usuário de aplicação web direto a tabela do DynamoDb?

A

É possível realizar sua autenticação Web Identify Federation (google, Facebook, Cognito,…).

Em sequência, associar IAM role a esses usuários com a condição de limitar o acessoa a API no DynamoDb. Esse limite é feito no nível de itens e atributos, permitindo o usuário ver, por exemplo, somente as linhas com o seu user-id, e somente alguns atributos específicos.

30
Q

Como você pode selecionar os atributos que quer no retorno da API GetItem DynamoDb CLI?

A

Utilizando ProjectionExpression