Может ли отфильтрованная репликация CouchDB копировать последние 100 ревизий документа? - PullRequest
5 голосов
/ 24 января 2012

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

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

Конкретный вариант использования выглядит следующим образом:

CouchApp 1 содержит базу данных о всех общинах одной реформатской конфессии.

CouchApp 2 содержит базу данных о всех конгрегациях всех реформатских конфессий по всему миру.

CouchApps 1 и 2 настроены на двунаправленную репликацию для синхронизации друг с другом, но CouchApp 1 запрашивает только данные одного наименования из фильтра репликации наименований в CouchApp 2.

Пользователь 1 является анонимным, поэтому относительно ненадежным, а пользователь 2 является администратором CouchApp2, поэтому обладает высоким уровнем авторитета / достоверности. Оба приложения CouchApp настроены на доверие к последним данным на 2/3 больше, чем к достоверным данным.

Сначала (в порядке времени) авторитетный пользователь 2 вводит 10 версий данных о собрании о собрании 1 в CouchApp 2 (все наименования). Во-вторых (в порядке времени) анонимный пользователь 1 вводит 10 версий данных собрания о собрании 1 в CouchApp 1 (одно наименование).

Произошла двунаправленная репликация.

CouchApp 2 (все номиналы) отображает данные пользователя 1 по умолчанию, поскольку эти данные более свежие. Но поскольку пользователь 1 ввел только некоторые (но не все) поля данных собрания 1, CouchApp 2 отображает данные пользователя 2 для всех остальных полей.

Я открыт для того, чтобы мне говорили, что для приложения не имеет смысла реплицировать более одной ревизии или оценивать точность ввода пользователя после репликации (вместо этого можно сделать репликацию), или оценивать эту точность на все.

1 Ответ

2 голосов
/ 24 января 2012

Извините, вы не можете напрямую копировать старые ревизии.Номер _rev предназначен исключительно для MVCC и не предназначен для отслеживания истории изменений.При этом, не невозможно сделать это.

Рассмотрите возможность сохранения старых ревизий в виде вложений JSON в самом документе.Это позволит им реплицироваться прямо вместе с остальной частью документа.Кроме того, есть другие стратегии , которые люди разработали для решения этой проблемы.(Google вокруг, и вы можете найти даже больше)

...