Baza danych dla aplikacji desktopowej w wielu lokalizacjach z trybem offline

0

Mamy aplikacje desktopową pracującą w 2 do 5 lokalizacjach ze wspólną bazą danych.
Aplikacje muszą pracować bez dostępu do sieci.

Jakie rozwiązanie bazodanowe proponujecie?

Czy każdy komputer ma osobną bazę danych plus synchronizacja?
Czy lepiej centralna baza plus repliki?

Czy są jakieś gotowe rozwiązania, które by to ogarnęły?
Jaki DBMS użyć?

Z góry dziękuję za pomoc :)

0

temat jest dość trudny i potrzeba więcej informacji aby coś doradzić. Przede wszystkim czy lokalizacje mogą dodawać te same dane - np. dwie lokalizacje dodadzą tego samego kontrahenta i co wtedy podczas synchronizacji z główną bazą? BTW jeśli normalną rzeczą będzie praca offline poszczególnych końcówek to chyba żaden gotowiec tego nie ogarnie

0

Skoro działaja off-line to rozumiem że "lokalne bazy" muszą być samowystarczalne.
Pytanie jaki jest cel i co ma być synchronizowane.
lokalizacje pracuja i ładują wszystko na serwer centralny?
lokalizacje potrzebują dane z innych lokalizacji?
w którą strone ma być synchroniacja: lokalizacja->centrala, lokalizacja <-> centrala?

Jak pisał poprzednik temat nie jest trywialny...

0

Jak chcesz gotowca, to baza w plikach tekstowych i Git. :)

0

Kilka tygodni temu mieliśmy w firmie podobny problem. Rozwiązaliśmy to (w oparciu po PostgreSQL) w taki sposób, że do struktur danych dodaliśmy identyfikator stanowiska które dokonuje wpisu. Czyli mamy tabelę, aplikacja offline robi insert do swojego lokalnego postgresql i w dodatkowej kolumnie wpisuje swój unikatowy identyfikator (identyfikator ustawiany był na poziomie wdrożenia np dopisując parametr do skrótu - to tylko jeden z pomysłów ale to już drugorzędna sprawa). Podobnie robią pozostałe aplikacje offline. W naszym przypadku było to związane z pracą w terenie i po powrocie do bazy aby porównać wyniki z wielu mobilnych stanowisk była druga aplikacja, która łączyła się do stanowisk offline wyciągała dane i robiła odpowiedni insert do centralnej bazy danych, na które już były generowane zestawienia raporty itd.

0
pbartczak napisał(a):

Mamy aplikacje desktopową pracującą w 2 do 5 lokalizacjach ze wspólną bazą danych.
Aplikacje muszą pracować bez dostępu do sieci.

Jakie rozwiązanie bazodanowe proponujecie?

Czy każdy komputer ma osobną bazę danych plus synchronizacja?
Czy lepiej centralna baza plus repliki?

Czy są jakieś gotowe rozwiązania, które by to ogarnęły?
Jaki DBMS użyć?

Z góry dziękuję za pomoc :)

Pamiętam kiedyś tworzyłem taką aplikację. System miał jedną wspólną centralną bazę, ale wiele aplikacji musiało pracować offline i po połączeniu z bazą dopiero synchronizować wyniki. Wszystkie dane były w postaci relacyjnej w zwykłych plikach. Dodatkowo tworzone były zapytania do bazy jednocześnie w innym pliku. Problem był oczywiście z indeksami o ile np. dla klienta nip jest unikatowy czy tam pesel to o ile dobrze pamiętam aplikacja generowała jakiś id z nazwy atrybutu. W razie problemów, aplikacja po synchronizacji nakazywała użytkownikowi zmianę tam czegoś. Rozwiązanie na dzień dzisiejszy oceniam jako kiepskie, ale jakoś tam działało.

0

Konkretnie.
Chodzi o aplikację do zarządzania przychodnią stomatologiczną. Obecnie mamy dwa gabinety w dwóch miejscach. Może się to rozszerzyć.
Współdzielone prawie wszystkie dane.
Baza pacjentów, terminarz itp itd.top.
Najbardziej czułym punktem jest terminarz. Pacjenci zapisywani są non stop.

Rozumiem że dużym problemem mogą być :

  • konflikty. Ktoś zapisze na jednej końcówce pacjenta do specjalisty X a równolegle ktoś inny bez dostępu do netu zrobi o samo.
  • szybkość propagacji zmian danych - tak aby tych konfliktów było jak najmniej
  • blokowanie dostępu do danych przez mechanizmy synchronizacji - propagacji zmian danych

Co rozważamy aby użyć - macie doświadczenia z poniższymi ???

Ogólnie mamy dylemat.
Oprogramować to samemu od podstaw - czyli się narobić ;).
Skorzystać z czegoś gotowego i się nie narobić. Osobiście czuję niebezpieczeństwo iż po pewnym czasie wyjdzie czegoś to się nie da zrobić bo jest to w "czarnej skrzynce".

**RabbitMQ **- ogólnie messaging - czyli każda baza osobno

  • dużo roboty (Rabbit daje tylko mechanizm transportu i propagacji zmian, ale samą obsługę komunikatów i ich wysyłanie, trzeba samemu zrobić) - to generalnie trochę spory minus
  • duża kontrola
  • można zautomatyzować (czyli dodanie nowego gabinetu, klienta, to tylko parę ustawień i samo powinno się ogarnąć)

**SymmetricDS **(soft do replikacji)

  • java, więc zaczynamy mieszać środowiska
  • niby open source, ale mają też bogatszą wersję PRO, przez co dokumentacja jest trochę słaba
  • problem z automatyzacją ? każdy kolejny gabinet, trzeba by konfigurować, testować itd..
  • wszystko to konfiguracja w plikach tekstowych, czyli jak nie uruchomisz i nie zadziała, to nie wiesz, że jest źle
    ? nie bardzo wiem jak merge się obsługuje
  • obsługuje master/master
  • są w sieci informacje, że ludzie z tego korzystają

**SQL Anywhere **- http://sybase.com.pl/products/sql_anywhere.
Piszą że są dobrzy w te klocki ;)

Microsoft Sync Framework - macie z tym doświadczenie?

  • nigdzie nie jest jasno napisane, że M$ będzie to dalej wspierał/rozwijał (zrobili open source chyba w 2012 i cisza od tamtej pory, więc wygląda na coś trochę przestarzałego, z drugiej strony jest jakaś wtycza do Azure, więc technologii wiądącej na tą chwilę w M$)
  • stworzone specjalnie do tego
  • sporo przykładów, choć raczej nie dzisiejszych
  • daje dość dużo gotowych klocków, które można wykorzystać, więc powinno skrócić robotę a jednocześnie dać możliwość ingerencji, dostosowania
  • używają tego u mnie w pracy do synchronizacji na komórki z iOS m.in.
0
SQL Anywhere - http://sybase.com.pl/products/sql_anywhere.
Piszą że są dobrzy w te klocki ;-) 

Uwierz mi, oni dużo piszą ;-)

0

Jeżeli to obsługa gabinetu to dlaczego musi działać offline?
Da się to rozwiązać, problemem może być terminarz bo tutaj dane muszą być jak najświeższe żeby to dobrze zsynchronizować.

Używałem kiedyś Sybase w systemie o takiej architekturze i nie było to zbyt przyjemne.

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