2012-01-23 11 views
5

Czy filtrowana replikacja CouchDB może być ustawiona tak, aby replikowała nie tylko najnowszą wersję każdego dokumentu, ale także ostatnie 100 wersji każdego dokumentu?Czy filtrowana replikacja CouchDB może powielić ostatnie 100 wersji dokumentu?

Chcę tej funkcji, ponieważ zamierzam pozwolić każdej instancji aplikacji wybrać, która ostatnia wersja (wersje będą pochodzić z wielu źródeł, z których każdy ma inny poziom dokładności/wiarygodności) jest najdokładniejsza, więc potrzebuję więcej niż jedna wersja dostępna w każdej instancji bazy danych.

Specyficzny use-case jest następujący:

CouchApp 1 zawiera bazę danych na temat wszystkich zgromadzeń jednej reformowanego wyznania.

CouchApp 2 zawiera bazę danych zawierającą dane wszystkich zborów we wszystkich wyreżyserowanych nominałach na całym świecie.

CouchApps 1 & 2 są skonfigurowane do replikacji dwukierunkowej, aby zachować synchronizację między sobą, ale CouchApp 1 żąda tylko danych jednego nominału z filtra replikacji nominału CouchApp 2.

Użytkownik 1 jest anonimowy, a więc stosunkowo niezaufany, a użytkownik 2 jest administratorem CouchApp2, więc ma wysoki poziom autorytetu/wiarygodności. Obie opcje CouchApps mają ufać najnowszym danym o 2/3 więcej niż wiarygodne dane.

Po pierwsze (w kolejności czasu) autorytatywny użytkownik 2 wprowadza 10 wersji danych dotyczących kongregacji dotyczących zgromadzenia 1 do CouchApp 2 (wszystkie nominały). Po drugie (w kolejności czasu) anonimowy użytkownik 1 wprowadza 10 wersji danych dotyczących kongregacji o zborach 1 do CouchApp 1 (jedno nominał).

Występuje replikacja dwukierunkowa.

CouchApp 2 (wszystkie nominały) wyświetla domyślnie dane użytkownika 1, ponieważ te dane są nowsze. Ale ponieważ użytkownik 1 wprowadził tylko niektóre (ale nie wszystkie) pola danych zgromadzenia 1, CouchApp 2 wyświetla dane użytkownika 2 dla wszystkich pozostałych pól.

Jestem otwarty na to, że powiedziano mi, że nie jest opłacalne, aby aplikacja mogła replikować więcej niż jedną wersję lub aby ocenić dokładność danych wprowadzanych przez użytkowników po replikacji (można to zrobić przed replikacją) lub ocenić tę dokładność w ogóle.

Odpowiedz

2

Niestety, nie można bezpośrednio replikować starych wersji. Jedynym celem numeru _rev jest MVCC i nie jest przeznaczony do śledzenia historii wersji. Biorąc to pod uwagę, nie jest to możliwe.

Rozważ przechowywanie starych wersji jako załączników JSON na samym dokumencie. To spowoduje ich powtórzenie wraz z resztą dokumentu. Ponadto istnieje other strategies, którą ludzie wymyślili, aby pokonać ten problem. (Google w pobliżu i prawdopodobnie możesz znaleźć jeszcze więcej)

+0

Dziękuję za tę rekomendację; jak to jest opisane bardziej szczegółowo tutaj http://blog.couchbase.com/simple-document-versioning-couchdb (który był połączony z na stronie, do której się odwołujesz) wygląda na to, że może dostarczyć tego, czego potrzebuję. – timblack1