gpt4 book ai didi

mysql - Node.js脚本过早退出

转载 作者:行者123 更新时间:2023-11-29 09:25:08 26 4
gpt4 key购买 nike

在这里向新手保证。

我正在尝试从 mongodb 中的 asset 数据库、Equipment 表中检索 icon_name 字段
并更新equipments数据库中的icon_id字段,mysql中的equipments表。

我在 Equipment 中有大约 12,000 strip 有 icon_name 字段的记录。

脚本运行成功,但似乎没有遍历所有记录。当我检查 equipments 表时,只更新了大约 3,000 条记录。

我多次尝试运行该脚本,每次似乎都会更新一些记录。

我怀疑数据库连接在所有查询完成之前就已关闭,但由于我使用 Promise.all 我不知道为什么会发生这种情况。

这是脚本

const _ = require('lodash'),
debug = require('debug')('update'),
Promise = require('bluebird')

const asset = require('../models/asset'),
equipments = require('../models/equipments')

const Equipment = asset.getEquipment(),
my_equipments = equipments.get_equipments(),
icons = equipments.get_icons()

Promise.resolve()
.then(() => {

debug('Retrieve asset equipments, icons')
return Promise.all([
icons.findAll(),
Equipment.find({ icon_name: { $ne: null } })
])
})
.then(([my_icons, asset_equipments]) => {
debug('Update equipments')
const updates = []

console.log(asset_equipments.length)
asset_equipments.forEach((aeq, i) => {

const icon_id = my_icons.find(icon => icon.name === aeq.icon_name).id
up = my_equipments.update(
{ icon_id },
{ where: { code: aeq.eq_id } }
)

updates.push(up)
})


return Promise.all(updates)
})
.then(() => {
debug('Success: all done')
asset.close()
equipments.close()
})
.catch(err => {
debug('Error:', err)
asset.close()
equipments.close()
})

提前致谢。

最佳答案

代码看起来不错,但并行生成 12000 个 promise 可能会在数据库连接级别上造成一些问题。我建议对并发请求进行批处理并将其限制为 100 个。您可以使用 batch-promises ( https://www.npmjs.com/package/batch-promises )

基本上是这样的

return batchPromises(100, asset_equipments, aeq => {
const icon_id = my_icons.find(icon => icon.name === aeq.icon_name).id;
return my_equipments.update({ icon_id }, { where: { code: aeq.eq_id } });
});

关于mysql - Node.js脚本过早退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59730530/

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