Допустим, у меня есть скрипт, который обрабатывает N пользователей. Скрипт может выглядеть одним из двух способов, который быстрее предполагает наличие достаточных ресурсов? Я мог бы использовать либо Promise.all
, либо async.parallel
.Масштабирование в Node.js с помощью MongoDB, когда я должен запрашивать все идентификаторы сразу, а также параллельно запрашивать каждый из них?
Вариант 1
function processUsers(userIds) {
monog.find({_id: { $in: userIds }, (userDocs) => {
const tasks = userDocs.map((userDoc) => processUser(userDoc))
async.parallel(tasks, (err, results) => console.log('finished'))
});
}
Вариант 2
function processUsers(userIds) {
const tasks = userIds.map((userId) => {
mongo.findOne({_id: userId}, (err, userDoc) => {
processUser(userDoc);
})
})
async.parallel(tasks, (err, results) => console.log('finished'))
}
В варианте 2 вы выполняете целую цепочку больше запросов db, что займет много больше времени, чем один запрос. Это вопрос с подвохом? :-) –