Amazon web services DynamoDB-UUID并避免全表扫描

Amazon web services DynamoDB-UUID并避免全表扫描,amazon-web-services,aws-lambda,amazon-dynamodb,Amazon Web Services,Aws Lambda,Amazon Dynamodb,这是我的用例: 我有一个包含200k个对象的JSON Api。数据集看起来有点像这样:日期、自行车型号、以分钟为单位的生产时间。我使用Lambda从JSON Api读取数据,并通过http请求在DynamoDB中写入数据。Lambda函数每天运行,并使用最新数据更新DynamoDB 然后我按日期检索数据,因为我想计算每天的平均生产时间,并将其放入第二个表中。Alexa skill连接到第二个表并读取每天的平均值 第一个问题:由于同一型号的自行车每天生产多次,使用带有日期和自行车型号的复合主键不会

这是我的用例:

我有一个包含200k个对象的JSON Api。数据集看起来有点像这样:日期、自行车型号、以分钟为单位的生产时间。我使用Lambda从JSON Api读取数据,并通过http请求在DynamoDB中写入数据。Lambda函数每天运行,并使用最新数据更新DynamoDB

然后我按日期检索数据,因为我想计算每天的平均生产时间,并将其放入第二个表中。Alexa skill连接到第二个表并读取每天的平均值

第一个问题:由于同一型号的自行车每天生产多次,使用带有日期和自行车型号的复合主键不会给我唯一的键。我应该为条目创建UUID吗?还是有更好的解决方案

第二个问题:对于计算,我每次都需要做一次完整的表格扫描,这是非常昂贵的,许多人建议不要这样做。如果不进行全表扫描,如何解决此问题

第三个问题:在我的用例中完全避免使用DynamoDB更好吗?那么哪个AWS数据库更适合我的用例呢

是,uuid或任何其他唯一标识符,例如:日期+自行车型号+创建时间,因为pk可以

看来你的平均值日常工作是某种数据分析工作,而不是真正的事务工作。我建议使用支持数据分析的服务,如Amazon Redshift。您应该能够使用Dynamodb流将数据添加到这样的数据库服务中。或者,您可以将数据流式传输到s3,并使用类似Athena的服务获取每日平均值


有一个简单的数据库模型可用于此任务:

PartitionKey:UUID或使用提供唯一性的任何字段组合。 SortKey:生产日期,作为字符串,即2020-07-28 如果随后创建一个二级索引,将生产日期用作主键并包含生产时间,则可以查询不扫描二级索引以查找特定日期,并对生产时间执行所需的任何计算。然后,您可以独立地在辅助索引和表上设置所需的读/写容量


关于你的第三个问题,我认为使用DynamoDB完成这项任务没有任何真正的好处。任何RDS,如MySQL、Redshift甚至S3+Athena都可以轻松处理此类用例。如果你需要实时分析,你甚至可以考虑AWS运动。

如果这确实是OP的唯一用例,那么我同意S3+雅典娜可能是一个更好的选择。多长时间做一次计算,你需要多长时间读一次?