地图中的 dynamoDB 唯一键值不是分区键
Posted
技术标签:
【中文标题】地图中的 dynamoDB 唯一键值不是分区键【英文标题】:dynamoDB unique key-value in map which is not a partition key 【发布时间】:2021-12-23 07:41:55 【问题描述】:您好,我是 Dynamo DB 的新手。我有一个场景,movies_watched
应该是独特电影的地图。有没有办法实现这一点,而不是每次添加新电影时都阅读和检查地图?
我正在使用带有 dynamoDB 的节点
"user_id":1, // partition key
"dob":"1991-09-12", // sort key
"movies_watched":
"1":
"movie_name":"twilight",
"movie_released_year":"1990",
"movie_genre":"action"
,
"2":
"movie_name":"harry potter",
"movie_released_year":"1996",
"movie_genre":"action"
,
"3":
"movie_name":"lalaland",
"movie_released_year":"1998",
"movie_genre":"action"
,
"4":
"movie_name":"serendipity",
"movie_released_year":"1999",
"movie_genre":"action"
【问题讨论】:
【参考方案1】:DynamoDB 不允许您对复杂属性执行该类型的操作。您需要在应用程序代码中强制执行这种逻辑。但是,有一个替代方案可能适用于您的用例。
您似乎正在为用户和他们看过的电影之间的一对多关系建模。要以让 DynamoDB 为您处理唯一性的方式执行此操作,请考虑将电影存储在用户分区而不是属性中。
例如,您的 User 实体的主键为 PK=user_id 和 SK=dob。您可以使用 PK=user_id 和 SK=movie_name 制作电影实体。这样做可以确保电影在用户分区中是唯一的。
【讨论】:
以上是关于地图中的 dynamoDB 唯一键值不是分区键的主要内容,如果未能解决你的问题,请参考以下文章
AppSync $util.autoId() 和 DynamoDB 分区和排序键设计问题