database - 如何查询 DynamoDB 电影示例数据库以按类型检索电影
问题描述
我是 DynamoDB 的新手,阅读了开发人员指南 [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"
]
}
}
解决方案
您无法仅使用给定的数据结构来实现您想要的,因为索引只能与顶级字符串、数字和二进制属性一起使用: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
推荐阅读
- azure - 队列触发器在部署后不直接工作
- python - 谁能解释这是如何工作的 [1,2][bool("")]?
- python - 为什么我的海龟程序没有正确关闭?
- java - @Synchronized 方法中的 Kotlin IllegalMonitorStateException
- c# - 使用 ASP.NET Core 中间件拦截 API 响应(错误代码:403)
- asp.net-mvc - 将项目部署到在线 Web 服务器时出现错误 500
- c# - C# 以管理员身份运行命令提示符
- clojurescript - 将试剂版本从 0.6.0 更新到 0.8.1 时无法读取未定义的属性“调用”
- ios - 更改禁用按钮的色调颜色不起作用
- ios - Xcode/Swift:显示我添加到 CocoaPod 的“打印”