我想存储和查询大量的原始事件数据。我想使用的架构是“数据湖”架构,其中 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
例如: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 架构?