【发布时间】:2017-03-24 16:05:18
【问题描述】:
我想存储和查询大量的原始事件数据。我想使用的架构是“数据湖”架构,其中 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 架构?
【问题讨论】:
-
架构看起来不错。但是,您无法在没有分区键的情况下查询 DynamoDB 数据库。如果分区键不可用,您必须扫描整个 DynamoDB。另一种方法是在日期时间字段上创建全局二级索引。
-
@notionquest 谢谢。您能否详细说明全球二级索引的含义以及它对这里的帮助?
-
使用elasticsearch索引元数据怎么样?看看下面的链接:indexing-metadata-in-amazon-elasticsearch-service-using-aws-lambda-and-python
标签: amazon-s3 amazon-dynamodb data-lake