Najlepsza praktyka / Wzorce dla dwukierunkowej synchronizacji danych

52

Dość często w mojej pracy pojawia się pomysł dwukierunkowej synchronizacji danych między systemami baz danych. Klasycznym przykładem są dwa nieznacznie różne systemy CRM (powiedzmy Raiser's Edge i Salesforce) i potrzeba dwukierunkowej synchronizacji danych kontaktowych między nimi.

Pomijając kwestie związane z API, zakładając, że masz wspólny klucz do synchronizacji i czysto myśląc o algorytmie / wzorcu, który chcesz zastosować, jest to zadanie, które jest często niedoceniane przez osoby niebędące specjalistami.

Na przykład musisz uważać na:

  • Czy możesz łatwo wykryć, które rekordy uległy zmianie w obu systemach (czy będziesz musiał porównać wszystkie rekordy między systemami, aby wykryć zmiany)
  • Jeśli wybierasz synchronizację co godzinę N, jak radzić sobie z konfliktami, w których ten sam rekord zmienia się mniej więcej w tym samym czasie w obu systemach
  • Jeśli wybierasz synchronizację w czasie rzeczywistym (tj. Aktualizacja w jednym systemie natychmiast powoduje aktualizację w drugim systemie), jak radzić sobie z rozbieżnościami w czasie z powodu błędów lub awarii systemu

Osobiście mogę wymyślić sposoby rozwiązania tego problemu, ale zastanawiam się, czy istnieją jakieś znane wzorce, literatura lub najlepsze praktyki, do których mógłbym się odnieść.

podobny do kodu
źródło
to, co opisujesz, brzmi dość blisko do federacyjnego systemu baz danych - czy to prawda?
komar
@gnat: Dzięki za łącze, niektóre obawy są podobne (np. radzenie sobie z heterogenicznością), ale mówię o synchronizacji podzbioru danych z dwóch autonomicznych baz danych, podczas gdy wydaje się, że bardziej chodzi o stworzenie w pełni zintegrowanego widoku wszystkiego na wielu dbs.
codeulike
1
7 lat później 50 pozytywnych opinii, ale tylko 1 przyzwoita odpowiedź. Czy istnieją jakieś wzorce synchronizacji lub najlepsze praktyki?
codeulike

Odpowiedzi:

8

Tak, trudny problem, łatwo niedoceniany. I może być dużo pracy. Jeśli korzystasz z technologii Microsoft, możesz rzucić okiem na Microsoft Sync Framework tutaj i tutaj .

codingoutloud
źródło
1
Dzięki, to interesujące. Słyszałem o Ms Sync Framework, ale nie zdawałem sobie sprawy, że jest tak uogólniona. Zasadniczo jest to wzorzec ogólnie do obsługi problemów z synchronizacją.
codeulike
2
Microsoft Sync Framework został zastąpiony przez Microsoft Sync Framework Toolkit.
Tomas Kubes,
Jestem sfrustrowany dokumentami, które nie są tak jasne, szczególnie dla dostawców danych ADO.NET innych niż SQL Server, co w moim przypadku. Poza tym moje miejsce pracy szuka czegoś, co nie wymaga dodawania tabel infrastruktury / wprowadzania zmian w środowisku produkcyjnym. Mam zamiar odrzucić ten.
Veverke
0

Istnieje wiele teorii na temat synchronizacji zdalnej bazy danych DB. Najpierw zacznij od INSERT. obsługa tego jest łatwa - ponieważ możesz stworzyć unikalny identyfikator dla każdej strony (na przykład inicjał nazwy strony + identyfikator (numer): site_a_177 vs. site_b_53)

Dlatego insert nie powinien tworzyć żadnych konfliktów. problemem jest aktualizacja. Nie wierzę, że istnieje metoda w 100% odporna na awarie, ale można rozpocząć aktualizację „blokując” rekord w zdalnej bazie danych i dopiero po uzyskaniu uchwytu - kontynuuj aktualizację i zakończ synchronizację aktualizacji i dopiero wtedy zwolnij blokadę.

alfasin
źródło
1
Dzięki, myślę, że mówisz o rozproszonym dbs z tym samym schematem i zajmujesz się rozproszonymi transakcjami. Myślę więcej o scenariuszach, w których dwa bazy danych są całkowicie autonomiczne (np. Przypisują unikalne identyfikatory na zupełnie inne sposoby, a schematy się różnią), ale chcesz zsynchronizować w nich podzbiór danych.
codeulike
Wygląda na to, że nie powinno być żadnych konfliktów. W takim przypadku powinno to być bardzo proste - po prostu zapisz „ostatni identyfikator rekordu” zsynchronizowany dla każdej tabeli i kontynuuj od tego momentu.
alfasin