首页 > 解决方案 > 如何查询 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 。压缩

这是来自开发者指南的电影数据库的示例数据点:

{
    "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"
       ]
    }
}

标签: databaseamazon-web-servicesnosqlamazon-dynamodbdynamodb-queries

解决方案


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

当您通过复制对数据进行非规范化时,您可以使用 DynamoDB 实现这种多对多关系。例如,您可以使用带有电影“标题”的分区键(假设它在本例中是唯一的)和排序键“流派”。然后,您复制数据的次数与电影属于不同类型的次数一样多。

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

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


推荐阅读