优化graphql数据库查询

Use*_*age 8 graphql graphql-js

让我们说我们有以下graphql架构:

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

type Book : Object {  
  id: ID!
  title: String
  authorId: Int
  author: Author
}
Run Code Online (Sandbox Code Playgroud)

然后进行如下查询:

{
    books: {
        id 
        title
        author { id name }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

select id, name from author where id = 123
Run Code Online (Sandbox Code Playgroud)

除此之外,我们可以将所有作者查询作为单个查询执行:

select id, name from author where id in (123, 456, 789, 1011)
Run Code Online (Sandbox Code Playgroud)

是否有一些工作解决方案,最佳实践,技术或某些有助于实现这一目标的东西?

Hag*_*iCo 8

Dataloader是你的答案,它具有批处理功能,这意味着它将排队所有ID.只有一旦准备就可以将它作为批量演示在这里找到:https: //youtu.be/UBGzsb2UkeY(特别是最后5分钟)Algorithem解释可以在这里找到:https: //youtu.be/OQTnXNCDywA

请享用 :)


And*_*son 5

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