我们可以更新 DynamoDB GSI 分区键吗?

der*_*rng 4 amazon-dynamodb dynamodb-queries

根据文档,我了解 PrimaryKey PK 和 SortKey SK 无法在主表上更新。然而,这对于 GlobalSecondaryIndex (GSI) 来说并不清楚,更新 GSI SK 似乎可以(如果我错了,请纠正我)。

假设我有以下帐户表,其中我们有以下 PK (ID) + SK (createdAt)

id     createdAt     email          username
21     20220101      abc@xyz.com    blah1
22     20220102      123@xyz.com    blah2
...
Run Code Online (Sandbox Code Playgroud)

如果我想通过电子邮件建立索引,我可以创建一个 GSI,其中电子邮件是 PK,createdAt 是 SK。

我们如何处理允许用户更改电子邮件或用户名的情况?

  • 这本质上是另一个分区中的新主键,因此是 GSI 表中的新行吗?
  • 这是否意味着 GSI 中的旧行可能已过时?如果是这样,如果我们无法直接在 GSI 上删除,DynamoDB 是否会清理旧条目?

hun*_*ker 9

GSI 不直接接受写入,但您可以通过编辑基表中的项目来更新 GSI 项目的键。

请注意,执行此操作时可能会出现潜在的“写入放大”,因为对基表的一次写入会导致对 GSI 的两次写入:旧键下的删除和新键下的插入。这一切都是自动为您完成的。