You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Batching, caching and simplification of Sequelize with facebook/dataloader
How it works
dataloader-sequelize is designed to provide per-request caching/batching for sequelize lookups, most likely in a graphql environment
API
createContext(sequelize, object options)
Should be called after all models and associations are defined
sequelize a sequelize instance
options.max=500 the maximum number of simultaneous dataloaders to store in memory. The loaders are stored in an LRU cache
Usage
import{createContext,EXPECTED_OPTIONS_KEY}from'dataloader-sequelize';/* Per request */constcontext=createContext(sequelize);// must not be called before all models and associations are definedawaitUser.findById(2,{[EXPECTED_OPTIONS_KEY]: context});awaitUser.findById(2,{[EXPECTED_OPTIONS_KEY]: context});// Cached or batched, depending on timing
Priming
Commonly you might have some sort of custom findAll requests that isn't going through the dataloader. To reuse the results from a call such as this in later findById calls you need to prime the cache:
import{createContext,EXPECTED_OPTIONS_KEY}from'dataloader-sequelize';constcontext=createContext(sequelize);constresults=awaitUser.findAll({where: {/* super complicated */}});context.prime(results);awaitUser.findById(2,{[EXPECTED_OPTIONS_KEY]: context});// Cached, if was in results
About
Batching and simplification of Sequelize with facebook/dataloader