Правильный способ сделать поиск данных DynamoDB в Афине? - PullRequest
0 голосов
/ 18 октября 2018

Мне нужно иметь медленно меняющийся AWS DynamoDb, периодически сбрасываемый на S3, для запроса к Athena.Необходимо убедиться, что данные, доступные для Афины, не сильно отстают от данных, доступных на DynamoDb (максимальное отставание в 1 час)

Мне известны следующие два подхода:

  1. Использование EMR (из конвейера данных) для экспорта всего DynamoDb

    Преимущество этого подхода заключается в том, что при использовании единственного сценария EMR (запускаемого ежечасно) сжатые файлы Parquet, доступные для прямого поискана Афине, можно сбросить на S3.Однако большой недостаток этого подхода заключается в том, что, хотя в час изменяется только небольшое количество записей, требуется весь дамп, что требует значительно более высокой емкости чтения в DynamoDb и более высоких ресурсов EMR.

  2. Используйте DynamoDB Streams , чтобы отразить любые изменения в DynamoDb на S3.

    Это дает преимущество в том, что нет необходимости обрабатывать неизмененные данные на DynamoDb, что снижает необходимость в значительно более высоком чтенииемкость, чем то, что нужно в обычных операциях.Однако для консолидации файлов на каждую запись, сгенерированных потоками DynamoDb, потребуется дополнительный сценарий (возможно, другое задание EMR), в противном случае производительность Athena сильно ухудшается из-за большого количества файлов.

Есть ли другие подходы, которые могут быть лучше, чем эти?

1 Ответ

0 голосов
/ 11 июня 2019

Я реализовал следующий конвейер данных для потоковой передачи данных в реальном времени в Афину:

Dynamodb -> потоки DynamoDB -> Лямбда -> Kinesis Firehose -> s3 <- Athena </p>

Do letЯ знаю, если у вас есть какие-либо сомнения.

...