Открыть сервис

Amazon DynamoDB

Amazon DynamoDB — это полностью управляемая NoSQL база данных класса «ключ-значение» и документоориентированная база данных, предоставляемая в составе облачной платформы Amazon Web Services (AWS). DynamoDB обеспечивает предсказуемую производительность с задержками в миллисекунды при любых масштабах нагрузки, автоматическое масштабирование и высокую доступность за счёт репликации данных в нескольких зонах доступности. Сервис не требует управления серверами, установки обновлений или настройки кластеров — все административные задачи берёт на себя провайдер.

История

DynamoDB была запущена в 2012 году как ответ на внутреннюю потребность Amazon в высокопроизводительной и отказоустойчивой системе хранения. В 2007 году инженеры Amazon опубликовали статью «Dynamo: Amazon’s Highly Available Key-value Store», в которой описали архитектуру распределённой системы, лежащей в основе корзины покупок Amazon.com. Эта система, известная как Amazon Dynamo, использовала принципы децентрализованного хэширования (consistent hashing) и репликации с возможностью настройки согласованности. Однако DynamoDB не является прямым потомком Dynamo: она представляет собой полностью переработанный сервис, адаптированный для облачного использования и поддерживающий как ключ-значение, так и документные модели данных.

Первоначально DynamoDB поддерживала только первичный ключ (partition key) и вторичные индексы. В 2013 году были добавлены глобальные вторичные индексы, позволяющие выполнять запросы по любому атрибуту. В 2014 году появилась поддержка транзакций (ACID) на уровне отдельных элементов. В последующие годы сервис получил потоковую передачу изменений (DynamoDB Streams), возможность работы с таблицами из нескольких регионов (Global Tables) и интеграцию с сервисами машинного обучения AWS.

Архитектура и принципы работы

DynamoDB основана на распределённой архитектуре с автоматическим шардированием. Каждая таблица делится на партиции (шарды) на основе значения хэша от ключа партиции. Данные распределяются равномерно по партициям, что позволяет линейно масштабировать пропускную способность при увеличении числа запросов.

Ключи и индексы

Основой доступа к данным является первичный ключ, который может быть двух типов:

Для гибких запросов DynamoDB поддерживает вторичные индексы:

Модель согласованности

DynamoDB предлагает два уровня согласованности чтения:

Автомасштабирование

Сервис поддерживает два режима управления пропускной способностью:

В 2018 году появилась функция Auto Scaling, автоматически корректирующая provisioned capacity на основе загрузки.

Основные возможности

DynamoDB Streams

Поток изменений таблицы, который записывает события вставки, обновления и удаления элементов. Потоки могут быть использованы для репликации данных в другие сервисы AWS (Lambda, Kinesis, SQS) или для синхронизации с Elasticsearch.

Global Tables

Функция, позволяющая автоматически реплицировать таблицы в несколько регионов AWS. Данные становятся доступными для чтения и записи из любого региона с задержкой менее секунды. Конфликты при одновременной записи в разных регионах разрешаются по принципу «последняя запись побеждает» (last-writer-wins).

Транзакции

Начиная с 2018 года DynamoDB поддерживает транзакции ACID (атомарность, согласованность, изоляция, долговечность) в рамках одной таблицы или между несколькими таблицами. Транзакции позволяют выполнять несколько операций чтения/записи как единое целое.

Time to Live (TTL)

Автоматическое удаление элементов по истечении заданного времени. Используется для управления сроком жизни данных, например, сессий пользователей или логов.

PartiQL

Совместимый с SQL язык запросов, позволяющий выполнять операции SELECT, INSERT, UPDATE, DELETE над данными DynamoDB. PartiQL не поддерживает JOIN и сложные агрегации, но упрощает работу для разработчиков, знакомых с SQL.

Модели данных

DynamoDB поддерживает две основные модели:

Типы данных включают: строки, числа, бинарные данные, наборы (строк, чисел, бинарных), булевы значения, null, списки и отображения (maps). Максимальный размер одного элемента — 400 КБ.

Применение

DynamoDB широко используется в веб-приложениях, мобильных сервисах, игровой индустрии, Интернете вещей (IoT) и рекламных платформах. Типичные сценарии:

Производительность и ограничения

DynamoDB гарантирует задержку на чтение/запись менее 10 миллисекунд при 99,9% запросов. Максимальная пропускная способность одной таблицы в режиме provisioned — 40 000 RCU и 40 000 WCU по умолчанию (может быть увеличена по запросу). В режиме on-demand ограничений нет.

Основные ограничения:

Безопасность

DynamoDB интегрирована с AWS Identity and Access Management (IAM) для управления доступом. Поддерживается шифрование данных в покое (AES-256) и при передаче (TLS). Ключи шифрования могут управляться AWS или пользователем через AWS Key Management Service (KMS). Также доступны VPC Endpoints для изоляции трафика от публичного интернета.

Стоимость

Ценообразование DynamoDB основано на следующих компонентах:

Для снижения затрат рекомендуется использовать TTL для автоматического удаления устаревших данных и резервирование пропускной способности (Reserved Capacity).

Критика

Несмотря на высокую производительность, DynamoDB имеет ряд недостатков:

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →