CouchDB расслаблен. Если это работает для вас, то я бы сказал, придерживайтесь этого и сфокусируйтесь на своем следующем главном приоритете.
Одна быстрая оптимизация - попытаться создать не окончательный ответ в функции _list
, а send()
маленьких частей ответа, как вы их знаете. Таким образом, ваша функция может работать с неограниченным размером результата.
Однако, как вы и подозревали, вы используете функцию _list
в основном для выполнения специального запроса, который может быть проблематичным при увеличении размера вашей базы данных.
Я не на 100% уверен, что вам нужно, но если вы ищете документы в течение определенного периода времени, есть большая вероятность, что ключи emit()
должны в первую очередь сортироваться по времени. (В вашем примере первичное (крайнее левое) значение сортировки - doc.rec_id
.)
Для функции карты:
function(doc) {
var key = doc.time; // Just sort everything by timestamp.
emit(key, [doc._id, doc.time]);
}
Это создаст карту всех документов, упорядоченных по отметке времени time
. (Я предполагаю, что значение времени равно JSON.stringify(new Date)
, т.е. "2011-05-20T00:34:20.847Z"
.
Чтобы найти все документы с интервалом в 1 час, просто запросите представление карты с помощью ?startkey="2011-05-20T00:00:00.000Z"&endkey="2011-05-20T01:00:00.000Z"
.
Если я правильно понимаю ваши критерии «интервалов», то если вам нужны 10-минутные интервалы, то если у вас было 00:00, 00:15, 00:30, 00:45, 00:50, то только 00: 00, 00:30, 00:50 должны быть в конечном результате. Таким образом, вы фильтруете нормальную производительность кушетки, чтобы исключить нежелательные результаты. Это идеальная работа для функции _list
. Просто используйте req.query.interval
и только send()
строки, соответствующие интервалу.