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:getDataSummarylistDataSummary。让我吃惊的是,当我列出 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 指令的角色或权限

如何将枚举类型字段从反应发送到 GraphQL/AWS appsync

如何在 AWS AppSync GraphQL 架构上处理多个 @auth 指令?