Стоимость чтения и записи DynamoDB для 8 миллионов записей в час и копирования в Redshift - PullRequest
0 голосов
/ 22 сентября 2019

Может кто-нибудь, пожалуйста, помогите мне в этом расчете.Это способ расчета цены?

У нас есть поток, который создает в среднем 8 миллионов записей в час (2500 записей в секунду), и мы хотим вставить его в DynamoDB, используя aws Lambda.

Размер каждой записи не может превышать 450 байт.Я понимаю, что для менее чем 1 КБ, Dynamodb занимает 1 Емкость записи.Таким образом, для 2500 записей в секунду нам нужно 2500 единиц емкости записи.

Данные вставляются в DynamoDB в режиме реального времени.Для анализа нам нужны те же данные, что и в Redshift.Таким образом, каждые 15 минут нам нужно синхронизировать таблицу Dynamodb с таблицей Redshift.Бизнес хочет делать аналитику только на кластере Redshift.

Чтобы скопировать данные из DynamoDB в красное смещение с помощью команды redshift COPY за 15 минут, мне потребуется примерно 10000 единиц емкости считывания.

Для этого это будет стоить около USD2400 / месяц


Подробнее

Существующий architecutre

S3 => Lambda => Redshift : Это работает нормально до лямбды, когда этоприходит к красному смещению, рабочие места попадают в очередь, а другие рабочие места задерживаются.Поэтому мы обратились в службу технической поддержки Amazon: они четко отмечают, что для внедрения в реальном времени или почти в реальном времени Redshift не является хорошим выбором.Вместо Lambda мы используем EMR clusster, создали файл манифеста (добавив несколько файлов) и сделали копию красного смещения - Тем не менее, результат был удовлетворен.Бизнес Динт хочет увеличить кластер прямо сейчас.

Предлагаемая архитектура

S3 => Lambda => DynamoDB (как только файл Landed) => Каждые 15 минут => Запрос данных из БД Dynamo иСохранить в S3 => Redshift

Бизнес спрашивает, сколько стоит. Каждые 15 минут мы запрашиваем данные Dynamodb с количеством записей 4 миллиона.Сохраните его в S3. Сделайте копию Redshfit с этим S3.

Если я задаю единицу чтения как 10 000 - может ли чтение из Dynamodb (4,5 миллиона) завершиться за 7 минут

10000 * 60 (секунд) = 6 000 000 записей

6,00 000 * 7 минут = 4,2 миллиона

Мой расчет составляет

7 минут для чтения из базы данных Dynamo

3 минуты, чтобы записать в S3

3 минуты, чтобы сделать красное смещение COPY

Короче говоря, Бизнесу необходимо, чтобы данные были в Dynamodb, как только файл попадет в S3.Они могут подождать 15 минут, чтобы отразить в Redshift.

Любые другие предложения по этому вопросу

1 Ответ

1 голос
/ 25 сентября 2019

Похоже, у вас есть два требования:

  • Загрузка данных из Amazon S3 в DynamoDB
  • Загрузка данных из Amazon S3 в Amazon Redshift

S3 - DynamoDB

Похоже, что у вас все работает нормально, используя Amazon S3 для запуска функции AWS Lambda, которая затем загружает данные в Amazon S3.

S3 - Redshift

нет причин копировать данные из DynamoDB в Redshift , если это точно те же данные, которые были первоначально загружены из S3.Просто используйте те же файлы для загрузки данных в Redshift, но делайте это в виде пакета через равные промежутки времени.

Лучший способ загрузить данные в Amazon Redshift - это навалом с помощью команды COPY ,Поэтому я бы порекомендовал:

  • Использовать лямбда-функцию (потенциально ту же, что и для DynamoDB), чтобы сопоставить список всех входящих файлов в Amazon S3.Вы можете сохранить это в таблице DynamoDB (или в другом месте по вашему выбору).
  • Используйте Amazon CloudWatch Events , чтобы запускать функцию AWS Lambda через регулярные интервалы (каждые 15 минут)который будет:
    • Создать файл манифеста всех файлов, полученных с момента последней загрузки
    • Запустить команду COPY в Redshift, , указывая на файл манифеста
    • Пометить эти файлы в DynamoDB как обработанные (чтобы они не были включены в последующие исполнения)

Преимущества этого метода:

  • Разделение двух процессов, что упрощает их обслуживание
  • Нет необходимости читать данные из DynamoDB, что снизит стоимость единицы считываемой емкости
  • Вы можете варьироватьчастота загрузки в Redshift по желанию
...