【问题标题】:Why are local secondary indexes only allowed on a hash and range key (not on just a hash?)为什么本地二级索引只允许在哈希和范围键上(而不仅仅是在哈希上?)
【发布时间】:2021-01-28 22:15:30
【问题描述】:

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

我的用例是为每个用户存储一个活动提要,因此userid 上的散列是合乎逻辑的。此外,我想在 date_created 上保留一个本地二级索引范围,以便我始终可以查询最近的 n 条记录。

在这种情况下,我是否应该使用uiddate_created 的主键(尽管从技术上讲,理论上两个项目可能具有相同的date_created

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    使用全局二级索引。

    首先,使用 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 文档中的以下所述。

    因此,要实现您的全部请求吞吐量 已为表进行配置,让您的工作负载均匀分布 哈希键值。跨哈希键值分发请求 跨分区分发请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2011-08-17
      • 2014-02-14
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      相关资源
      最近更新 更多