amazon-web-services - UUID 作为 DynamoDB 中的主键——好主意还是坏主意?
问题描述
在一个新的 DynamoDB 表中,我的用例已经通过以下关键模式设计实现:
- 分区键:
user_id
- 排序键:
entity_id
基本上,访问模式是:
- 获取特定用户的特定帖子。
- 获取特定用户的特定评论。
- 列出特定用户的所有帖子。
- 列出特定用户的所有评论。
- 列出特定用户的所有实体(帖子或评论)。
如果我使用更随机的 ID 作为分区键并简单地将 GSI 用于上面的访问模式,我可以获得什么好处?
- 分区键:(
pseudo_random_id
实际上这将是一个 UUID。请忽略这不是插图中的 UUID)。 - GSI:
- 分区键:
user_id
- 排序键:
entity_id
- 分区键:
解决方案
您不需要 UUID 或任何伪随机 ID。
如果一个用户特别活跃,您曾经有可能拥有一个热分区,但由于 DynamoDB 的自适应能力,现在热分区基本上不再是问题。此外,您可能应该限制用户创建评论/帖子的速度,这将防止热分区,即使不存在自适应能力。
(为什么要限制用户发布的速率?您不希望恶意行为者每隔几毫秒就创建一个新帖子——您应该设置某种速率限制,以防止拒绝服务攻击。)
推荐阅读
- visual-studio - 与 Visual Studio 相比,VS Code 中的字体看起来更清晰
- ruby - 将尽可能多的代码行移出 main 尽可能
- javascript - 如何控制“插入符号导航/文本插入光标”在可编辑 div 中的文本内的位置?
- javascript - 如何用 pug 设置句子中的一些单词粗体/强烈?
- javascript - 使用 javascript 中的 RegExp 对象将字符串替换为值
- python-3.x - Python中的颜色检测和比较
- java - Java中的功能等价
- python-3.x - 如何检查小数点后的数字?
- java - Gradle 解析策略 cacheDynamicVersionsFor 不起作用
- flutter - 飞镖列表中三个点(...)的用途是什么?