DynamoDB: Streams, Replications, Session Cache, DAX, Optimistic Lock Flashcards
DynamoDB Stream позволяет …
отлавливать (capture) события (events) изменения данных в DynamoDB таблице
DynamoDB Stream Record может хранить (на выбор)
KEYS_ONLY
NEW_IMAGE
OLD_IMAGE
NEW_AND_OLD_IMAGE
IMAGE = DynamoDB item
Кто может читать данные из DynamoDB Stream?
- можно отправлять в
Kinesis Data Stream
-
Lambda
может читать их (через Event Source Mapper) - Приложение, использующее
Kinesis Client Library
, может читать их
Сколько составляет retention DynamoDB Stream?
Что, если нужно больше?
Retention event’ов в DynamoDB Stream составляет 24 часа.
Если нужно хранить их дольше, то их придётся слать например в Kinesis.
В чём отличие и сходство DynamoDB Stream и Kinesis Data Stream?
DynamoDB Stream имеет схожее устройство с Kinesis Data Stream.
DynamoDB Stream тоже состоит из Шардов.
В отличие от KDS, DynamoDB Stream - это managed сервис.
Так что количество шардов регулируется самим AWS’ом автоматически.
Что такое Retroactive? Как это связано с DynamoDB Stream?
Если активировать DynamoDB Stream для DynamoDB таблицы,
которая уже имеет записи,
то эти записи НЕ попадут в Stream.
DynamoDB Stream is NOT retroactive
Что такое Global Table в DynamoDB?
На что похоже?
Какие есть pre-requisites для активации этой фичи?
DynamoDB Global Table
- фича позволяет реплицировать DynamoDB таблицу по разным регионам.
- Реплики автоматически синхронизируют (propagate) данные между собой.
Сама идея репликации table’ов похожа на S3 Cross-Region-Replication.
Чтобы активировать DynamoDB Global Table, нужно сначала активировать DynamoDB Stream.
Какие альтернативы DynamoDB можно использовать для хранения сессии в кэше?
А какие нельзя? Почему?
-
ElastiCache
- in-memory Key-Value cache store -
DynamoDB
- serverless Key-Value cache store -
EFS
- file-system
Нельзя EBS и InstanceStore, т.к. они НЕ shared между EC2 instancе’ами
Что такое DAX?
На основе чего он устроен?
Какую проблему решает?
DynamoDB Accelerator (”DAX”) - фича, которая позволяет повысить скорость чтения из таблиц.
Работает на основе обыкновенного КЭШирования.
DAX решает проблему “Hot Key”, Throttling
Какие изменения в коде нужно внести, чтобы начать использовать DAX?
Какие API операции у него есть?
Чтобы начать использовать DAX, НЕ нужно изменять код приложения.
Он совместим с существующими API операциями.
Из чего состоит DAX кластер?
Сколько штук?
Как их настраивать?
- DAX кластер состоит из узлов.
- Максимум
10 DAX nodes
- Можно иметь DAX узлы в разных AZ (минимум 3 рекомендуют)
- Максимум
Можно ли шифровать данные в DAX?
Также как и в DynamoDB - Encryption at rest через KMS
Какая есть альтернатива DAX?
Когда использовать что?
-
DAX
для простых запросов (Query, Scan) и индивидуальных item’ов -
ElastiCache
для больших результатов агрегирующих запросов
Можно комбинировать DAX и ElastiCache, используя их сильные стороны.
В чём суть Optimistic Locking в DynamoDB?
Какую проблему это решает?
Что это напоминает?
Выполнить операцию Update / Delete,
только если item НЕ изменился перед выполнением операции.
Решает проблему потери операции при параллельном выполнении двух операций.
Напоминает оптимистичная блокировка SQL БД
Напоминает CAS принцип в многопоточности
Как реализовать Optimistic Locking в DynamoDB?
- Выбирается атрибут, который играет роль
version number
- Conditional Write по этому атрибуту (модифицировать запись только если значение версии НЕ изменилось)