0

我正在构建一个自定义导入工具,想知道导入大量数据的最佳实践是什么。我有以下 JSON 数据结构,每次导入 30 天内至少有 500 种产品。

"rows": [{
        "product_uid": "k110",
        "sale_date": "2018-06-06",
        "amount": 15
    }, {
        "product_uid": "k111",
        "sale_date": "2018-06-06",
        "amount": 22
    }, {
        "product_uid": "k110",
        "sale_date": "2018-06-07",
        "amount": 30
    }
]

表的架构如下:

daily_sales_id - product_uid - sale_date - amount

我正在使用nodejs mysql在单个连接中执行多个 SQL 语句。它适用于第一次插入行,但在随后的尝试中,它将插入重复的行。我可以在插入之前截断表,但如果用户决定导入增量快照而不是整个记录,这将失败。

虽然我可以执行一个 for 循环来检查记录是否存在并进行更新而不是插入,但循环 15,000 多条记录并创建 15,000 多个选择连接似乎不是一个好主意。

是否有任何其他替代方法可以保留数据结构并执行更新/插入而无需遍历 15,000 多条记录?导入 csv 文件不知道 daily_sales_id。

4

1 回答 1

0

这里的一个选项是在将表中的记录定义为重复的列上添加唯一索引,如下所示:

CREATE UNIQUE INDEX your_idx ON yourTable(product_uid, sale_date);

这样做的最终结果是,尝试使用表中已经存在的product_uid/组合添加新记录的插入将在数据库级别失败。sale_date您当然需要一些 Node.js 代码来处理这个问题,但这应该不是很困难。

于 2018-06-06T06:44:12.170 回答