Dataloader进行caching和批量数据库请求
dataloader如何caching和批量请求并存储在一个密钥中。
https://github.com/facebook/dataloader
在这里,我需要dataloader包和创build一个实例,但它是如何工作的思想……………………………数据库查询请为db查找表提供一个示例
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}`));
Facebook的DataLoader实用程序通过将input请求与您必须提供的批处理function相结合。 它只适用于使用Identifiers
请求。
有三个阶段:
- 聚合阶段:
Loader
对象上的任何请求都会延迟到process.nextTick
- 批处理阶段:
Loader
只需调用您提供的myBatchGetUsers
函数以及所有请求的键的组合。 - 拆分阶段:结果是“拆分”,所以input请求得到所需的部分响应。
这就是为什么在你提供的例子中,你应该只有两个请求:
- 一个用于用户1和2
- 然后为相关用户(
invitedByID
)
例如,要用mongodb来实现这个function,你应该定义myBatchGetUsers函数来恰当地使用find
方法:
function myBatchGetUsers(keys) { // usersCollection is a promisified mongodb collection return usersCollection.find( { _id: { $in: keys } } ) }