Cześć,
Sprawa dotyczy programu Handel 2.0Napisałem dla klienta program na Androida dla jego przedstawicieli handlowych, który pozwala na odczyt w terenie zaległości klientów.
Prosta aplikacja która czyta z serwera REST dane.
Serwerem REST jest aplikacja na serwerze z bazą danych. Łączę się z bazą poprzez ODBC. Można powiedzieć że wszystko działa dość dobrze, poza jednym.
Standardowo każdy przedstawiciel widzi wszystkich swoich kontrahentów (aplikacja na start pobiera taką listę). Robię to bardzo prostym zapytaniem sql w którym pobieram kod kontrahenta z warunkiem z pola poledod2 (tam wrzucone mam przypisanie przedstawiciela do kontrahenta). Zapytanie wygląda następująco:
Kod:
select kod from KH where rodzaj = 3100 and poledod2 = 'tutaj_nazwa_przedstawiciela' order by kod
Takie pytanie wykonuje się dość szybko.
Jednak dzisiaj wpadłem na pomysł aby przedstawiciel mógł pobrać tylko listę swoich klientów którzy mają zaległości (dokładnie to jest wybór trybu pracy).
Takie dane pobieram z bazy PN:
Kod:
select d.khkod from PN d inner join KH k on d.khid = k.id where (d.typdk = 'FVS' or d.typdk = 'FVSW') and d.kwotawal > 0 and d.termin < Now() and k.poledod2 = 'tutaj_nazwa_przedstawiciela' GROUP BY d.khkod order by d.khkod
No i zaczęły się problemy. Na serwerze testowym jeszcze jakoś to działa, chociaż według mnie tragicznie ale na serwerze produkcyjnym do którego było podpiętych kliku klientów wynik był tragiczny. Gdy kliku przedstawicieli wpadło na pomysł odświeżenia listy kontrahentów z zaległościami prawie zabiło mi to bazę danych.
Sprzęt raczej wydala, niezły serwer Della z dobrymi komponentami, Pervasive 12 Workgroup (fakt że ten dołączany do Symfonii).
Takie pytanie na serwerze testowym (w tabeli PN jest trochę ponad 220 tys. rekordów więc nie jakoś strasznie dużo a w tabeli KH około 1,5 tys.) trwa około 2,2 sekundy.
Pomyślałem że to może być wina ODBC które jednak pośredniczy w tym zadaniu. Sprawdziłem więc pytanie na PSQL Control Center. Jest lepiej, pytanie trwa 1,8 sekundy.
Ktoś może powiedzieć że jest to w miarę ok.
Zrobiłem więc eksperyment, na tym samym serwerze postawiłem MS SQL 2017 w wersji express (więc niezbyt wydajne rozwiązanie). Zaimportowałem bazę klienta i sprawdziłem to samo zapytanie, na odpowiedź czekałem, uwaga ... 48 ms !!!
To jest przepaść.
No i teraz pytanie, czy pervasive jest aż tak mało wydajny w porównaniu z MS SQL czy to raczej wersja workgroup jest taka wolna?
Podzielcie się swoimi doświadczeniami.
Na dzisiaj myślę o napisaniu narzędzia które co kilka godzin będzie importowało dane do bazy MS SQL, fakt dane nie będą "najświeższe" ale za to nie będę się stresował lagami.
Pozdrawiam
Robert