2016-01-12 5 views
1

Скажем, у меня есть документ «схема», который содержит поле show_from, которое содержит временную метку как эпоху Unix. Затем я создаю представление, введенное с помощью этой даты show_from, и возвращаю эти документы только с ключом или до текущей метки времени (по запросу). Таким образом, документы будут отображаться в представлении «пассивно», а не из любого запроса на обновление.API изменения CouchDB на вид

Возможно ли использовать API изменения CouchDB для контроля этого изменения состояния просмотра, или мне нужно будет опросить просмотр, чтобы следить за изменениями? (Мое предположение - последнее, потому что API изменений, похоже, только инициируется обновлениями, но только для подтверждения!)

ответ

2

_changes feed может быть filtered несколькими способами. Один из способов фильтрации фида _changes состоит в повторном использовании view's map function.

GET /[DB]/_changes?filter=_view&view=[DESIGN_DOC]/[VIEW_NAME]

Примечание:

Для каждого _changes запроса, CouchDB будет выглядеть при каждом изменении и запустить его через функцию фильтра (или в этом случае карта функция вида). Ни одно из этих файлов не кэшируется для последующих запросов (как на mapreduce views). Таким образом, он может обладать налогом на ресурсы, если набор изменений невелик.

Для большого набора данных (с большим количеством изменений) может быть полезно загрузиться с представлением и только постепенно отслеживать изменения.

Дополнительная информация:

Использование _changes вы можете опрашивать изменения с данной точкой последовательности, для последних N изменений и т.д. Вы можете также использовать длинный опрос, или непрерывную подачу. Пока набор изменений для рассмотрения (и фильтрация) невелик, имеет смысл использовать _changes.


Но если посмотреть сам заказал в хронологическом порядке, как это, кажется, ваш случай, это может быть бессмысленно использовать изменения. Просто запросите представление.

+0

Если вам нужно сделать новый запрос '_changes' каждый раз, когда вы хотите, чтобы фильтр вида применялся, не будет ли это так же, как опрос представления напрямую? Было бы, например, обновление 'feed = непрерывное 'соответственно при изменении состояния представления (т. Е. Без какого-либо другого запроса на обновление)? – Xophmeister

+0

Когда вы просматриваете представление, представление обновляется, если оно устарело, а обновление хранится в индексе. Последующие опросы просто используют индекс. Опрос '_changes' с фильтром запускает фильтр по всем изменениям каждый раз. –

+0

'feed = непрерывный', как только изменения будут внесены в базу данных. –

Смежные вопросы