在新的DynamoDB表中,我的用例已经由以下关键架构设计满足:
user_id
entity_id
基本上,访问模式是:
如果我使用更多的随机ID作为分区键,而对上面的访问模式仅使用GSI,我会得到什么好处?
pseudo_random_id
(实际上这将是一个UUID。请忽略该插图中的UUID)。user_id
entity_id
答案 0 :(得分:1)
您不需要UUID或任何伪随机ID。
如果一个用户特别活跃,您曾经有可能拥有一个热分区,但是由于DynamoDB的自适应能力,现在热分区为basically a non-issue。此外,您可能应该限制用户创建评论/帖子的速度,即使没有自适应功能,这也可以防止出现热分区。
(为什么要限制用户可以发布的速率?您不希望恶意行为者每隔几毫秒就可以创建一个新帖子-您应该有某种速率限制以防止拒绝服务攻击。)
答案 1 :(得分:0)
使用UUID不会为您做任何事情...
分区键的随机性无关紧要。重要的是您拥有多少个不同的分区键以及该分区键的条目的数量/速度。
换句话说,唯一值是唯一值。 Dynamo不在乎它是16个字节,36个字节还是128个字节。
Dynamo将其自己的哈希应用于分区键,以确定数据将放置在哪个分区中。