DynamoDB Flashcards
O que é o DynamoDb?
É um banco de dados NoSQL, serverless, de alta performance, capaz de receber milhões de requisições por segundo com uma baixa latência
Descreva como o DynamoDb funciona
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
O que são Primary Keys no DynamoDb?
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.
Como funciona o Throughput do DynamoDB?
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.
O que são DynamoDB Write Capacity Units?
É 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.
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?
Será necessário 2*10 = 20WCU
Será necessário 6*5=30WCU
Qual a diferença entre Strongly Consistent Read e Eventually Consistent Read do DynamoDB?
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.
O que são DynamoDB Read Capacity Units?
É 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.
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?
Será necessário 10*(4/4) = 10RCU
Será necessário (16/2) * (12/4) = 24 RCU
O que são DynamoDb Partitions Internal? Como ficam o WCU e RCU neste caso? Que tipo de problema podemos ter?
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)
Como aumentar a eficiência de escritas no DynamoDb? Qual cuidado importante a ser tomado?
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)
Como melhorar a performance de leitura do DynamoDb?
É 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.
Quando se realiza uma query no DynamoDb, é possível realizar a operação FilterExpression para filtrar os resultados. Onde esta operação é realizada?
A operação FilterExpression é realizada no lado do cliente
Como é realizada query no DynamoDb?
É 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.
Quais são as duas formas de consultas no DynamoDb?
Através de SCAN (full table, baseado em atributos) ou Query (baseada no PartitionKey + optional sort Key).