假设我有大量的ID,大约10,000个项目。每个ID都是由数字组成的唯一字符串,大约20个字符。
['438122955667406858', '427968416155041792', '427968416155041792', '387734570570743849'...]
我还有一个数据库表,其中ID对应于数组中的ID。表中的ID是不唯一,表可以有多个ID匹配的行,如下所示:
所以问题出现在这里:10,000个ID的数组分为10个左右的进程,因此每个进程的共享大约为1000个唯一ID。每个进程必须从数据库中请求20 + k个条目,其ID在进程中的任何行。分享ID。
最后一个问题是,构建一个大的[Op.or]语句,让SQL服务器完成工作会更好吗:
table.findAll({
where: {
guild: {
[Op.or]: ThousandIDArray,
}
}
}).then(rows => rows.forEach(r => doSomething()))
或请求所有行,并按进程手动过滤?
table.findAll().then(rows => {
rows.forEach(r => {
if (ThousandIDArray.includes(r.guild)) doSomething();
})
})
答案 0 :(得分:0)
如果我正确地理解了你的问题,你就不会通过将工作分成1000组来保存任何东西。将所有感兴趣的ID放在一个数组中会更简单,并执行以下操作:
let result = await [model].findAll({
where: {
[Op.in]: [uuid, uuid, uuid, uuid, ...]
}
});