在控制台中创建一个dynamodb表时,为什么"本地二级索引"如果选择哈希主键(而不是哈希和范围),则选项不可用?
我的用例是为每个用户存储一个活动源,因此userid上的哈希是合乎逻辑的。另外,我想在date_created上保留一个本地二级索引范围,这样我总是可以查询最近的n条记录。
在这种情况下,我是否应该使用uid和date_created的主键(尽管从技术上讲,理论上可能两个项目具有相同的date_created。
答案 0 :(得分:2)
使用全局二级索引。
首先,使用DynamoDB的时间序列数据很难,但并非不可能。听起来你想要一种方法来获取整个表中全局最新date_created的记录。在DynamoDB中考虑GSI的方法是它们就像他们自己的表一样,没有HASH / RANGE键组合的限制是唯一的。
使用全局二级索引,您可以在任何其他字段上定义自己的哈希键和范围键,并且组合不需要是唯一的。你会希望哈希键是'YYYY-MM',或'YYYY-MM-DD'或'YYYY-MM-DD-HH'(日期的第一部分),具体取决于记录的数量和类型你需要的性能。然后,您可以将完整日期作为范围键并投影所需的属性(越少越好,同样取决于用例)。我们解决这个问题的原因是为了避免数据库中的热停止。
现在,当您想要查询最近的项目时,您首先需要知道要潜入的日期的第一部分,然后查询将按排序顺序返回记录。
DynamoDB之所以复杂,是因为它是基于NoSQL的系统。在幕后,随着数据大小和所需IOPS数量的增加,DynamoDB会自动在更多硬件上水平分割数据。
我上面描述的方法可行,但如果您的数据量非常大或需要非常多的IOPS(超过1000次写入),您可能需要考虑使用其他技术。虽然DynamoDB允许您提供基本上无限制的读取和写入,但可以构建限制性能的GSI,如DynamoDB文档中的以下内容所述。
因此,要实现全量的请求吞吐量 已经配置了一个表,保持您的工作量均匀分布 哈希键值。跨散列键值分发请求 跨分区分发请求。