Я получил данные из таблицы tb_project_milestones и хочу вставить этот projectMilestoneRow в таблицу tb_xyz, используя потоки.Я проверил документацию , но не смог найти, как это реализовать.Кто-нибудь реализовал чтение через потоки и вставку через потоки в MySQL.
let insertProjectMilestones = [];
const getProjectMilestones = executeQueryStream.query('SELECT * FROM tb_project_milestones WHERE project_id = ? ');
getProjectMilestones
.on('error', function(err) {
// Handle error, an 'end' event will be emitted after this as well
})
.on('result', function(projectMilestoneRow) {
// Pausing the connnection is useful if your processing involves I/O
connection.pause();
processRow(projectMilestoneRow, function() {
_.each(payload.projects, (project_id)=> {
_.each(projectMilestoneRow, (el)=> {
insertProjectMilestones.push([el.project_milestone_id, el.name, el.prefix, el.short_name, el.description, el.pre_requisites, project_id,
el.milestone_template_id, el.generic_milestone_id, el.planned_date, el.actual_date, el.forecast_date,
el.planned_date_only, el.forecast_date_only, el.actual_date_only, el.planned_time_only, el.forecast_time_only, el.actual_time_only,
el.planned_date_formula, el.actual_date_formula, el.forecast_date_formula, el.planned_date_is_active, el.forecast_date_is_active,
el.actual_date_is_active, el.creation_datetime, el.allow_notes, el.forecast_date_allow_notes, el.actual_date_allow_notes,
el.planned_date_allow_notes, 0, el.requires_approval]);
});
});
connection.resume();
});
})
.on('end', function() {
// all rows have been received
});
EDIT
Я использовал потоки в этом случае, потому что миллионы записей извлекаются из tb_project_milestones изатем вставляется в массив (после манипуляции), а затем помещается в другую таблицу.
Учитывая тот факт, что добавление этих многочисленных строк в массиве увеличит объем памяти узла, о котором я подумал, используя поток здесь.
Является ли поток лучшим выбором или я могу просто внедрить пакетную вставку в БД с использованием транзакций?