【发布时间】:2021-03-11 08:12:35
【问题描述】:
我的 DynamoDB 表数据架构:
PartitionKey: "PK" -> String
SortKey: "SK" -> Number (timestamp)
Attribute: "Summary" -> JsonMap
我的主要用例是我有一个“PK”和“SK”的范围,这是目标时间范围,并查询 DDB 以获取“摘要”列表。这种数据设计非常适合 DDB API。
现在,我想使用 AppSync 为这个 DynamoDB 为 Amplify 应用程序创建一个 GraphQL API。所以我创建了一个这样的 GraphQL 模式:
type DataSummary {
PK: String!
SK: Float!
Summary: AWSJSON
}
GraphQL 自动为我创建了 2 个查询 API:getDataSummary 和 listDataSummary。让我吃惊的是,当我列出 API 时,我可以使用过滤器将查询定义为:
query listDataSummaries {
listDataSummaries(filter: {PK: {eq: "##Some key string##}"}, SK: {gt: ##Some timestamp##}}) {
items {
PK
SK
Summary
}
}
}
但是,由于分页,返回值为“null”,这意味着 GraphQL 正在执行表扫描以收集表中的所有项目,然后根据我的请求进行过滤。这与我的表设计背道而驰,因为它需要比普通 DDB API 调用更多的 RCU 来获得相同的结果。 那么,我错过了什么?如何“要求”GraphQL 进行 DDB 查询而不是扫描 PK/SK 列表操作?
【问题讨论】:
标签: amazon-web-services graphql amazon-dynamodb aws-appsync