amazon-web-services - UUID 作为 DynamoDB 中的主键——好还是坏主意?

标签 amazon-web-services database-design amazon-dynamodb

在新的 DynamoDB 表中,我的用例已通过以下关键架构设计实现:

  • 分区键:user_id
  • 排序键:entity_id

enter image description here

基本上,访问模式是:

  1. 获取特定用户的特定帖子。
  2. 获取特定用户的具体评论。
  3. 列出特定用户的所有帖子。
  4. 列出特定用户的所有评论。
  5. 列出特定用户的所有实体(帖子或评论)。

如果我使用更随机的 ID 作为分区键并简单地使用 GSI 作为上述访问模式,我会获得什么好处?

  • 分区键:pseudo_random_id(这实际上是一个 UUID。请忽略这不是图中的 UUID)。
  • GSI:
    • 分区键:user_id
    • 排序键:entity_id

enter image description here

最佳答案

您不需要 UUID 或任何伪随机 ID。

如果一个用户特别活跃,您曾经有可能拥有一个热分区,但热分区是 basically a non-issue现在是因为 DynamoDB 的自适应能力。此外,您可能应该限制用户创建评论/帖子的速度,这样即使不存在自适应容量,也可以防止热分区。

(为什么要限制用户发帖的速率?您不希望恶意行为者每隔几毫秒就创建一个新帖子 - 您应该有某种速率限制来防止拒绝服务攻击。)

关于amazon-web-services - UUID 作为 DynamoDB 中的主键——好还是坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56829651/

相关文章:

javascript - 将 AWS 开发工具包与网络 worker 一起使用

database-design - 好友列表 : Relational Database Table Design

mysql - 在 MySQL 查询中创建和桥接表

mysql - 数据库设计 - 多语言网站

amazon-web-services - DynamoDB updateItem 失败

xml - 如何将变量传递到 XML 文件(通过 Terraform)?

python - StartQueryExecution 操作 : Unable to verify/create output bucket

amazon-dynamodb - DynamoDB : Conditional writes vs. CAP定理

amazon-web-services - 我需要将 EC2 与 DynamoDB 结合使用吗?

javascript - 解析 DynamoDB 请求