Использование CouchDB для потока данных или как получить документы с определенной ревизией - PullRequest
1 голос
/ 03 ноября 2011

Представьте, что вы хотите использовать номер редакции в качестве флага состояния для документов в базе данных.Редакция 1 предназначена для «сырых» документов, редакция 2 для определенного «обработанного» состояния и т. Д. И т. Д.Таким образом, вы хотите получить только документы с ревизией 1, чтобы их можно было «обработать» и перенести в ревизию 2. Существует очевидный способ создать представление, которое извлекает номер ревизии из поля _rev в документе,что-то вроде

function(doc) {
  var rev = doc._rev.split("-");
  emit( rev[0], doc);
}

Однако это подразумевает использование представления и, будучи _rev встроенным, не существует ли простого способа извлечения документов в массовом порядке с использованием _all_docs?

1 Ответ

1 голос
/ 20 ноября 2011

Я бы порекомендовал не злоупотреблять ревизиями CouchDB для этой цели.Некоторые моменты:

  • Вы не можете вручную установить конкретную ревизию, поэтому, если вы хотите сохранить документ непосредственно на этапе 3, вы должны добавить его и применить 2 варианта NOP.Кроме того, вы не можете «понизить» ревизию.Чтобы добиться этого, вам нужно удалить документ, добавить его снова и отправить его с помощью NOP в нужную редакцию.Все это действительно негибко.
  • Нет встроенной поддержки для извлечения документов с определенными ревизионными "префиксами".
  • Если вы хотите изменить рабочий процесс обработки с промежуточным этапом, вы должныувеличить редакцию документов на этом этапе и на всех последующих этапах.

Я бы порекомендовал добавить определенный атрибут, который обозначает этап обработки документа.Другой подход может заключаться в создании специализированных баз данных обработки для каждого этапа.Таким образом, запрос всех документов на определенном этапе может быть выполнен через _all_docs соответствующей базы данных.В зависимости от вашего варианта использования вы можете удалить документы из предыдущей базы данных после их добавления в следующую базу данных обработки.

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