GraphQL + 中继连接优化

Posted

技术标签:

【中文标题】GraphQL + 中继连接优化【英文标题】:GraphQL + Relay Connection Optimization 【发布时间】:2016-12-09 07:20:34 【问题描述】:

使用 Relay + GraphQL (graphql-relay-js) 连接并尝试确定优化对数据源等的查询的最佳方式。

一切正常,但在连接结果被切片时效率低下。在下面的查询示例中,商品的解析器将获得 200 多条销售记录 727506341339,而实际上我们只需要返回 1 条。

我应该注意,为了满足这个请求,我们实际上做了两个数据库查询: 1.获取与销售相关的所有物品ID 2.获取每个item id的item数据。

在测试和审查 graphql-relay-js src 时,看起来切片发生在最终的连接解析器上。

是否提供了一种方法,缺少嵌套连接或改变 connectionFromArray 的切片结果,这将允许我们对提供给连接的结果(项目 ID)进行切片,然后在连接解析器中获取项目详细信息切片 id 结果集?这将优化第二个查询,因此我们只需要查询 1 个项目的详细信息,而不是所有项目...

显然我们可以实现一些自定义或嵌套连接,尽管这似乎是有用的,因此我觉得我在这里遗漏了一些东西......

示例查询:

query ItemBySaleQuery 
    viewer 
      item (sale: 727506341339) 
        items (first:1)
          edges 
            node 
              dateDisplay,
              title
            
                       
        
      
    
  

【问题讨论】:

您可以通过我在以下链接中的回答来解决您的问题:***.com/questions/34948216/… 【参考方案1】:

不幸的是,graphql-relay-js 库中没有记录该解决方案...

连接可以使用 resolveNode 函数直接在边缘节点上工作。示例:https://github.com/graphql/graphql-relay-js/blob/997e06993ed04bfc38ef4809a645d12c27c321b8/src/connection/tests/connection.js#L64

【讨论】:

以上是关于GraphQL + 中继连接优化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 Typescript 的泛型将中继(graphql)连接映射到边缘节点

将没有 ID 字段的表用于 GraphQL 服务器进行中继

分离 graphql/relay 后端和前端

GraphQL,中继:处理错误

GraphQL 和中继过滤 UI

我对中继和graphql解析方法感到困惑