DynamoDB:UpdatedDate 作为 GSI 上的排序键?
DynamoDB: UpdatedDate as a Sort Key on a GSI?
如 所述,我假设您不能将更新日期之类的内容作为 table 的排序键,因为如果您更新,则会创建重复记录.
此外,我一直假设同样的事情适用于使用更新日期的 GSI。但在我的场景中,我将更新日期作为 GSI 上的排序键,并且在更新原始项目时不会创建新记录。
回顾一下,属性和关键模式是:
属性:
- 编号
- 我的排序键
- 我的计算字段
- 更新日期
Table:
- 分区键:Id
- 排序键:我的排序键
GSI:
- 分区键:MyComputedField
- 排序键:更新日期
我的问题是,我这样做是否间接影响了索引的性能?或者还有其他我不知道的由这种模式引起的问题吗?
全局二级索引在幕后是独立的 table,主 table 中更改的项目被复制到它。
正如您正确观察到的那样,您可以在 GSI 中使用一个不断变化的属性作为排序键,而不会在您写入基 table 后导致重复。
请注意,在 GSI 中不保证唯一性,即您可以拥有多个具有相同关键属性的项目。
除此之外,您只能从 GSI 进行最终一致性读取。
GSI 也有自己需要配置的读取和写入容量单位,如果您更改基础 table 中需要复制的项目,该操作将消耗 GSI 上的写入容量单位。
读取与此不同。
GSI 上的 RCU 不受写入 table 的影响。
但是如果你经常改变项目,你可能会在很短的时间内看到一些不一致(这就是为什么只有最终一致的读取是可能的)。
这意味着如果您能忍受我提到的副作用,您就可以使用这些模式。
如
此外,我一直假设同样的事情适用于使用更新日期的 GSI。但在我的场景中,我将更新日期作为 GSI 上的排序键,并且在更新原始项目时不会创建新记录。
回顾一下,属性和关键模式是:
属性:
- 编号
- 我的排序键
- 我的计算字段
- 更新日期
Table:
- 分区键:Id
- 排序键:我的排序键
GSI:
- 分区键:MyComputedField
- 排序键:更新日期
我的问题是,我这样做是否间接影响了索引的性能?或者还有其他我不知道的由这种模式引起的问题吗?
全局二级索引在幕后是独立的 table,主 table 中更改的项目被复制到它。
正如您正确观察到的那样,您可以在 GSI 中使用一个不断变化的属性作为排序键,而不会在您写入基 table 后导致重复。 请注意,在 GSI 中不保证唯一性,即您可以拥有多个具有相同关键属性的项目。 除此之外,您只能从 GSI 进行最终一致性读取。
GSI 也有自己需要配置的读取和写入容量单位,如果您更改基础 table 中需要复制的项目,该操作将消耗 GSI 上的写入容量单位。 读取与此不同。 GSI 上的 RCU 不受写入 table 的影响。 但是如果你经常改变项目,你可能会在很短的时间内看到一些不一致(这就是为什么只有最终一致的读取是可能的)。
这意味着如果您能忍受我提到的副作用,您就可以使用这些模式。