sposobu rozwiązywania replikacji konflikty zalecanych przez oficjalnej dokumentacji jest:Rozwiązywanie konfliktów replikacji dla usuniętych dokumentów w CouchDB
- Czytaj sprzeczne wersje używając
_conflicts
pola dokumentu (na przykład za pomocą widoku) - Fetch docs dla wszystkich korekt wymieniony
- wykonać specyficzne dla aplikacji łączących
- Usuń niechciane korekty
Problem pojawia się, gdy chcę scalić dokumenty usunięte. Nie pojawiają się w polu _conflicts
, ale w _deleted_conflicts
. Jeśli scalę tylko przy użyciu pola _conflicts
, a dokument zostanie usunięty z lokalnej bazy danych i edytowany w zdalnej replice, zostanie on wskrzeszony lokalnie podczas replikacji. Mój model aplikacji zakłada, że usunięcie zawsze ma pierwszeństwo przy scalaniu: usunięte dokumenty pozostają usunięte niezależnie od tego, z czym edycje są w konflikcie.
Na pierwszy rzut oka najprościej jest sprawdzić, czy _deleted_conflicts
nie jest pusta, a jeśli nie jest pusta, skasować dokument, prawda? No cóż ... problem polega na tym, że może to również zawierać usunięte poprawki, które zostały wprowadzone przez rozwiązywanie konfliktów edycji w kroku 4, więc znaczenie _deleted_conflicts
jest w tym przypadku niejednoznaczne.
Jaki jest kanoniczny sposób rozwiązywania konfliktów usuwania w CouchDB (jeśli istnieje), który nie wymaga robienia dużych rzeczy, takich jak oznaczanie dokumentów jako usunięte i filtrowanie w warstwie aplikacji?