Я использую node-oracledb в течение нескольких месяцев, и мне удалось достичь того, что мне нужно до сих пор.
В настоящее время я работаю над поисковым приложением, которое потенциально может вернуть около2м строки данных за один звонок.Чтобы убедиться, что я не получаю отключение от браузера и сервера, я подумал, что я бы попробовал queryStream, чтобы обеспечить постоянный поток данных обратно клиенту.
Я реализовал queryStream пример как есть, и это работало нормально для нескольких сотен тысяч строк.Однако, когда количество возвращаемых строк превышает миллион, узлу не хватает памяти.Записывая и просматривая события журнала клиента и сервера, я вижу, что клиент сильно отстает от сервера с точки зрения количества отправленных и полученных строк.Итак, похоже, что Node падает, потому что он буферизует так много данных.
Стоит отметить, что на данный момент моя реализация selectstream находится в функции req / res, вызываемой через Express.
Чтобы вернуть данные, я делаю что-то вроде ....
stream.on('data', function (data) {
rowcount++;
let obj = new myObjectConstructor(data);
res.write(JSON.stringify(obj.getJson());
});
Я читал о том, как потоки и труба могут помочь с потоком, поэтому я хотел бы иметь возможность передавать результаты запроса в: а) помощь с потоком иб) чтобы можно было передать результаты другим функциям перед отправкой обратно клиенту.
Например,
function getData(req, res){
var stream = myQueryStream(connection, query);
stream
.pipe(toSomeOtherFunction)
.pipe(yetAnotherFunction)
.pipe(res);
}
Я потратил несколько часов, пытаясь найти решение или пример, которыйпозволяет мне передавать результаты, но я застрял и нуждаюсь в некоторой помощи.
Извиняюсь, если упускаю что-то очевидное, но я все еще пытаюсь справиться с Node и особенно с потоками.
Заранее спасибо.