Synchronizacja kilku baz danych

0

Witam, baza danych zawiera 3 tabelki bez relacji. Aplikacja na laptopach łączy się z serwerem mariadb lecz nie zawsze jest dostęp do internetu i wtedy trzeba zapisać w sqlite. Jak to najprościej zsynchronizować? Czy jest jakaś biblioteka do Javy?

0

jeśli chociaż raz na 10 lat wystąpi sytuacja, że połączenia z bazą zdalną niet a dane zapisać trzeba to wyszedł bym z założenia, że zawsze dane zapisujemy lokalnie a wysyłamy do bazy zdalnej jak można. Wątpię aby była gotowa biblioteka do tego. Ja bym to zrobił tak

  1. baza zdalna
  2. serwer rest + json
  3. lokalnie sqlite
  4. aplikacja
    a) główny moduł dla usera
    b) dodatkowy wątek, który będzie sprawdzał czy jest coś do wysłania i synchronizował dane
0
abrakadaber napisał(a):

jeśli chociaż raz na 10 lat wystąpi sytuacja, że połączenia z bazą zdalną niet a dane zapisać trzeba

Miałem daaaawno temu bardzo problematycznego klienta. Dwa salony. W jednym z nich serwer z bazą. Drugi salon bardzo często tracił połączenie z Internetem. I tam takie fikołki trzeba było stosować.

To jest ciężka kwestia, bo trzeba robić synchronizację w obie strony. Nie wiem, jak jest u Ciebie. U mnie klient zawsze musiał mieć dostęp do świeżych danych. Więc musiałem stworzyć taki mechanizm, że jak szła jakaś zmiana w bazie, to przez osobny proces. Proces robił zmianę w bazie głównej i lokalnej awaryjnej. Dzięki temu w bazie awaryjnej zawsze były świeże dane. Potem po rozłączeniu z Internetem, dane były uzupełniane tylko w bazie awaryjnej. Po przywróceniu połączenia, jakiś dodatkowy proces (albo aplikacja, już nie pamiętam) synchronizowały obie bazy na podstawie id kluczy głównych i kilku jeszcze innych rzeczy. Nie pamiętam dokładnie jak to było robione, bo to było naprawdę daawno temu.

Generalnie konkluzja jest taka. Jeśli musisz mieć taki system, który zawsze ma świeże dane, to powiedz klientowi, że to jest bardzo drogie rozwiązanie (chyba, że znajdziesz jakiś sposób na replikację tych baz, ale wątpię). I weź za to bardzo dużo pieniędzy.

Jeśli masz mieć tylko zapis i nie musisz mieć świeżych danych, po prostu po przywróceniu połączenia, wysyłaj wszystkie rekordy do głównej bazy, które zapisałeś w awaryjnej (od czasu utraty połączenia). Co jakiś czas możesz pobierać dane z bazy głównej do awaryjnej (np. o 3 w nocy codziennie), żeby mieć w miarę świeże dane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1