多值类型的 DynamoDB 二级索引

DynamoDB Secondary Index on Multi-Value Type

我有一个 table,它有一个数字类型的散列键和一个多值数字集的属性。

假设散列键是 group_id 并且多值集是该组 (user_ids)

的一组成员

我希望能够查询Which groups is user X in?

我知道我可以通过对数据进行反规范化并将 user_id 的 table 存储到 group_id.

的集合中来轻松做到这一点

在我这样做之前,我想确定没有办法将二级全局索引放在多值属性上,这样我就可以使用一个 table 并仍然获得不错的性能。

给定 HashKey=group_id 和 RangeKey=user_id 的基础 table 架构,您可以将 GSI 添加到反向架构。 GSI 的 HashKey 为 user_id,RangeKey 为 group_id。此 GSI 将回答以下问题:"Which groups is user X in?"。您不需要创建第二个 table 并维护它。事实上,DynamoDB 会自动将更改从您的基础 table 传播到 GSI,因此您不必担心保持索引最新。

您只能为标量类型属性创建 GSI。 scalar type attributes are NumberStringBinaryBooleanNull.

来自Managing Global Secondary Indexes documentation

Each index key attribute must be a scalar data type, not a multi-value set. You can project attributes of any data type into a global secondary index; this includes scalar data types and multi-valued sets. For a complete list of data types, see DynamoDB Data Types.