【发布时间】:2021-06-08 07:49:03
【问题描述】:
我有一个超过 10M 行的 redis,我想将所有数据复制到 sql server db,目前我编写了一个 nodejs 脚本来传输数据,如下所示
redis.scan(cursor, "MATCH", "*_*", "COUNT", "100", function (err, res) {
var keys = res[1];
cursor = res[0];
keys.forEach(function (id) {
redis.hgetall(id, function (err, items) {
let splited = Object.keys(items)[0].split("#");
let data = {
customerId: splited[0],
orderId: splited[1],
};
sql.connect(config).then((pool) => {
pool.request().query(
`INSERT INTO [dbo].[Bi]
([CustomerId]
,[OrderId]
,[AddressId])
SELECT
${data.customerId}
,${data.orderId}
,[dbo].[Address].Id
FROM [dbo].[Address] where CustomerId = ${data.customerId}`
)
})
})
})
})
但是需要 1 天才能完成,那么我应该如何优化脚本或者有没有其他方法可以传输数据?
【问题讨论】:
-
这能回答你的问题吗? Bulk inserting with Node mssql package
-
是一次性的还是要定期将其同步到 MySQL?
-
@GuyKorland 我想定期运行它,可能每 3 天运行一次
-
@Charlieface tnx 但没有,因为我在另一个表的查询中得到“Address.Id”
-
创建一个本地临时表(单个
#),批量插入其中,添加一个好的索引(看起来CustomerId, OrderId可以正常工作),然后执行standard joined insert。当连接关闭时,您的临时表将被删除
标签: node.js sql-server redis