【发布时间】:2020-10-25 22:03:13
【问题描述】:
我在我的 node js 项目中使用 sequelize 和 Postgresql。 我正在解析一些表并在我的数据库中更新它的副本。想象一下,如果我此刻在外部表中有 50000 条记录,10 分钟后的差异约为 5%。我不需要删除,只需要创建新的。我用过
Model.bulkCreate(data, { ignoreDuplicates: true });
在数据库中进行 2 小时的工作解析后,计数约 100 000 条记录,但最后约 1 000 000 条记录的 id。看起来像 ignoreDuplicates: true autoincrements id。如何在没有太多 cpu 使用的情况下避免它? updateOnDuplicate 是否也在做同样的事情?
我找到的最快的方法是
const _ = require('lodash');
// some code
let existing = await Model.findAll({ attributes: [uniqColumn] });
let toCreate = _.differenceBy(data, existing, uniqColumn);
await Model.bulkCreate(toCreate);
【问题讨论】:
-
你能显示一个对应于 t
Model.bulkCreate(data, { ignoreDuplicates: true });的 SQL 查询吗(例如尝试插入 1 行)? -
@Anatoly,
Executing (default): INSERT INTO "table_name" ("id","col1") VALUES (DEFAULT,'value1') ON CONFLICT DO NOTHING RETURNING "id","col1","col2", ...;其中 col1 是 uniq -
INSERT对我来说看起来不错,它只是忽略了所有通过任何唯一约束与现有行冲突的传入行。您可以手动执行一个包含相同唯一列值的INSERT并检查id是否增加了吗? -
@Anatoly, pastebin.com/0D5Seru0
-
@ВладимирГоворухин 有什么更新吗?我有同样的问题
标签: node.js postgresql sequelize.js