我读过GraphQL规范,却找不到避免1+N* number_of_nested调用的方法,是不是遗漏了什么?
也就是说,查询有一个具有嵌套订单和地址的类型客户端,如果有10个客户机,它将对10个客户机执行1次调用+对每个client.orders执行10次调用+对每个client.addresses执行10次调用。
有什么办法可以避免这种情况吗?并不是说它与缓存UUID不一样,这些都是不同的值,如果您GraphQL指向一个可以进行连接的数据库,这将是非常糟糕的,因为您可以对任意数量的客户端执行3次查询。
我之所以这样问是因为我想将GraphQL与一个能够高效地获取嵌套资源的API集成起来,如果在解析之前有一种解决整个图的方法,那么最好尝试在一个调用中添加一些嵌套的内容。
或者我搞错了,GraphQL只适用于微服务?
发布于 2017-03-18 23:25:25
这是GraphQL“解析器体系结构”的难点之一。通过在每个解析器中执行大量的I/O操作,您必须避免产生大量的网络延迟。使用SQL的应用程序通常一开始就会遇到N+1问题。您需要使用一些批处理和/或缓存技术来解决这个问题。
如果您在服务器上使用Node.js,我建议您使用两个工具:
发布于 2017-03-17 13:28:36
我认为,您所讨论的是在SQL数据库后端中使用GraphQL。该标准本身与数据库无关,它并不关心,您将如何解决代码中可能出现的N+1选择问题。尽管如此,GraphQL服务器的特定服务器端实现引入了许多不同的方法来缓解这个问题:
https://stackoverflow.com/questions/42855932
复制相似问题