Amazon web services 对于时间滑动窗口数据获取场景,DynamoDB键模式应该是什么?

Amazon web services 对于时间滑动窗口数据获取场景,DynamoDB键模式应该是什么?,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,关于DynamoDB,我从未了解的是如何设计一个表来有效地获取某个特定字段位于某个范围内的所有数据。例如,时间范围-我们希望获得从时间戳1到时间戳2创建的数据。根据密钥设计,我们只能使用排序密钥来实现此目的。但是,它自动意味着所有数据的主键都应该相同。但根据文档,这是DynamoDB使用的反模式。如何处理这种情况?可以创建均匀分布的主键,然后创建一个主键,主键部分对于所有项目都相同,但排序部分对于所有项目都不同,这是一个更好的解决方案吗?您可以使用全局次索引,它本质上是 全局二级索引包含从基表中

关于DynamoDB,我从未了解的是如何设计一个表来有效地获取某个特定字段位于某个范围内的所有数据。例如,时间范围-我们希望获得从时间戳1到时间戳2创建的数据。根据密钥设计,我们只能使用排序密钥来实现此目的。但是,它自动意味着所有数据的主键都应该相同。但根据文档,这是DynamoDB使用的反模式。如何处理这种情况?可以创建均匀分布的主键,然后创建一个主键,主键部分对于所有项目都相同,但排序部分对于所有项目都不同,这是一个更好的解决方案吗?

您可以使用
全局次索引
,它本质上是

全局二级索引包含从基表中选择的属性,但它们由不同于表的主键组织

因此,您可以查询唯一的其他属性

也就是说,由于我的意思可能不清楚,您可以选择其他可能是唯一的主键,并使用一个重复ID作为GSI,作为查询的基础


注意:NoSQL DBs最广泛的应用之一是存储时间序列,除非指定时间戳,否则不能期望它具有唯一标识符作为PK。

好的,如果我有一个主键,如{partition:unique_id,sort:-}和一个辅助键,如{partition:const,sort:timestamp}-它是否比只有{partition:const,sort:timestamp}主键(如果我从未通过id获取项目)有优势?它将允许versatiltiy在不同类型的查询中使用,以防您出于不同的目的需要信息。这里有一个很好的例子。作为性能优势,不会有任何影响。