我需要遍历一个包含大约2百万个文档的MongoDb集合。因此,我使用了游标特性和
应用程序不需要太多的CPU(0.2%-1%),也不需要太多的RAM或IOPs。因此,显然我的代码可以优化以加快这个过程。 代码:
eachAsync
函数。然而,我发现它非常慢(需要超过40分钟)。我尝试了不同的batchSizes,最高达到5000(这只需要对MongoDB进行400次查询)。应用程序不需要太多的CPU(0.2%-1%),也不需要太多的RAM或IOPs。因此,显然我的代码可以优化以加快这个过程。 代码:
const playerProfileCursor = PlayerProfile.find({}, { tag: 1 }).cursor({ batchSize: 5000 })
const p2 = new Promise<Array<string>>((resolve, reject) => {
const playerTags:Array<string> = []
playerProfileCursor.eachAsync((playerProfile) => {
playerTags.push(playerProfile.tag)
}).then(() => {
resolve(playerTags)
}).catch((err) => {
reject(err)
})
})
当我在eachAsync函数体内设置断点时,它会立即被触发。所以没有任何卡顿,只是速度非常慢。有没有办法加速这个过程?
tag
,并找到这些标签数组的联合。 - kentor