Как оптимизировать использование ЦП и памяти при создании больших файлов CSV с помощью Node.js и Sequelize?Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как оптимизировать использование ЦП и памяти при создании больших файлов CSV с помощью Node.js и Sequelize?

Сообщение Anonymous »


Я разрабатываю приложение Node.js, которое генерирует отчеты CSV на основе данных, полученных с помощью Sequelize из базы данных PostgreSQL. Хотя решение хорошо работает для небольших наборов данных, загрузка ЦП возрастает до 100 %, а потребление памяти значительно увеличивается при создании файлов CSV, содержащих более 100 тысяч записей.

Вот упрощенная версия функции, отвечающей за создание отчета CSV:

exports.createReport= (имя_файла, путь к файлу, ответ) => { вернуть новое обещание((разрешить, отклонить) => { const ws = fs.createWriteStream(filePath); const totalCount = response.count; ws.on('ошибка', (ошибка) => { отклонить (ошибка); }); response.rows.forEach(row => { let temp1 = JSON.stringify(row.dataValues.offer_details); row.dataValues.offer_details = tempOfferDetails; let temp2 = JSON.stringify(row.dataValues.allowances); row.dataValues.allowances = tempAllowances; пусть temp3 = JSON.stringify(row.dataValues.failure_reason); row.dataValues.failure_reason = tempFailureReason; }); const csvStream = fastcsv .format({ заголовки: true }) .on('конец', () => { console.log("Запись CSV завершена"); решать({ 'имя_файла': Имя_файла, 'filePath': FilePath, 'totalRows': TotalCount }); }); response.rows.forEach(row => { csvStream.write(row.dataValues); }); csvStream.pipe(WS); }); } Однако этот подход становится неэффективным для больших наборов данных, в результате чего загрузка ЦП достигает 100 %, а потребление памяти значительно увеличивается. Какие оптимизации я могу реализовать, чтобы повысить производительность создания CSV, особенно для наборов данных, превышающих 100 тысяч записей?

Любые предложения/решения/подходы будем очень признательны. Спасибо!

Вышеупомянутое отлично работает на локальном уровне, даже количество записей достигает миллиона, но я использую микросервисную архитектуру, и php получает файл от Nodejs. Это также отлично работает для записей размером менее 100 КБ. Приложение Nodejs развернуто на K PODS, и с помощью консоли и ведения журнала я видел, что когда мы получаем записи более 100 000, наш запрос на секвализацию завершается успешно, но после этого он ничего не консолидирует в файловой функции и не выдает ошибку, но процессор внезапно становится 100%

Я также проверил тайм-аут nginx и ограничение размера файла, все в порядке
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»