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

How to query the DynamoDB movie example database to retrieve movies by genre

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

但我想检索以下两件事,我想知道为什么这些示例似乎无处可寻:

  1. 从整个 table
  2. 中检索所有流派的列表
  3. 通过提供特定类型来检索电影片名

我找到的示例是关于为简单字段(如评分或字符串字段)添加 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,当您通过复制对数据进行非规范化时,您可以实现这些 many-to-many 关系。你可以例如具有带有电影“标题”的分区键(假设它在本例中是唯一的)和排序键“流派”。然后你复制数据的次数与电影属于不同类型的次数一样多。

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

AWS 文档在此处解释了有关 many-to-many 关系的更多信息:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html

此外,这篇博客 post 也很适合阅读,可以让您从规范化关系数据方法转移到使用 DynamoDB 的不同非规范化方法:https://www.alexdebrie.com/posts/dynamodb-one-to-many/#composite-primary-key--the-query-api-action