哪些情况会导致 AppSync 无法从 DynamoDB 表中返回所有匹配的记录/项目?

Posted

技术标签:

【中文标题】哪些情况会导致 AppSync 无法从 DynamoDB 表中返回所有匹配的记录/项目?【英文标题】:What cases will cause AppSync to not return all matching records/items from the DynamoDB table? 【发布时间】:2019-10-26 01:44:51 【问题描述】:

我们看到了一些奇怪的行为,其中并非所有项目都在 AppSync 查询中返回。数据库表有 31 项,但下面的查询只返回 10 项?

query listAllDocuments 
        listDocuments 
          items
            userId
          
      
  

这是一个简单的 DynamoDB 解析器:


    "version" : "2017-02-28",
    "operation" : "Scan",
    "filter": #if($ctx.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end,

其他查询(使用过滤器)也返回一些实际匹配文档的子集。

【问题讨论】:

【参考方案1】:

不确定您是否粘贴了所有解析器代码。如果您使用自动生成的 listX 解析器,它默认返回 10 个项目。试试

query listAllDocuments 
        listDocuments(limit: 100)  // anything larger than 31
          items
            userId
          
      
  

您将获得全部 31 个。在github thread 中查找更多详细信息

【讨论】:

这就是所有的解析器代码 - 没有限制。【参考方案2】:

使用扫描时默认限制为 10,以防止您的表格变褐。在您的 VTL 映射模板中,指定更高的限制以获取所有项目。请参阅 https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-scan 以指定此限制。您可以将限制设置为任意高;一旦达到表中的项目总数或限制,以较小者为准,DynamoDB 将停止。

【讨论】:

以上是关于哪些情况会导致 AppSync 无法从 DynamoDB 表中返回所有匹配的记录/项目?的主要内容,如果未能解决你的问题,请参考以下文章

Golang 哪些情况会导致协程泄露?

Golang 哪些情况会导致协程泄露?

在 AppSync 中获取“软件导致连接中止”

无法从 Lambda 调用 AppSync GraphQL api:TypeError:无法读取 null 的属性“匹配”

『叶问』#39,都有哪些情况可能导致MGR服务无法启动

mysql 理解索引,添加索引,使用索引(哪些情况会导致索引失效)