#mongodb #mongoose
#mongodb #mongoose
Вопрос:
Я использую Node.js и Mongoose для запроса данных из mongodb (версия 3.2):
let cursor = cbo.find({
InsertTime: {
$gte: data.ValidTimeStart,
$lte: data.ValidTimeEnd
}
}).lean().cursor({batchSize:1000});
cursor.on('data', (chunk) => console.log(chunk));
cursor.on('end', () => console.log("end"));
Результат правильный, но объем памяти продолжает увеличиваться, пока не будут возвращены все результаты, и через некоторое время освобождается много памяти. Обычно у меня около 1 миллиона элементов, это занимает почти 500 МБ памяти.
Можно ли было бы использовать курсор, который возвращает поток, чтобы освободить часть памяти после каждого выпуска данных.
Как эффективно использовать память?
Комментарии:
1. Итак, у вас есть полные данные по
chunk
? это может привести к утечке памяти. использоватьcursor.next()
вручную?2. не полные данные в одном фрагменте, каждая строка вводит фрагмент один раз. но весь результат поиска останется в памяти, не освобожденной до конца. Я думал, что память освободится при включении
chunk
3. как вы это решили? @ttulka