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请求。

有三个阶段:

  1. 聚合阶段: Loader对象上的任何请求都会延迟到process.nextTick
  2. 批处理阶段: Loader只需调用您提供的myBatchGetUsers函数以及所有请求的键的组合。
  3. 拆分阶段:结果是“拆分”,所以input请求得到所需的部分响应。

这就是为什么在你提供的例子中,你应该只有两个请求:

  • 一个用于用户1和2
  • 然后为相关用户( invitedByID

例如,要用mongodb来实现这个function,你应该定义myBatchGetUsers函数来恰当地使用find方法:

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