如何查询 DynamoDB 电影示例数据库以按流派检索电影
How to query the DynamoDB movie example database to retrieve movies by genre
我是 DynamoDB 的新手,阅读了开发人员指南 [1] 并创建了这个电影数据库 [2],我能够轻松查询数据库中的特定年份和标题,因为它们是主键。
但我想检索以下两件事,我想知道为什么这些示例似乎无处可寻:
- 从整个 table
中检索所有流派的列表
- 通过提供特定类型来检索电影片名
我找到的示例是关于为简单字段(如评分或字符串字段)添加 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
我是 DynamoDB 的新手,阅读了开发人员指南 [1] 并创建了这个电影数据库 [2],我能够轻松查询数据库中的特定年份和标题,因为它们是主键。
但我想检索以下两件事,我想知道为什么这些示例似乎无处可寻:
- 从整个 table 中检索所有流派的列表
- 通过提供特定类型来检索电影片名
我找到的示例是关于为简单字段(如评分或字符串字段)添加 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