Wątek przeniesiony 2015-05-18 00:24 z Newbie przez furious programming.

Odnowienie łączności z bazą danych

0

Witajcie,

Na początku chciałem ten post umieścić w dziale Delphi ale jednak być może mój problem jest zbyt prosty, dlatego post wylądował w tym dziale. Do rzeczy:

Napisałem naprawdę prosty programik który wykrywa czy w bazie danych (postgresql na serwerze debianowym w internecie) doszedł nowy rekord. Jest to program dla firmy w której pracuję i ma informować pracowników że pojawiła się nowa transakcja. Dlaczego program w tray-u a nie strona internetowa sklepu? Ano dlatego że to nowo wystartowany sklep i tych transakcji jest kilka dziennie. Pracownik nie ma ochoty odświeżać strony co chwilę aby zobaczyć że nic się nie zmieniło a jak już pojawi się transakcja to jest duża szansa że ją przegapi i będzie problem. Oczywiście powinna załatwić to aplikacja sklepu aby nic nie umknęło ale to już nie moja działka. Aktualnie jest to marnie rozwiązane. Ja zrobiłem powiadamianie (z komunikatami dźwiękowymi) i podglądem na 10 ostatnich transakcji i działa to rewelacyjnie ... do czasu :).

Nie raz już zdarzyło mi się pisać aplikacje bazodanowe których serwer danych był w dalekiej lokalizacji. Za zwyczaj nie ma żadnych problemów z MSSQL czy firebird-em pod Windows. Łączę się przez bde (już od dawna nie), chociaż jakiś czas temu zrobiłem test wydajności i nie jednego może zaskoczyć, zeos (bardzo niechętnie), nie lubię tej biblioteki, ado (częściej) chociaż mam troszkę zastrzeżeń. Oczywiście do firebirda używam wbudowanych komponentów interbase i jest to rozwiązanie które preferuję. Kiedyś bardzo intensywnie łączyłem się przez odbc. W przypadku serwerów w internecie (mam na myśli mysql i postgres na linuksach) już tak fajnie nie jest. Są problemy z kodowaniem (da się to pokonać) i stabilnością.

Tutaj właśnie dochodzę do sedna tego postu.

Nie potrzebuję jakiś gotowych kawałków kodu, bardziej interesuje mnie jak radzicie sobie z problemem chwilowych przerw w łączności z serwerem sql? Jakich mechanizmów używacie (nie mówię o komercyjnych i drogich bibliotekach które mają możliwość zrobienia reconnect do bazy danych a bardziej rozwiązania nazwijmy to amatorskie.

Pozdrawiam i namawiam do małej dyskusji.

Robert

0

Wydaje mi się, że nie ma jednej dobrej odpowiedzi na Twoje pytanie. W sytuacji gdy robię bazę od początku (a gdy mogę to zrobić to zawsze wybieram postgresql) to projektuję ją w taki sposób aby nawet utrata połączenia (i zmiana identyfikatora sesji) nie była problemem. W tym wypadku używam zeos i po prostu gdy nie ma połączenia albo zostało przerwane robię ponowne połączenie. W przypadku gotowych systemów użyłem głównie UniDAC i FireDAC. Oba są płatne oba mają wbudowane mechanizmy reconect. Jest to o tyle istotne, że jeśli logika bazy jest oparta o zmienne sesyjne to reconnect w wielu przypadkach nawiąże to samo połączenie (jeśli się uda) i sesja może być kontynuowana ... Nie znam specyfiki Twojej bazy ale jeżeli mam Ci coś polecić od siebie to uważam, że czasami lepiej kupić naprawdę porządne narzędzie i mieć spokój na lata niż wymyślać koło od nowa ...

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