Как я должен импортировать большой объем данных в MySQL через nodejs? - PullRequest
0 голосов
/ 06 июня 2018

Я создаю пользовательский инструмент импорта и задаюсь вопросом, что было бы лучшим способом импорта большого количества данных.У меня есть следующая структура данных JSON с минимумом 500 продуктов за 30 дней на импорт.

"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.

1 Ответ

0 голосов
/ 06 июня 2018

Здесь можно добавить уникальный индекс для столбцов, которые определяют запись в вашей таблице как дубликат, примерно так:

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

Чистый результат этого - вставка, котораяПопытка добавить новую запись с комбинацией product_uid / sale_date, которая уже существовала в таблице, потерпит неудачу на уровне базы данных.Конечно, для этого вам понадобится код Node.js, но это не должно быть очень сложным.

...