我看到了几个 DynamoDB 单表设计示例,其中分区键或排序键包含“名称”、“用户名”或“电子邮件地址”等值。考虑以下示例(来自 AWS 资源):
PK:HR-EMPLOYEE1, SK:约翰·史密斯
AWS GSI overloading table example
用户可以更改他的名字吗?
如果不是,更合适的 SK 定义是什么来允许此操作?
最佳答案
首先一个事实:主键无法更新。 (分区+排序键)。
回答您的问题,是的,如果名称是 sortKey,用户可以更改他/她的名称,但它会强制您替换当前条目。
这需要您进行额外的工作,处理所有引用并删除并创建新项目。 Dynamo 不具有行之间的引用完整性。 如果您认为在事务中执行此路径可能是个好主意。
正如您可能已经在一些视频和文档中看到的那样。排序键等于分区键是一种常见的做法。如果您创建一个反向 GSI,启用一组良好的访问模式(同时使用单表设计),这可能会在以后有所帮助。
PK SK ATTRIBUTES
USER#SOME_HASH USER#SOME_HASH NAME - EMAIL - ETC
从这里开始,如果您需要对名称执行搜索,本地二级索引 (LSI) 就可以解决问题。我们通常做的事情是创建字符串的“slug”以进行更强大的搜索。
显然,GSI 也可以让您执行此搜索,您可以通过创建稀疏索引来完成它。
祝你编码愉快。
关于database-design - DynamoDB 单表设计中的分区键或排序键是否应该仅包含不太可能更改的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62965707/