Replikacja i jej zastosowanie

0

Cześć, mam bazę danych na Firebirdzie. Wczesna wersja programu zakładała replikację tej bazy za pomocą narzędzi zewnętrznych. Jednak pojawia się problem.

Program to oczywiście klient - serwer. Załóżmy, że jest tylko jeden serwer i kilku klientów. Teraz sytuacja wygląda tak, że z jakiegoś powodu klienci nie mają połączenia z serwerem(ale wszyscy mają lokalne bazy danych).

Teraz w lokalu nr 1 są jakieś zmiany(np. dodanie klienta). W lokalu nr 2 też jest dodawany klient. Skutkiem tego będzie, że w tych lokalach będą klienci o ID równym np. 50.
I co się stanie, gdy połączenie z serwerem będzie odzyskane i rozpocznie się replikacja?

Czy w ogóle replikacji używa się w bazach, gdzie jest wielu klientów i jeden serwer?

0

najprawdopodobniej w głównej bazie (i u wszystkich innych klientów) wyląduje ten klient, który został wpisany na kompie, który "replikuje się" jako ostatni.

W takich wypadkach rozwiązaniem może być oprócz pola ID pole KodKlienta, gdzie zapisywany jest jakiś kod określający jednoznacznie kod klienta a klucz główny jest na tych dwóch polach (id i kodklienta)

Inne rozwiązanie to samemu napisać replikację i jeśli zostanie wykryty taki przypadek to pytać czy zastapić, stworzyć nowego czy pominąć

0
Misiekd napisał(a)

W takich wypadkach rozwiązaniem może być oprócz pola ID pole KodKlienta, gdzie zapisywany jest jakiś kod określający jednoznacznie kod klienta a klucz główny jest na tych dwóch polach (id i kodklienta)

Kwestia jest taka, że klient to tylko przykład. Tabel jest wiele i są one ze sobą w jakiś sposób powiązane.

Inne rozwiązanie to samemu napisać replikację i jeśli zostanie wykryty taki przypadek to pytać czy zastapić, stworzyć nowego czy pominąć

I tu rodzi się kolejne pytanie. Kogo zapytać? :>

0
Juhas napisał(a)

Kwestia jest taka, że klient to tylko przykład. Tabel jest wiele i są one ze sobą w jakiś sposób powiązane.

ale pisząc KodKlienta miałem na myśli jakiś unikatowy nr przypisany do maszyny (ew. kopii programu) a nie klienta w sensie wpisu w bazie

I tu rodzi się kolejne pytanie. Kogo zapytać? :>

no winowajcy, czyli tego, kto wstawił dublujący się wpis.
Jest taka sytuacja
Serwer - S
Komp1 - A, komp2 - B
A i B są odłączeni od S

  1. A dodaje klienta o kodzie 10 do swojej lokalnej bazy
  2. B też dodaje klienta o kodzie 10 do swojej lokalnej bazy
  3. A uzyskuje połączenie z S i wysyła do niego nowy rekord z klientem o id 10
  4. A się rozłącza
  5. B łączy się z S, wysyła rekord z klientem o id = 10 ale taki już istnieje więc B pyta operatora co zrobić

ma to wiele niedociągnięć bo trzeba by rozróżniać przypadek, kiedy A i B dodają klienta o takim samym kodzie i kiedy taki klient jest po prostu zmieniany (zmień pkt2 na B ściąga od S klienta o kodzie = 10)

Wg mnie ten pierwszy sposób jest o wiele lepszy bo raczej się nie zdarzy, że ta sama osoba zadzwoni do dwóch różnych oddziałów i że w obu zostanie założone dla niej konto. A np. wystawienie dwóch faktór w tym samym czasie na tą samą osobę w dwóch różnych oddziałach to nie problem bo na 99,9% będą to po prostu dwie różne faktury.

Widzę problem jedynie w duplikowaniu się wpisów typu kontrahent, towar itp i jeśli to wykluczysz to reszta powinna być OK

0

a może samemu przypisywać id - jakąś dużą losową liczbę, prawdopodobieństwo duplikacji będzie znacznie mniejsze niż 6 w totolotka :P

można zrobić tak że klient nie dodaje Od razu wpisu do siebie tylko tworzy liste zapytań, gdy otrzyma połączenie z serwerem wysyła zapytania o dodanie wpisu i zwrotnie dla każdego wpisu dostaje id i co tam potrzeba...

0

A ja bym to rozwiązał następująco -- nie ma klientów - każdy jest równoważny, gdy zmieni się baza to zaraz po wykonaniu zmiany - bazy się synchronizują (najlepiej P2P).. Wygląda to jak pajęczyna - połączenie każdy z każdym.. Każdy ma tą samą wersję bazy.

0
amadeusz.jasak napisał(a)

A ja bym to rozwiązał następująco -- nie ma klientów - każdy jest równoważny, gdy zmieni się baza to zaraz po wykonaniu zmiany - bazy się synchronizują (najlepiej P2P).. Wygląda to jak pajęczyna - połączenie każdy z każdym.. Każdy ma tą samą wersję bazy.

Taaaa... Chodzi o to, że połączenie z jakąś bazą może zniknąć

0

Wiem, więc gdy zniknie połączenie z jedną bazą do można się połączyć z inną należącą do sieci P2P, chyba że została odłączona od netu

0

Odpowiedź znajdziesz w tym artykule: Replikacja MySQL ( http://www.eioba.com/a1035.html )

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