DataLoader
Architecture 🟡 MidDefinition
Utilitaire qui batch et cache les requetes de donnees pour resoudre le probleme N+1 dans GraphQL. Regroupe les appels DB d'un meme tick en une seule requete.
Analogie
Un serveur qui attend que toute la table ait commande avant d'aller en cuisine, au lieu de faire un aller-retour par personne.
Exemple de code
const userLoader = new DataLoader(async (ids) => {
const users = await db.users.findByIds(ids);
return ids.map(id => users.find(u => u.id === id));
});
// userLoader.load(1); userLoader.load(2); -> 1 query
Cas d'usage
Resolvers GraphQL qui chargent des entites liees pour eviter N+1 requetes.
Anti-pattern
Un SELECT par resolver sans batching — 100 items = 100 requetes DB.