Я хотел бы хранить и запрашивать большое количество необработанных данных о событиях. Я хотел бы использовать архитектуру «озера данных», в которой S3 содержит фактические данные о событиях, а DynamoDB используется для их индексации и предоставления метаданных. Это архитектура, о которой говорят и рекомендуют во многих местах:
- https://aws.amazon.com/blogs/big-data/building-and-maintaining-an-amazon-s3-metadata-index-without-servers/
- https://www.youtube.com/watch?v=7Px5g6wLW2A
- https://s3.amazonaws.com/big-data-ipc/AWS_Data-Lake_eBook.pdf
Однако я изо всех сил пытаюсь понять, как использовать DynamoDB для запроса данных о событиях в S3. В приведенной выше ссылке на блог AWS они используют пример хранения клиентских событий, созданных несколькими разными серверами:
Формат пути S3: [4-digit hash]/[server id]/[year]-[month]-[day]-[hour]-[minute]/[customer id]-[epoch timestamp].data
Eg: a5b2/i-31cc02/2015-07-05-00-25/87423-1436055953839.data
И схема для записи этого события в DynamoDB выглядит так:
Customer ID (Partition Key), Timestamp-Server (Sort Key), S3-Key, Size
87423, 1436055953839-i-31cc02, a5b2/i-31cc02/2015-07-05-00-25/87423-1436055953839.data, 1234
Я хотел бы выполнить запрос, например: «Получить мне все события клиентов, созданные всеми серверами за последние 24 часа», но, насколько я понимаю, невозможно эффективно запрашивать DynamoDB без использования ключа раздела. Я не могу указать ключ раздела для такого запроса.
Учитывая это требование, должен ли я использовать базу данных, отличную от DynamoDB, для записи того, где мои события находятся в S3? Или мне просто нужно использовать другой тип схемы DynamoDB?