Мне нужно иметь медленно меняющийся AWS DynamoDb, периодически сбрасываемый на S3, для запроса к Athena.Необходимо убедиться, что данные, доступные для Афины, не сильно отстают от данных, доступных на DynamoDb (максимальное отставание в 1 час)
Мне известны следующие два подхода:
Использование EMR (из конвейера данных) для экспорта всего DynamoDb
Преимущество этого подхода заключается в том, что при использовании единственного сценария EMR (запускаемого ежечасно) сжатые файлы Parquet, доступные для прямого поискана Афине, можно сбросить на S3.Однако большой недостаток этого подхода заключается в том, что, хотя в час изменяется только небольшое количество записей, требуется весь дамп, что требует значительно более высокой емкости чтения в DynamoDb и более высоких ресурсов EMR.
Используйте DynamoDB Streams , чтобы отразить любые изменения в DynamoDb на S3.
Это дает преимущество в том, что нет необходимости обрабатывать неизмененные данные на DynamoDb, что снижает необходимость в значительно более высоком чтенииемкость, чем то, что нужно в обычных операциях.Однако для консолидации файлов на каждую запись, сгенерированных потоками DynamoDb, потребуется дополнительный сценарий (возможно, другое задание EMR), в противном случае производительность Athena сильно ухудшается из-за большого количества файлов.
Есть ли другие подходы, которые могут быть лучше, чем эти?