如何在 DynamoDB 中为 ID 添加别名?

问题描述 投票:0回答:1

我的 DynamoDB 中有下表

PK SK 名字
用户#aee97067-b363-495c-9531-f1da15812eee 用户#aee97067-b363-495c-9531-f1da15812eee 约翰

我的网络应用程序中还有一个用户配置文件功能。用户可以使用类似 http://example.com/aee97067-b363-495c-9531-f1da15812eee 的 URL 导航到他们的个人资料。但是,我发现 URL 中的长 ID 很麻烦,因此我希望允许用户为其 ID 创建别名。这样,他们就可以在 URL 中使用更易于理解的别名,而不是使用 UUID,例如 http://example.com/johndoe

DynamoDB 应如何构建才能支持这一点?

我有两种解决方案,但我不确定该选择哪一个,因为每种都有其缺点

  1. 用别名替换PK中原来的UUID
PK SK 名字
用户#johndoe 用户#johndoe 约翰
  1. 为别名创建GSI(全局二级索引)并通过GSI进行查询。
PK SK 名字 GSI1PK GSI1SK
用户#aee97067-b363-495c-9531-f1da15812eee 用户#aee97067-b363-495c-9531-f1da15812eee 约翰 用户#johndoe 用户#aee97067-b363-495c-9531-f1da15812eee

在第一种方法中,我不确定修改“静态”ID 是否是一个好主意,因为它可能用于日志中以及与其他项目的“关系”引用。

在第二种方法中,编辑其 ID 没有问题,因为它是常规属性。此方法非常适合查询数据,但每当我需要插入数据时,我都必须以某种方式将别名重新映射到 ID。我不确定在执行写入操作之前在控制器中的每个写入请求上通过别名请求“真实”用户 ID 是否有效。

您能否建议我应该使用哪种方法以及为什么?也许你对此有一些经验并可以与我分享

谢谢!

amazon-dynamodb
1个回答
0
投票

您问题的答案主要取决于您的具体要求。这是我的意见,可以帮助您做出决定:

选项1

  1. 允许您轻松更新/写入项目,而无需先获取
  2. 确保没有重复的别名
  3. 适合高写入吞吐量用例,特别是如果您不将长 ID 用于其他用途。
  4. 修改别名需要删除/放置

选项2

  1. 如果您的用例以读取为主,并且您仍然有使用长 ID 进行读取的有效要求,那么这是一个不错的选择。
  2. 高写入吞吐量也会导致您先读取,相比之下,这相对便宜,但会稍微增加延迟。它还会引入竞争条件,要求您实现乐观锁定。

选项3

将选项 1 作为基表,允许您根据别名编写项目。以及 long-id 作为 GSI 索引键,允许您在需要时使用 long-id 进行读取。

© www.soinside.com 2019 - 2024. All rights reserved.