AWS AppSync中的N + 1个查询

时间:2018-08-10 13:50:14

标签: amazon-web-services aws-lambda graphql aws-appsync

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

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

AWS在解析程序中引入了BatchInvoking lambda,以解决此问题。在这里,您可以阅读有关问题及其解决方案的更多信息:https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-lambda-resolvers.html#advanced-use-case-batching

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

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

1 个答案:

答案 0 :(得分:0)

要处理多个aws lambda执行,一种选择是使用AWS Step Functions。 AWS Step函数是一项稳定的服务,可解决可能在数组/记录上进行迭代的用例。

您可以设计step函数来遍历数组记录,并为每个数组项调用一个单独的lambda(无限制)。

此处是有关如何将AppSync连接到Step Function的文档的示例: https://aws.amazon.com/blogs/mobile/invoke-aws-services-directly-from-aws-appsync/

有关使用AWS Step Functions实现循环的文档: https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-create-iterate-pattern-section.html

一些代码示例: https://github.com/aws-samples/aws-appsync-long-query