Экспорт миллиона строк в CSV съедает гигабайты памяти процесса
app.get('/export', async (req, res) => {
for await (const row of db.streamOrders()) {
res.write(toCsvLine(row));
}
res.end();
});
Строки из базы читаются потоком, но при медленном клиенте память процесса растёт до гигабайтов, и под убивается. Что упущено?
- Обратное давление: res.write вернул false, но код не ждёт события drain
- for await не работает с потоками из базы данных
- Метод res.write можно вызывать только один раз за ответ
- Нужно накапливать строки в массив и отправлять разом
