为 DynamoDB 中的所有项目分配相同的分区键 table
Assigning the same partition key to all items in a DynamoDB table
我需要能够 运行 在我的 DynamoDB table 上进行一些基于范围的查询,例如 int_attribute > 5
或 starts_with(string_attribute, "foo")
。这些都可以通过创建全局或局部二级索引,然后向这些索引提交Query来解决。 但是,运行查询要求您还提供分区键的单个值以限制查询集。这些查询都没有严格的相等条件,因此我正在考虑为 all 我的 Dynamo table 中的项目提供相同的分区键,并仅使用排序键区分它们.我的数据集将在 10 GB 分区大小限制内。
如果我这样做,是否会出现任何灾难性问题?
是的,您可以创建一个 GSI,其中每个项目都在同一个分区键下。需要注意的是,您通常会将所有这些写入操作放入同一个物理分区,每个分区的最大更新率为 1,000 WCU。
如果您的更新率低于该值,请继续。如果您的更新率高于该值,您将需要遵循对 GSI 分区键值进行分片的模式,以便它分布在更多分区中。
假设您需要 10,000 WCU 用于 GSI。您可以将每个项目的 GSI PK 值分配给一个随机的 value-{x}
,其中 x 是 0 到 9。然后是的,在查询时您进行 10 次查询并自己将结果组合在一起。这种方法可以根据需要扩展。
我需要能够 运行 在我的 DynamoDB table 上进行一些基于范围的查询,例如 int_attribute > 5
或 starts_with(string_attribute, "foo")
。这些都可以通过创建全局或局部二级索引,然后向这些索引提交Query来解决。 但是,运行查询要求您还提供分区键的单个值以限制查询集。这些查询都没有严格的相等条件,因此我正在考虑为 all 我的 Dynamo table 中的项目提供相同的分区键,并仅使用排序键区分它们.我的数据集将在 10 GB 分区大小限制内。
如果我这样做,是否会出现任何灾难性问题?
是的,您可以创建一个 GSI,其中每个项目都在同一个分区键下。需要注意的是,您通常会将所有这些写入操作放入同一个物理分区,每个分区的最大更新率为 1,000 WCU。
如果您的更新率低于该值,请继续。如果您的更新率高于该值,您将需要遵循对 GSI 分区键值进行分片的模式,以便它分布在更多分区中。
假设您需要 10,000 WCU 用于 GSI。您可以将每个项目的 GSI PK 值分配给一个随机的 value-{x}
,其中 x 是 0 到 9。然后是的,在查询时您进行 10 次查询并自己将结果组合在一起。这种方法可以根据需要扩展。