Базы данных

DynamoDB: serverless NoSQL от Amazon

Amazon Prime Day 2023: 375 миллионов товаров за 48 часов, 105,000 заказов в секунду в пике. Вся корзина, сессии, inventory - на DynamoDB. Ни один DBA не настраивал индексы ночью, никаких failover проблем - просто работало при любой нагрузке.

  • **Amazon**: все корзины и сессии на DynamoDB - 99.999% availability SLA, <10ms P99
  • **Lyft**: DynamoDB для real-time matching водителей - 20 млн поездок в день с предсказуемым latency
  • **Airbnb**: DynamoDB Streams + Lambda для event-driven обработки бронирований

Модель данных DynamoDB

DynamoDB - управляемый key-value + document store от Amazon. Каждый элемент идентифицируется composite key: partition key (PK) + опциональный sort key (SK). Схема гибкая: разные items могут иметь разные атрибуты. Amazon проектировал DynamoDB под собственные требования: корзина покупок Prime Day должна работать при любой нагрузке с single-digit millisecond latency.

DynamoDB гарантирует <10ms P99 latency при любой нагрузке - это SLA, а не benchmark. Достигается через автоматическое шардирование, SSD storage, и DAX (DynamoDB Accelerator - in-memory cache).

Что делает DynamoDB с схемой таблицы?

Global и Local Secondary Indexes

DynamoDB поддерживает только запросы по PK. Для поиска по другим атрибутам нужны индексы. LSI - альтернативный sort key для той же partition (создаётся при создании таблицы). GSI - полностью другой PK+SK, создаёт отдельную копию данных (можно добавить позже).

GSI Overloading: в одном GSI хранить данные разных типов через prefix (STATUS#pending, CATEGORY#electronics). Вместо 5 GSI под разные запросы - один универсальный GSI.

Ключевое отличие GSI от LSI в DynamoDB?

Режимы мощности: Provisioned и On-Demand

DynamoDB измеряет throughput в RCU и WCU. 1 RCU = 1 strongly consistent read до 4KB. 1 WCU = 1 write до 1KB. Provisioned - резервируешь заранее, платишь за зарезервированное. On-Demand - платишь за фактические запросы.

ПараметрProvisionedOn-Demand
СтоимостьДешевле при стабильной нагрузкеДороже, но нет платы за idle
МасштабированиеAuto Scaling (медленное)Мгновенное, автоматическое
Подходит дляПредсказуемый трафикСпайки, новые продукты, dev
РискThrottling при превышенииНеожиданные счета при DDoS

Duolingo экономит 75% на DynamoDB используя Provisioned + Reserved Capacity (предоплата на год). Для startup с непредсказуемым трафиком On-Demand + Cost Anomaly Detection безопаснее.

Приложение с пиковой нагрузкой 10x в Black Friday, в остальное время - стабильная нагрузка. Какой режим?

Single-Table Design

Single-table design - паттерн хранения всех типов сущностей в одной таблице. Один запрос возвращает все нужные данные без JOIN. DynamoDB не поддерживает JOIN - связанные данные должны быть доступны по одному PK.

Главное преимущество single-table design в DynamoDB?

DynamoDB Streams и Event-Driven Architecture

DynamoDB Streams - ordered лог всех изменений (INSERT, MODIFY, REMOVE). Каждое изменение доступно 24 часа. Lambda триггеры на stream реализуют event-driven архитектуру без polling.

Kinesis Data Streams - альтернатива для сложных сценариев: 7 дней retention (vs 24ч), множество consumers, replay. DynamoDB Streams идеален для Lambda триггеров. Kinesis - для аналитики и сложного stream processing.

DynamoDB подходит для любых workload и всегда дешевле самоуправляемой БД

DynamoDB дорог при read-heavy аналитике (каждый RCU стоит деньги), плохо подходит для ad-hoc queries. На больших объёмах self-managed PostgreSQL часто дешевле.

DynamoDB оптимален для known access patterns, serverless архитектур, и когда operational overhead важнее стоимости. Для аналитики и OLAP лучше Redshift или ClickHouse.

DynamoDB Streams хранит события 24 часа. Lambda не справляется с нагрузкой. Что произойдёт?

Ключевые идеи

  • **PK + SK**: partition key определяет узел, sort key - порядок; все запросы обязаны содержать PK
  • **GSI**: отдельная копия с другим PK (eventual consistency, добавляется в любой момент); LSI - альтернативный SK, только при создании таблицы
  • **Single-table design**: одна таблица для всех сущностей = один запрос для связанных данных, но сложнее в разработке

Связанные темы

DynamoDB воплощает принципы из нескольких областей:

  • CAP теорема — DynamoDB - AP система с настраиваемой consistency
  • Шардинг — DynamoDB автоматически шардирует по partition key
  • Кеширование — DAX добавляет in-memory cache перед DynamoDB

Вопросы для размышления

  • Когда DynamoDB предпочтительнее PostgreSQL на RDS несмотря на более высокую стоимость?
  • Как проектировать single-table schema для системы User, Post, Comment, Like?
  • DynamoDB Streams + Lambda vs Kafka + Kafka Streams: когда что выбрать?

Связанные уроки

  • dist-15-consistent-hashing
DynamoDB: serverless NoSQL от Amazon

0

1

Войти