amazon-web-services - 使用低基数的排序键有什么缺点吗?
问题描述
对于我的表,我具有以下属性:
- 项目 ID
- 产品名称
只有 ItemId + ProductName 是唯一的。然而,ItemId 具有非常高的基数并且几乎是唯一的,只是不能保证。ProductName 具有非常低的基数(约 5 个不同的值)。客户端总是会传入 ItemId + ProductName 来获取项目。
方法1
最初我正在考虑将(简单)主键的分区键设置为ItemId + ProductName(字符串连接)。
方法 2
但是,由于在创建表后无法更改主键,我正在考虑将排序键保留为占位符。因此将(复合)主键的分区键设置为 ItemId 并将排序键设置为 ProductName。
好处是如果我想在将来向排序键添加东西(比如版本号),我可以在不迁移表的情况下做到这一点。虽然现在我看不到我会添加什么。
但是,与方法 1 相比,方法 2 原样(排序键基数低)是否有任何缺点(例如性能)?
解决方案
如果您使用的是按需定价,那么这对价格/性能应该没有影响。
如果没有,那么通常会有一些差异:https ://blog.yugabyte.com/11-things-you-wish-you-knew-before-starting-with-dynamodb/
过度配置以处理热分区。
在 DynamoDB 中,总预置 IOPS 平均分配给所有分区。因此,选择一个能够在这些分区上均匀分布读取和写入的分区键非常重要。如果一个表最终有几个需要更多 IOPS 的热分区,则配置的总吞吐量必须足够高,以便为所有分区提供最热分区所需的吞吐量。这可能会导致成本急剧增加并使工程师感到沮丧。
在您的特定情况下,它也不应该有任何影响。
推荐阅读
- oauth-2.0 - 是获取 Google Docs OAuth 2.0 的任何方式。访问令牌,存在时间超过 3600 秒?
- php - PHP 工作,然后停止
- python - 使用 python matplotlib 用线条绘制非连续数据
- python - 如何为循环中的每个按钮分配一个单独的值?
- python - np.fromfunction 出现“数组的真值不明确”错误
- javascript - 有没有办法用同一个按钮(都是 onclick)激活 .cs 函数和 javascript 函数?
- winforms - Win2D 与 winfroms
- in-app-purchase - 无法更改 IAP(AppStore)的“已清除销售”
- angular - 打字稿一起编译两个目录
- javascript - 在条件下无法得到正确的结果