【问题标题】:Index on a Boolean attribute in DynamoDBDynamoDB 中布尔属性的索引
【发布时间】:2020-08-26 05:27:11
【问题描述】:

我是 DynamoDB 架构设计的新手。我们有一个表,用于存储客户的元数据信息,其中 HashKey 为 CustomerId。该表还包括一个名为“isActive”的属性,它不是布尔值。如果客户取消注册,我们计划将“isActive”属性设置为空。

我们希望提取所有活跃的 customerIds 的列表。我读到了“sparseIndexes”,其中我们可以在“isActive”属性上创建一个 GSI,并且只有具有“非空”值的记录才会填充到 GSI 中。

但是,扫描似乎是检索活动客户 ID 列表的唯一方法。我们也可以

  a) Scan entire table and filter only active customerIds at application layer
  b) Scan the GSI which will be smaller than base table, but not necessarily very small (I would expect at least 1000+ records in it).

有没有更好的设计方法通过实现高基数来解决这个问题?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb dynamodb-queries


    【解决方案1】:

    听起来您对自己的选择相当了解。对于您描述的访问模式,使用 GSI 创建稀疏索引是相当普遍的。请记住,您可以对索引运行query 操作(而不是scan),这将使操作非常快。如果您有很多项目,您可以随时对结果进行分页。

    请记住,您可以添加/删除项目的 GSI 主键以在索引中包含/排除项目。例如,假设您的表有一个带有名为 GSI1PK 的分区(哈希)键的 GSI。以下是定义了 4 个客户项目后的样子:

    请注意,只有 Joe 和 Jill 定义了 GSI1PK 值,而 Sue 和 Sam 没有。由于我在 GSI1PK 上定义了全局二级索引,因此只有定义了该属性的项目才会投影到该索引中。从逻辑上讲,该索引应如下所示:

    如果您想从 GSI1 中删除 Joe 或 Jill,只需将这些项目中的项目更新为 REMOVEGSI1PK。同样,如果您想将 Sue 或 Sam 添加到索引中,请将项目更新为 ADD 这些项目的 GSI1PK 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2015-01-03
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多