агрегирование данных в реальном времени - потоки Dynamodb против потоков данных Kinesis - PullRequest
0 голосов
/ 03 августа 2020

У меня есть следующий вариант использования:

Пользователи отвечают на опрос, ставя «палец вверх» или «против». Опрос продлится всего несколько секунд. Ожидается, что около 30 тысяч пользователей ответят на опрос в течение 10-15 секунд. Общее количество должно отображаться в режиме реального времени. Скорость важнее согласованности данных.

Подход № 1 Храните данные каждого клиента в виде отдельной записи в таблице Dynamodb. Включите потоки для этой таблицы. Lambda может агрегировать и сохранять счет в отдельной записи. Эта запись будет обновляться при каждом вызове лямбда-выражения.

Плюсы: Если размер пакета равен 1, можно достичь реального времени. Минусы: для 30 000 пользователей потребуется 30 000 лямбда-вызовов. Обновление агрегированных данных в той же записи может привести к проблеме с горячим разделом в Dynamodb.

Подход № 2 Потоковая передача данных с использованием потоков данных Kinesis. Пакетная обработка данных (каждую 1 секунду) с использованием лямбда. Эта лямбда объединяет записи и обновляет запись счетчика в Dynamodb.

Плюсы: Меньшее количество вызовов лямбда. В Dynamodb нет проблем с горячим разделом. Минусы: при пакетной обработке невозможно достичь абсолютного реального времени. Пользователи могут отвечать на опрос несколько раз. Данные уровня UserId не сохраняются.

Требуются предложения по вышеуказанным подходам или любой другой альтернативный подход для достижения агрегации в реальном времени для вышеуказанного варианта использования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...