gpt4 book ai didi

javascript - Dataloader 如何缓存和批处理数据库请求?

转载 作者:数据小太阳 更新时间:2023-10-29 05:31:54 26 4
gpt4 key购买 nike

查看 DataLoader library ,它是如何缓存和批处理请求的?

指令以下列方式指定用法:

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}`));

但我不清楚 load 函数是如何工作的,以及 myBatchGetUsers 函数可能是什么样子。如果可能的话,请给我一个例子!

最佳答案

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

分为三个阶段:

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

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

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

例如,要使用 mongodb 实现此功能,您应该只定义 myBatchGetUsers 函数以适本地使用 find 方法:

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

关于javascript - Dataloader 如何缓存和批处理数据库请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42073880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com