gpt4 book ai didi

sql - 使用node js对SQL Server中的大量记录运行create或update

转载 作者:行者123 更新时间:2023-12-03 22:38:22 28 4
gpt4 key购买 nike

尝试运行一个大型脚本,大约 700,000 条记录从一个源同步到 Azure 数据库。

我目前正在使用 Sequelize 来实现这一点。运行此脚本时,同步 400 条记录大约需要 1 分钟,这太慢了。

我希望使用 bulkCreate 函数,但使用 updateOnDuplicate 方法与 mssql https://sequelize.readthedocs.io/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance 不兼容

到目前为止我是如何实现这一目标的:

模型

employees: this.sequelize.define(
'employee',
{
_id: {
type: Sequelize.STRING(24),
primaryKey: true,
},
title: Sequelize.STRING,
initials: Sequelize.STRING,
surname: Sequelize.STRING,
forename: Sequelize.STRING,
middle_names: Sequelize.STRING,
legal_surname: Sequelize.STRING,
legal_forename: Sequelize.STRING,
gender: Sequelize.STRING(10),
date_of_birth_date: Sequelize.DATE
{
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at',
indexes: [],
}
),

同步代码:
 async saveSQLResults(model: string, data: any) {
for(const item of data) {
const dbItem: any = await this.SQLSchemas[model]
.findOne({ where: { _id: item._id } });
if(dbItem) {
await dbItem.update(item);
} else {
await this.SQLSchemas[model].create(item);
}
}
}

最佳答案

你可以同时做一些事情来帮助加快速度。目前,您的 for(const item of data) 循环正在执行查找+更新/创建系列操作。即使数据库“慢”,并行执行更多操作总体上也会更快。

您可以尝试使用 Promise.all[] 将它们全部并行处理。或者尝试使用 Bluebird library 并行运行几个(但仅限于 {concurrency: 3} )。

关于sql - 使用node js对SQL Server中的大量记录运行create或update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55029607/

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