地图中的 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 唯一键值不是分区键的主要内容,如果未能解决你的问题,请参考以下文章

使用增值税号作为分区键在DynamoDB中存储企业

AWS Dynamodb,排序键

AppSync $util.autoId() 和 DynamoDB 分区和排序键设计问题

DynamoDB 中分区和排序键查询的渐近性能是不是为常数 O(1)?

扫描Dynamo DB中的特定行

是否可以在亚马逊 dynamodb 中更新哈希键