Jak zarządzasz dwukierunkową synchronizacją między „głównym” serwerem bazy danych a wieloma „wtórnymi” serwerami, w szczególności rozwiązywaniem konfliktów, zakładając, że połączenie nie zawsze jest dostępne?
Mam na przykład aplikację mobilną, która używa CoreData jako „bazy danych” na iOS i chciałbym umożliwić użytkownikom edycję treści bez połączenia z Internetem. Jednocześnie informacje te są dostępne na stronie internetowej, z którą połączą się urządzenia. Co mam zrobić, jeśli / kiedy dane na dwóch serwerach DB są w konflikcie?
(Mówię o CoreData jako o serwerze DB, choć wiem, że jest to coś nieco innego).
Czy istnieją jakieś ogólne strategie radzenia sobie z tego rodzaju problemem? Są to opcje, o których mogę myśleć:
1. Zawsze używaj danych po stronie klienta o wyższym priorytecie
2. Tak samo po stronie serwera
3. Spróbuj rozwiązać konflikty, zaznaczając znacznik czasu edycji każdego pola i dokonując ostatniej edycji
Chociaż jestem pewien, że trzecia opcja otworzy miejsce na druzgocące uszkodzenie danych.
Wiem, że twierdzenie CAP dotyczy tego, ale chcę tylko ostatecznej spójności, więc nie wyklucza to całkowicie, prawda?
Powiązane pytanie: wzorce najlepszych praktyk w zakresie dwukierunkowej synchronizacji danych . Druga odpowiedź na to pytanie mówi, że prawdopodobnie nie można tego zrobić.