【问题标题】:Optimizing graphql database queries优化 graphql 数据库查询
【发布时间】:2017-01-11 19:10:25
【问题描述】:

假设我们有以下 graphql 架构:

type Author : Object {  
  id: ID!
  name: String,
  books: [Book]
}

type Book : Object {  
  id: ID!
  title: String
  authorId: Int
  author: Author
}

然后进行如下查询:

{
    books: {
        id 
        title
        author { id name }
    }
}

例如,如果我们有 10 本书,那么我们将得到 10 个作者查询,因为将为每本书调用 resolve 函数:

select id, name from author where id = 123

我们可以将所有作者查询作为单个查询执行:

select id, name from author where id in (123, 456, 789, 1011)

是否有一些可行的解决方案、最佳实践、技术或可以帮助实现这一目标的东西?

【问题讨论】:

    标签: graphql graphql-js


    【解决方案1】:

    DataLoader 是一个很棒的与数据库无关的解决方案。如果您使用 SQL,Join Monster 更适合关系数据库,甚至可以通过单次往返将 GraphQL 查询直接转换为 SQL。另一种选择是graph-joiner

    【讨论】:

      【解决方案2】:

      Dataloader 是您的答案,它具有批处理功能,这意味着它将对所有 ID 进行排队。只有当它准备好时,它才会将它作为一批拉出来 演示可以在这里找到: https://youtu.be/UBGzsb2UkeY(特别是最后5分钟) 可以在此处找到解释的算法: https://youtu.be/OQTnXNCDywA

      享受:)

      【讨论】:

        猜你喜欢
        • 2011-02-27
        • 1970-01-01
        • 2019-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多