我的 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 应如何构建才能支持这一点?
我有两种解决方案,但我不确定该选择哪一个,因为每种都有其缺点
PK | SK | 名字 |
---|---|---|
用户#johndoe | 用户#johndoe | 约翰 |
PK | SK | 名字 | GSI1PK | GSI1SK |
---|---|---|---|---|
用户#aee97067-b363-495c-9531-f1da15812eee | 用户#aee97067-b363-495c-9531-f1da15812eee | 约翰 | 用户#johndoe | 用户#aee97067-b363-495c-9531-f1da15812eee |
在第一种方法中,我不确定修改“静态”ID 是否是一个好主意,因为它可能用于日志中以及与其他项目的“关系”引用。
在第二种方法中,编辑其 ID 没有问题,因为它是常规属性。此方法非常适合查询数据,但每当我需要插入数据时,我都必须以某种方式将别名重新映射到 ID。我不确定在执行写入操作之前在控制器中的每个写入请求上通过别名请求“真实”用户 ID 是否有效。
您能否建议我应该使用哪种方法以及为什么?也许你对此有一些经验并可以与我分享
谢谢!
您问题的答案主要取决于您的具体要求。这是我的意见,可以帮助您做出决定:
将选项 1 作为基表,允许您根据别名编写项目。以及 long-id 作为 GSI 索引键,允许您在需要时使用 long-id 进行读取。