如何查询DynamoDB电影示例数据库以按类型检索电影



我是DynamoDB的新手,通过开发人员指南[1]并创建了这个电影数据库[2],我能够轻松地查询特定年份和标题的数据库,因为它们是主键的一部分。

但是我想检索以下两件事,我想知道为什么这些例子似乎没有涉及:

  1. 从整个表中检索所有类型的列表
  2. 通过提供特定类型来检索电影标题

我发现的例子是在谈论为一个简单的字段(如评级或字符串字段)添加GSI,但我不知道当我的字段本身是一个列表(如流派)时,我将如何做到这一点。

[1] https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.JavaScript.html[2] https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/samples/moviedata.zip

这是开发人员指南的电影数据库中的一个示例数据点:

{
"year" : 2013,
"title" : "Turn It Down, Or Else!",
"info" : {
"directors" : [
"Alice Smith",
"Bob Jones"
],
"release_date" : "2013-01-18T00:00:00Z",
"rating" : 6.2,
"genres" : [
"Comedy",
"Drama"
],
"image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
"plot" : "A rock band plays their music at high volumes, annoying the neighbors.",
"rank" : 11,
"running_time_secs" : 5215,
"actors" : [
"David Matthewman",
"Ann Thomas",
"Jonathan G. Neff"
]
}
}

您无法单独使用给定的数据结构实现您想要的效果,因为索引只能用于顶级字符串,数字和二进制属性:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

使用DynamoDB,当您通过复制对数据进行非规范化时,您可以实现这种多对多关系。例如,你可以使用带有电影"title"的分区键(假设它在这个例子中是唯一的)和排序键"genre"。然后,根据电影属于不同的类型,复制数据的次数。

为了获得所有类型,您可以为类型属性创建全局二级索引。使用相同的索引,您可以查询特定类型和其中的所有电影名称。

AWS文档在这里解释了更多关于多对多关系的信息:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html

这篇博文也是一个很好的读物,可以让你从规范化的关系数据方法转向使用DynamoDB的不同的非规范化方法:https://www.alexdebrie.com/posts/dynamodb-one-to-many/#composite-primary-key--the-query-api-action

最新更新