【问题标题】:How does DynamoDB GSI treat missing attributes?DynamoDB GSI 如何处理缺失的属性?
【发布时间】:2019-05-31 14:31:49
【问题描述】:

查看this DynamoDB documentation about GSI,发现如下评论:

全局二级索引仅跟踪其关键属性实际存在的数据项。

以下哪个是确切的意思?

  1. 从 GSI 的角度来看,缺少 Partition Key 和/或 Sort Key 将导致 GSI 中没有其他项目
    例如)“GameTitle”和“TopScore”是必需的
  2. 使用 INCLUDE 选项指定为 GSI 一部分的任何属性的缺失数据将导致 GSI 中没有其他项目
    例如)投射到 GSI 的所有属性,甚至“赢”、“输”都是必需的

我怀疑“关键属性”指的是 1.,并且从 INCLUDE 选项的角度来看,任何缺失的数据在查询 GSI 时都会简单地返回为空,但想检查我的理解是正确的。

另外,GSI 和 LSI 在这个领域会不会有区别?

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    在您链接到Global Secondary Indexes的页面中

    然后你引用的接下来的两行是:

    全局二级索引仅跟踪其关键属性实际存在的数据项。例如,假设您在 GameScores 表中添加了另一个新项目,但只提供了所需的主键属性:
    因为您没有指定 TopScore 属性,DynamoDB 不会将此项目传播到 GameTitleIndex。

    因此,如果您在属性 GSIKey 上有一个 GSI,并且您将一条记录添加到没有该属性的表中,则 GSI 将不会获得该记录的条目。

    如果您使用 GSIKey 添加记录,则 GSI 将具有该记录的条目。

    任何额外的投影属性要么存在,要么不存在。与表格本身相同。

    对此的技术术语是sparse index;它不必包含与基表一样多的条目。

    本地二级索引也是稀疏的。

    【讨论】:

    • 感谢您的回答,稀疏索引文档正是我所需要的!我希望使用 GSI 来读取具有特定整数属性(例如价格)的项目,但价格作为分区键或排序键可能没有意义。我想我需要在应用层使用不同的逻辑。
    • 关注这个问题@Charles,如果我从一个项目中删除一个 GSI 分区键,在这种情况下,我有一个最初带有 TopScore 的项目并被索引,然后我从这个项目中删除 TopScore 属性,GSI 是否实际上也从它的索引存储中删除了该项目?
    • 是的,索引将删除条目
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多