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ść.
design-patterns
algorithms
database-development
synchronization
podobny do kodu
źródło
źródło
Odpowiedzi:
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 .
źródło
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ę.
źródło