在AWS AppSync中的N+1查询

61

当使用AWS AppSync和lambda数据源时,您可能会遇到N+1查询问题。

基本上,当您在类型上有单独的字段解析器并且您的查询返回这些类型的数组时,您的字段解析器lambda将被调用N次。

AWS引入了BatchInvoking lambdas来解决这个问题。您可以在此处阅读关于该问题及其解决方案的更多信息:https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-lambda-resolvers.html#advanced-use-case-batching

然而,他们的解决方案并不起作用。BatchInvoking lambdas仅限于5个事件(文档中没有说明)。 这是对N+1问题的轻微改进(它使其变为N/5+1),但我认为这还不够,因为更复杂的查询往往需要执行很长时间并且需要更多的lambda调用。

所以我的问题是,您如何解决这个问题? 有没有更好的解决方案?


10
我在AWS AppSync团队工作,很乐意将此视为自定义批量调用批处理大小的功能请求进行传递。 - Karthik
5
半年过去了,仍然没有解决方法。@Karthik,它在路线图上吗? - Nikola Petkanski
3
我建议现在选择使用 Apollo GraphQL,你可以将 Apollo 服务器托管在传统的 AWS EC2 实例上,甚至可以选择 AWS Lambda。 - AlpacaGoesCrazy
1
这个问题有任何更新吗?这是一个严重的限制。 - niqui
2
刚刚用干净的设置再次测试了一下,这种未记录且无法更改的行为仍然存在。在三年内没有添加它之后,您会期望AWS至少记录此行为,但事实并非如此。 - Bram
显示剩余7条评论
3个回答

3

在Appsync解决其问题之前,我们使用Apollo服务器作为ECS中的网关来拼接使用Prisma创建的模式,并在那里直接调用Lambda。

对于您的请求,您可以在他们的GitHub存储库中跟进功能请求,但遗憾的是该请求没有取得很多进展。 https://github.com/aws/aws-appsync-community/issues/51


3
AWS刚刚使得AWS AppSync Lambda解析器的批处理大小可配置(官方博客帖子)。
现在,开发人员可以轻松地在其直接Lambda解析器上启用批处理,并为其解析器配置最大批处理大小(最高可达2000,而不是之前的默认固定值5)。对于使用Lambda函数数据源的AppSync流水线函数,同样提供了相同的功能。 官方文档已经更新为:
您可以通过配置解析器上的maxBatchSize来启用直接Lambda解析器的批处理。当maxBatchSize对于直接Lambda解析器设置为大于0的值时,AWS AppSync会将请求以大小最多为maxBatchSize的批次发送到您的Lambda函数中。
在直接Lambda解析器上将maxBatchSize设置为0会关闭批处理。
使用控制台

您可以通过AWS控制台为每个解析器配置它:

AWS AppSync Lambda resolvers configurable batching size in console

使用CLI

AWS CLI V2AWS CLI V1中使用--max-batch-size参数

aws appsync update-resolver \
  --api-id <value> \
  --type-name <value> \
  --field-name <value> \
  --max-batch-size <value>

使用CloudFormation

属性名称为MaxBatchSize,可以在AWS::AppSync::ResolverAWS::AppSync::FunctionConfiguration上设置。

MyResolver:
  Type: AWS::AppSync::Resolver
  Properties:
    ApiId: MyApiId
    DataSourceName: MyDataSourceName
    TypeName: MyTypeName
    FieldName: MyFieldName
    MaxBatchSize: 100

本周将发布官方CloudFormation文档更新。

-1

请勿发布链接,因为它们可能会被删除。复制链接中的信息,并提供所寻找答案的部分。 - Derek Lawrence
1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接