Как оптимизировать использование ЦП и памяти при создании больших файлов CSV с помощью Node.js и Sequelize? ⇐ Php
Как оптимизировать использование ЦП и памяти при создании больших файлов CSV с помощью Node.js и Sequelize?
Я разрабатываю приложение 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 и ограничение размера файла, все в порядке
Я разрабатываю приложение 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 и ограничение размера файла, все в порядке
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение