2016-09-04 39 views
8

powiedzmy, że mamy następujące graphql schematu:Optymalizacja graphql bazie zapytań

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

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

a następnie wykonywanie kwerendy jak:

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

Jeśli, na przykład, mamy 10 książek, a potem będziemy kończyć 10 zapytań autora, ponieważ funkcja rozstrzygania będzie wywoływana dla każdej pobranej książki:

select id, name from author where id = 123 

Zamiast tego możemy wykonać wszystkie zapytania autora jako jednego zapytania:

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

Czy istnieje kilka rozwiązań pracy, najlepsze praktyki, techniki lub coś, co może przyczynić się do osiągnięcia tego celu?

Odpowiedz

8

Dataloader to Twoja odpowiedź, ma funkcję grupowania, co oznacza, że ​​będzie kolejkować wszystkie identyfikatory. I dopiero po jego gotowy będzie ciągnąć go jako partia Demo można znaleźć tutaj: https://youtu.be/UBGzsb2UkeY (ostatnie 5 minut w szczególności) Algorithem wyjaśnił można znaleźć tutaj: https://youtu.be/OQTnXNCDywA

Enjoy :)

4

DataLoader to świetne rozwiązanie, które jest niezależne od bazy danych. Jeśli używasz języka SQL, Join Monster jest bardziej dostosowany do relacyjnych baz danych, a nawet przetłumaczy kwerendy GraphQL na SQL bezpośrednio za pomocą pojedynczego obiegu. Inną alternatywą jest graph-joiner.