У меня есть довольно простой контроллер, который срабатывает при обращении к определенному URL адресу. Как видите, контроллер забирает значения параметров (start_date и end_date), которые были указаны в URL и использует их в запросе к базе данных MySQL. Другими словами, моя задача получить пул данных за определенное период и в качестве ответа прислать JSON.
async function get_all_information(req, res, next) {
try {
let start_date = req.query.start_date;
let end_date = req.query.end_date;
const binds = {};
binds.start_date = start_date;
binds.end_date = end_date;
let query = `SOME LONG SQL STATEMENT`;
await pool.query(query, binds, function (error, results) {
if (error) throw error;
console.log(results); // ~ 10 seconds
res.send(JSON.stringify(results)); // ~ 15 seconds
});
} catch (error) {
next(error);
}
}
За месяц запрос обрабатывается порядка 10 секунд и возвращает большой пул данных. Если быть точнее sql запрос возвращает 227011 строк. Весь этот результат я пытался преобразовать в JSON формат с помощью метода stringify(). Приложение Postman, который я использовал для тестирования просто вещается и программа останавливается. При обращении к URL адресу в браузере данные приходят частями и грузятся очень долго. В терминале вижу следующее:
GET /api/information?start_date =2018-09-01%2000:00:00&end_date=2018-09-30%2023:59:59 200 15490.389 ms - 144219608
Я попытался проанализировать и заметил, что пул данных за день создает
~ 13 МБ JSON файл. Можно предположить, что пул данных за месяц создаст плюс минус
~ 400 МБ JSON файл.
Как обычно в Node.JS вы создаете большие JSON файлы? Какой Best Practice? Что обычно делают, когда нужно вернуть большой объем данных?