首页 > 解决方案 > 使用低基数的排序键有什么缺点吗?

问题描述

对于我的表,我具有以下属性:

  1. 项目 ID
  2. 产品名称

只有 ItemId + ProductName 是唯一的。然而,ItemId 具有非常高的基数并且几乎是唯一的,只是不能保证。ProductName 具有非常低的基数(约 5 个不同的值)。客户端总是会传入 ItemId + ProductName 来获取项目。

方法1
最初我正在考虑将(简单)主键的分区键设置为ItemId + ProductName(字符串连接)。

方法 2
但是,由于在创建表后无法更改主键,我正在考虑将排序键保留为占位符。因此将(复合)主键的分区键设置为 ItemId 并将排序键设置为 ProductName。

好处是如果我想在将来向排序键添加东西(比如版本号),我可以在不迁移表的情况下做到这一点。虽然现在我看不到我会添加什么。

但是,与方法 1 相比,方法 2 原样(排序键基数低)是否有任何缺点(例如性能)?

标签: amazon-web-servicesamazon-dynamodb

解决方案


如果您使用的是按需定价,那么这对价格/性能应该没有影响。

如果没有,那么通常会有一些差异:https ://blog.yugabyte.com/11-things-you-wish-you-knew-before-starting-with-dynamodb/

过度配置以处理热分区。

在 DynamoDB 中,总预置 IOPS 平均分配给所有分区。因此,选择一个能够在这些分区上均匀分布读取和写入的分区键非常重要。如果一个表最终有几个需要更多 IOPS 的热分区,则配置的总吞吐量必须足够高,以便为所有分区提供最热分区所需的吞吐量。这可能会导致成本急剧增加并使工程师感到沮丧。

在您的特定情况下,它也不应该有任何影响。


推荐阅读