couchdb уведомления об изменениях - PullRequest
3 голосов
/ 19 января 2011

Что фактически делает API изменений? перечисляет последнюю ревизию каждого документа + удаленные документы?

или, если выразиться так:

Можно ли использовать функцию уведомлений об изменениях в couchdb для вывода списка всех документов, соответствующих запросу?

Например, если у меня есть функция фильтра:

search = function(doc,req)
{
  return (doc.min && doc.max && doc.min < req.query.q && doc.max > req.query.q)
}

получу ли я все документы, которые соответствуют doc.min

http: // сервер / база данных / _changes? фильтр = тип документа / поиск & q = некоторое значение

Для моей тестовой базы данных это выглядит так, но что если у меня большая база данных?

1 Ответ

11 голосов
/ 19 января 2011

Каждой записи в базу данных дается то, что известно как seqnum. (или порядковый номер) Журнал этих записей хранится вместе с документом _id, _rev, наряду с другой информацией о записи. (См. этот раздел книги CouchDB онлайн.) Недавно созданный документ получает следующий seqnum (старый seqnum + 1). Обновление документа, с другой стороны, также добавляет новый seqnum, но также удаляет старый документ из журнала. Если вы перечислите все документы, упорядоченные по seqnum, вы получите график эволюции данных.

Вызов API _changes возвращает этот список. И поскольку каждая ревизия сохраняется в своей целостности (а не просто в виде различий), вы можете восстановить все, что изменилось в этой базе данных с момента seqnum.

Запуск сжатия удаляет старые версии документа, но не влияет на данные seqnum или _changes. Это связано с тем, что _changes показывает только самые последние (живые) версии документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...