2017-02-06 19 views
5

w jaki sposób pamięci podręczne dataloader i partie żądania i zapisuje w kluczu.Dataloader do buforowania i grupowania żądanie bazy danych

https://github.com/facebook/dataloader

Tu i wymagają DataLoader pakiet i utworzyć instancję, ale jak to działa ABY Pomysły ........................ ........... dla databses zapytaniu prosimy podać przykład dla tabeli db find

var DataLoader = require('dataloader') 

    var userLoader = new DataLoader(keys => myBatchGetUsers(keys)); 

userLoader.load(1) 
    .then(user => userLoader.load(user.invitedByID)) 
    .then(invitedBy => console.log(`User 1 was invited by ${invitedBy}`)); 

// Elsewhere in your application 
userLoader.load(2) 
    .then(user => userLoader.load(user.lastInvitedID)) 
    .then(lastInvited => console.log(`User 2 last invited ${lastInvited}`)); 

Odpowiedz

1

narzędzie DataLoader z Facebook działa łącząc żądania wejściowe z funkcją wsadowego trzeba dostarczyć. Działa tylko z żądaniami, które używają Identifiers.

Są trzy fazy:

  1. Agregacja faza: Wszelkie prośby o obiekcie Loader jest opóźnione aż process.nextTick
  2. faza Batch: The Loader zadzwoń funkcja myBatchGetUsers podałeś z kombinacją wszystkich wymaganych Klawiatura.
  3. Faza podziału: wynik jest następnie "dzielony", więc żądania wejściowe otrzymują pożądaną część odpowiedzi.

Dlatego w przewidzianym przykład trzeba mieć tylko dwa wnioski:

  • jedna dla użytkowników 1 i 2
  • następnie jeden dla powiązanych użytkowników (invitedByID)

wdrożyć to na przykład z mongodb, powinieneś po prostu zdefiniować funkcję myBatchGetUsers, aby odpowiednio zastosować metodę :

function myBatchGetUsers(keys) { 
    // usersCollection is a promisified mongodb collection 
    return usersCollection.find(
     { 
      _id: { $in: keys } 
     } 
    ) 
}