AWS AppSync GraphQL - 如何使用 PK/SK 查询而不是扫描整个 dynamoDB 表以获取 graphql 列表 API
Posted
技术标签:
【中文标题】AWS AppSync GraphQL - 如何使用 PK/SK 查询而不是扫描整个 dynamoDB 表以获取 graphql 列表 API【英文标题】:AWS AppSync GraphQL - How to use PK/SK query instead of scanning whole dynamoDB table for graphql list APIs 【发布时间】: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 列表操作?
【问题讨论】:
【参考方案1】:找出调查的方向: https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers.html
【讨论】:
您在文档中找到此问题的解决方案了吗?以上是关于AWS AppSync GraphQL - 如何使用 PK/SK 查询而不是扫描整个 dynamoDB 表以获取 graphql 列表 API的主要内容,如果未能解决你的问题,请参考以下文章
如何在部署前从@aws-cdk/aws-appsync 检索 schema.graphql 文件
如何从命令行向 AWS AppSync 发送 GraphQL 查询?
如何操作 AWS AppSync 和 GraphQL 以符合 DynamoDB 最佳实践?
如何在 Graphql 架构级别检查 AWS AppSync OIDC 指令的角色或权限