Функции просмотра (map
и reduce
) являются чисто функциональными.Побочные эффекты, такие как установка глобальной переменной, не поддерживаются.(Когда вы перемещаете свое приложение на BigCouch , как несколько независимых серверов с произвольными подмножествами данных могут узнать, что такое pageIndex
?)
Поэтому ответ должен включать традиционный *Функция 1008 *, возможно, с отметкой времени.
function(doc) {
if (doc.type == 'log') {
emit(doc.timestamp, null);
}
}
Как вы можете получить каждый 50-й документ?Самый простой способ - добавить параметр skip=0
, skip=50
или skip=100
.Однако это не идеально (см. Ниже).
Способ предварительной выборки точных идентификаторов каждого 50-го документа - это функция _list
, которая выводит только каждую 50-ую строку.(На практике вы можете использовать Mustache.JS или другую библиотеку шаблонов для построения HTML.)
function() {
var ddoc = this,
pageIndex = 0,
row;
send("[");
while(row = getRow()) {
if(pageIndex % 50 == 0) {
send(JSON.stringify(row));
}
pageIndex += 1;
}
send("]");
}
Это будет работать во многих ситуациях, однако не идеально.Вот некоторые соображения, о которых я думаю - не обязательно показывать подсказки, но это зависит от вашей конкретной ситуации.
Есть причина, по которой красивые URL не рекомендуются.Что это значит, если я загружаю страницу 1, то в первые 50 вставляется куча документов, а затем я нажимаю на страницу 2?Если данные сильно меняются, то нет идеального взаимодействия с пользователем, пользователь должен как-то почувствовать изменение данных.
Параметр skip
и пример функции _list
имеют ту же проблему: они не масштабируются,С skip
вы по-прежнему касаетесь каждой строки в представлении, начиная с самого начала: находите его в файле базы данных, читаете его с диска, а затем игнорируете его, снова и снова, ряд за строкой, покавы нажали skip
значение.Для небольших значений это довольно удобно, но так как вы группируете страницы по 50, я должен представить, что у вас будет тысячи или более строк.Это может замедлить просмотр страниц, так как база данных вращается в большинстве случаев.
В примере _list
есть похожая проблема, однако вы загружаете всю работу спереди, просматривая весь вид с самого началазавершить и (предположительно) отправить соответствующие идентификаторы документов клиенту, чтобы он мог быстро перемещаться по страницам.Но с сотнями тысяч документов (вы называете их «журналом», так что я предполагаю, что у вас будет тонна) это будет чрезвычайно медленный запрос, который не кэшируется.
В целом, для небольших наборов данных выс помощью форм page=1
, page=2
вы можете столкнуться с проблемами по мере того, как ваш набор данных станет больше.С выпуском BigCouch CouchDB стал еще лучше для хранения и анализа журналов, поэтому (если это то, что вы делаете), вы определенно захотите подумать о том, насколько велика масштабирование.