Dataloader用于缓存和批处理数据库请求

ter*_*poe 7 javascript node.js dataloader

dataloader如何在密钥中缓存和批量请求和存储.

https://github.com/facebook/dataloader

在这里,我需要dataloader包并创建一个实例,但它如何工作aby想法................................. ..请查询数据库查询,为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}`));
Run Code Online (Sandbox Code Playgroud)

Séb*_*ien 4

Facebook 的 DataLoader 实用程序的工作原理是将输入请求与您必须提供的批处理函数结合起来。它仅适用于使用Identifiers.

分为三个阶段:

  1. 聚合阶段:对对象的任何请求Loader都会被延迟,直到process.nextTick
  2. 批处理阶段:Loader只需myBatchGetUsers使用所有请求的密钥的组合调用您提供的函数。
  3. 分割阶段:然后将结果“分割”,以便输入请求获得响应的所需部分。

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

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

例如,要使用 mongodb 实现此功能,您只需定义 myBatchGetUsers 函数即可find正确使用该方法:

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