Amazon dynamodb 为什么本地二级索引只允许在散列和范围键上使用(而不仅仅是在散列上)

Amazon dynamodb 为什么本地二级索引只允许在散列和范围键上使用(而不仅仅是在散列上),amazon-dynamodb,Amazon Dynamodb,在控制台中创建DynamoDB表时,如果选择散列主键(而不是散列和范围),为什么“本地辅助索引”选项不可用 我的用例是为每个用户存储一个活动提要,因此userid上的散列是合乎逻辑的。此外,我希望在创建日期上保留一个本地二级索引范围,以便随时查询最新的n条记录 在这种情况下,我是否应该使用uid和date\u created主键(尽管从技术上讲,两个项目可能具有相同的date\u created使用全局二级索引) 首先,使用DynamoDB的时间序列数据很难,但并非不可能。听起来您想要一种方法来

在控制台中创建DynamoDB表时,如果选择散列主键(而不是散列和范围),为什么“本地辅助索引”选项不可用

我的用例是为每个用户存储一个活动提要,因此
userid
上的散列是合乎逻辑的。此外,我希望在创建日期上保留一个本地二级索引范围,以便随时查询最新的n条记录


在这种情况下,我是否应该使用
uid
date\u created
主键(尽管从技术上讲,两个项目可能具有相同的
date\u created

使用全局二级索引)

首先,使用DynamoDB的时间序列数据很难,但并非不可能。听起来您想要一种方法来获取在整个表中全局创建的最新日期的记录。在DynamoDB中考虑GSI的方法是,它们就像自己的表一样,没有散列/范围键组合唯一的限制

使用全局二级索引,您可以在任何其他字段上定义自己的哈希键和范围键,并且组合不需要唯一。您希望哈希键类似于“YYYY-MM”或“YYYY-MM-DD”或“YYYY-MM-DD-HH”(日期的第一部分)取决于需要的记录数量和性能类型。然后将完整日期作为范围键,并投影所需的属性(越少越好,同样取决于用例)。我们将其分解的原因是为了避免数据库中的热停止

现在,当您想要查询最新的项目时,您首先需要知道您想要进入的日期的第一部分,然后查询将按排序顺序返回记录

DynamoDB之所以复杂,是因为它是一个基于NoSQL的系统。随着数据大小和所需IOPS数的增加,幕后DynamoDB会在更多硬件上自动水平分割数据

我上面描述的方法是可行的,但是如果您有非常大的数据量或需要非常高的IOPS(超过1000次写入)您可能希望研究使用不同的技术。虽然DynamoDB允许您提供基本上不受限制的读写,但也可以按照DynamoDB文档中的以下描述构造限制性能的GSI

因此,要实现全部请求吞吐量,您需要 为表设置了资源,使工作负载均匀分布在 散列键值。跨散列键值分发请求 跨分区分发请求