2010-07-07 10 views
5

Mam aplikację serwera, która oferuje dane do wielu klientów za pośrednictwem sieci. Możesz wyobrazić sobie dane jako ogromną listę napisów. Dane na serwerze mogą ulec zmianie i wymagają synchronizacji na wszystkich klientach.Czy istnieje wzór do synchronizowania list danych w sieci?

Obecnie używam tego podejścia: przy pierwszym połączeniu aplikacja kliencka żąda wszystkich aktualnych danych (może to być dużo bajtów). Następnie subskrybuje aktualizacje (dodawanie, zmiany i usuwanie) dowolnych danych.

Działa to dobrze, chyba że dane zostały zmienione na serwerze pomiędzy wysłaniem początkowej listy danych a aplikacją subskrybującą zmiany - w takim przypadku klient traci kilka aktualizacji i pracuje nad nieaktualnymi danymi, nie wiedząc o tym.

Uważam, że jest to bardzo powszechny scenariusz, więc powinien istnieć wzór, który rozwiązuje problem. Używam C# 4 i WCF, ale wzór powinien być agnostykiem językowym, który wierzę.

Odpowiedz

0

nie mam doświadczenia w ten sposób, ale ...

Jeśli każdy „początkowe połączenie” zawiera „timestamp”, a po wykupieniu abonamentu, możesz subskrybować „od znacznika czasu początkowego połączenia”, a następnie serwer może zawierać wszystko zmiany od tego znacznika czasu, tak?

Kluczem jest uwzględnienie pewnego kanonicznego pojęcia czasu, w którym zarówno klient, jak i serwer zgadzają się.

np. zamiast

void Connect() 
Subscribe() 

masz

Timestamp Connect() 
Subscribe(timestamp) 
0

Chciałbym tylko dodać kolejny komunikat, który wysyła pełną aktualizację do klienta niezwłocznie po wezwaniu subskrybować.

Alternatywnie, klient mógłby początkowo założyć, że lista jest pusta, a serwer wysyła wiadomości w celu przebudowania pełnej listy na kliencie, pakując je w szereg przyrostowych wiadomości "dodawania".

2

Czy spojrzał na Microsoft's Synchronization Framework dla. Net. Zapewnia lepszą kontrolę nad tym, co jest synchronizowane i w jaki sposób. WCF jest w pełni obsługiwany. Obsługuje przyrostowe aktualizacje i synchronizuje zmiany z powrotem na serwer.

Interfejs API jest dość duży i obejmuje coś więcej niż tylko synchronizację bazy danych, ale istnieje wiele artykułów. To powinno Ci zacząć:

Introduction to Sync Framework Database Synchronization

Synchronizing Databases

Powiązane problemy