[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Jak to jest z client server?




>Wariant A.: ok. 20 sekund
>Wariant B.: ok. 30 minut

Witam !
Już kilkakrotnie starałem się w różnych miejscach dowiedzieć gdzie 
dokonywana jest selekcja zapisów: po stronie serwera czy po stronie 
klienta. Nigdzie na ten temat nie uzyskałem wiarygodnych odpowiedzi, a już 
na pewno w formie jakiejś dokumentacji czy artykułu. Jest to słodką 
tajemnicą firmy PSC. Oczywiście miejsce selekcji zapisów wpływa zasadniczo 
na czas transmisji. W przypadku selekcji po stronie klienta wymaga to 
przesłania dużej ilości zapisów przez sieć. Mój intuicyjny i poparty 
obserwacjami pogląd na tę sprawę jest następujący:
   - Strategia działania zależy od wersji Progress'a i w nowszych wersjach 
(9.x) chyba jest z tym lepiej
   - Selekcja odbywa się częściowo na serwerze, a częściowo po stronie klienta
   - Na serwerze odbywa się nawiasowanie  (bracketing), czyli wybieranie 
zapisów z ciągłego przedziału kluczy w indeksie oraz realizacja złączeń
   - Tak wybrane i złączone zapisy są wysyłane do klienta i tam dokonywana 
jest selekcja szczegółowa (wszystkie warunki OR, MATCHES itp.)
   - Chyba jednak szybciej są realizowane zapytania zadawane za pomocą 
instrukcji QUERY  niż FOR EACH. QUERY dopuszcza OUTER JOIN, a FOR ECAH nie, 
co świadczy, że chyba jednak nie są realizowane tymi samymi mechanizmami.

Bardzo częstą przyczyną długiego czasu realizacji zapytań jest ich zła 
konstrukcja wymagająca przeszukiwania całej tablicy - zapis po zapisie. Są 
to zapytania, w których tak sformułowano warunki, że brak jest 
nawiasowania. W przypadku realizacji takich zapytań lokalnie, gdzie 
komunikacja między klientem a serwerem odbywa się przez pamięć dzieloną, 
czas realizacji jest znośny, bo zapisy są dostępne na miejscu. W przypadku 
zdalnego klienta sprawa staje się tragiczna. Wielokrotnie poprawiałem 
programy napisane przez niedoświadczonych programistów nie rozumiejących 
zasad nawiasowania i po takim zabiegu programy "dostawały skrzydeł", 
działały 100 czy 1000 razy szybciej !. Jest to szczególnie widoczne przy 
złączeniach dwóch tablic, gdzie każdy zapis jednej tablicy jest łączony z 
każdym zapisem innej tablicy (oczywiście w sposób niezamierzony) po to by w 
rezultacie wybrać kila złączeń. Liczba tak złączonych zapisów staje się 
ogromna (równa iloczynowi ich ilości). Być może jest to taki przypadek. 
Sytuację można często znacząco poprawić poprzez dodanie odpowiednich 
indeksów umożliwiających sprawne nawiasowanie jak też poprzez przesyłanie 
tylko potrzebnych pól a nie całych zapisów (opcja FIELDS).

  I to tyle z mojej strony, sam chętnie posłucham co inni mają do 
powiedzenia na ten temat albo wskażą jakąś literaturę.
Pozdrawiam,


Henryk Jusza               mailto:henju@pg.gda.pl
--------------------------------------------------------------
Ośrodek Informatyczny Politechniki Gdańskiej
Pracownia Rozwoju Oprogramowania
tel (058) 347-28-01          fax (058) 347-24-63

------
Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy:  listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------