我读过GraphQL规范,找不到避免1 N * number_of_nested调用的方法,我错过了什么?
即,查询具有类型客户端,其具有嵌套的订单和地址,如果有10个客户端,则它将为每个客户端执行10个客户端10个调用的调用.每个client.addresses调用10个调用.
有办法避免这种情况吗?并不是说它与缓存UUID的东西不一样,那些都是不同的值,如果你的GraphQL指向一个可以连接的数据库,它就会非常糟糕,因为你可以对任意数量的客户端进行3次查询.
我问这个是因为我想将GraphQL与能够以有效方式获取嵌套资源的API集成,如果有一种方法可以在解析之前解决整个图形,那么尝试在一次调用中放置一些嵌套的东西会很不错.
或者我弄错了,GraphQL只能用于微服务?
最佳答案 这是GraphQL的“解析器架构”的难点之一.您必须通过在每个解析器中执行大量I / O来避免产生大量网络延迟.使用SQL DBMS的应用程序通常会首先解决N 1问题.您需要使用一些批处理和/或缓存技术来解决这个问题.
如果您在服务器上使用Node.js,我有两个建议的工具:
> DataLoader – 与数据库无关的工具,用于为每个字段批处理解析器并缓存单个记录.
> Join Monster – 一个SQL定制的工具,可以读取每个查询和您的模式,并为您编译SQL查询.它利用JOIN和DataLoader样式的批处理在几个(或单个)SQL查询中从表中获取数据.