2009-03-25 9 views
6

Chciałbym zaimplementować synchronizację danych między serwerami i klientami rozproszonymi. Źródłem danych na serwerze jest mysql z django na górze. Klient może się różnić. Aktualizacje mogą mieć miejsce zarówno na kliencie, jak i na serwerze, a połączenie między serwerem a klientem nie jest niezawodne (np. Zmiany można wprowadzić na odłączonym telefonie komórkowym, należy je zsynchronizować, gdy telefon komórkowy ponownie ma połączenie).Szkielet/algorytm synchronizacji danych dla urządzenia <->?

S. Lott sugeruje użycie wzoru kontroli wersji w this question, co ma sens. Zastanawiam się, czy istnieją jakieś pakiety/implementacje tego, których mogę użyć. Czy powinienem użyć bezpośrednio svn/git/etc?

Czy są inne możliwości? Muszą istnieć szkielety synchronizacji lub szczegółowe opisy algorytmów, ale nie mam dużego szczęścia, aby je znaleźć. Byłbym wdzięczny, gdybyś wskazał mi właściwy kierunek.

Odpowiedz

1

Wystarczy użyć zwykłego starego rsync.

1

AFAIK nie ma żadnego ogólnego rozwiązania tego problemu, głównie ze względu na różnorodne wymagania synchronizacji.

W jednym z naszych wcześniejszych projektów wdrożyliśmy mechanizm synchronizacji oparty na Spring batching, który opiera się na ostatnio zaktualizowanym polu sygnatury czasowej na każdej z tabel (które biorą udział w synchronizacji).

Słyszałem o SyncML, ale nie mam z tym zbyt wiele doświadczenia.

Jeśli masz jeden serwer i wielu klientów, możesz myśleć o podejściu opartym na JMS. Dane są wiązane i umieszczane w kolejkach (lub tematach) i będą pobierane przez klientów.

W twoim przypadku, ponieważ aktualizacje są dwukierunkowe, musisz również obsługiwać wykrywanie konfliktów. To przynosi dodatkowe komplikacje.

Powiązane problemy