Skrypty administracyjne

Chcąc zautomatyzować czynności tworzenia i uruchomienia samej bazy, a także jej zasilania danymi na potrzeby sklepu napisano skrypty powłoki wywołujące określone działania w bazie danych. Proces zasilania danymi sterowany jest głównym skryptem wywołującym poszczególne pod-skrypty odpowiedzialne za pewne fragmenty działania poszczególnych zadań zasilania w dane całej bazy. Niektóre z nich uruchamiane są jednorazowo w momencie tworzenia bazy lub też jej kasowania. Inne pozwalają na wykonanie pewnych analiz (na obecnym etapie rozwoju aplikacji jedynie w minimalnym zakresie). Większość danych ładowana jest bez natychmiastowego indeksowania co znacząco przyśpiesza całą operację. Dopiero po załadowaniu danych do tabel następuje zindeksowanie wszystkich wymaganych pól w konkretnych tabelach. Na samym końcu wykonywana jest „odkurzenie” bazy pozwalająca PostgreSQL’owi na empiryczną i statystyczną optymalizację wyszukiwania danych. Poniższe zestawienie prezentuje i omawia wywołania wszystkich skryptów.

#!/bin/sh

  • skrypt 20-zaloztabele

# echo Założenie tabel bazy emarket SQ

# KAT_SQL=’/home/bazy/emarket/sqł’

SQL=’/usr/łocał/pgsqł/bin/psqł -d emarket -q -f’

echo

echo cennik…

$SQL $KAT_SQL/create/c reate_tabłe_cennik.sqł echo cenydew…

$SQL $KAT_SQL/create/c reate_tabłe_cenydew .sqł echo dostawcy…

$SQL $KAT_SQL/create/c reate_tabłe_dostawcy.sqł echo magazyn…

$SQL $KAT_SQL/create/c reate_tabłe_magazyn.sqł echo odbiorcy…

$SQL $KAT_SQL/create/c reate_tabłe_odbio rcy.sqł #echo informacje…

$SQL $KAT_SQL/create/c reate_tabłe_informacje.sqł echo

echo Koniec.

Powyższy pod-skrypt „20-zaloztabele” odpowiedzialny jest za początkowe założenie niezbędnych tabel w bazie SQL. Wywołuje już bezpośrednio, napisane w dialekcie języka SQL92 polecenia zakładające poszczególne tabele z polami określonego typu.

#!/bin/sh

  • skrypt 20-zaladujtabele

# echo Załadowanie danych do tabel bazy emarket SQI

# KAT_SQL=’/home/bazy/emarket/sqł’

SQL=’/usr/łocał/pgsqł/bin/psqł -d emarket -q -f’

echo

echo cennik…

$SQL $KAT_SQL/1oad/łoad_tabłe_cennik.sqł echo cenydew…

$SQL $KAT_SQL/łoad/łoad_table_cenydew.sqł #echo dostawcy…

#$SQL $KAT_SQL/łoad/łoacLtabłe_dostawcy.sqł #echo odbiorcy…

#$SQL $KAT_SQL/łoad/łoacLtabłe_odbiorcy.sqł echo magazyn…

$SQL $KAT_SQL/łoad/łoad_tabłe_magazyn.sqł echo

echo Przy okazji skorygujemy błedne dane…

  • pewne dane w zasiłajacych zbiorach sa zdupłikowane łub nie maja
  • wypełnionych wymaganych poł (zaszłosc historyczna) poprawiamy to tutaj SQL=’/usr/łocał/pgsqł/bin/psqł -d emarket -q -c’

$Sql „UPDATE magazyn SET data=’19940505′ where data=’ ‚;”

#$Sql „DELETE FROM cenydew where indeks=’984001′ and cenat=’1036.07′;”

SQL=’/usr/łocał/pgsqł/bin/psqł -d emarket -q -f’ echo uniqmagazyn…

$SQL $KAT_SQL/łoad/łoad_tabłe_uniqmagazyn.sqł echo Koniec.

Powyższy pod-skrypt „20-zaladujtabele” wywołuje skrypty SQL92 wczytujące i korygujące dane bezpośrednio do tabel w bazie. Niektóre dane (np. odbiorcy i dostawcy) nie są wczytywane na obecnym etapie rozwoju sklepu internetowego aż do momentu gdy aplikacja zostanie rozbudowana o moduły współpracy z partnerami handlowymi (B2B), realizację wymiany partnerskiej, dynamicznie konstruowane cenniki w zależności od podpisanych umów na upusty globalne itp.

#!/bin/sh

  • Skrypt 40-załadujkatałog

# echo Załadowanie danych do tabeł bazy emarket SQI

# KAT_SQL=’/home/bazy/emarket/sqł’ SQL=’/usr/łocał/pgsqł/bin/psqł -d emarket -q -f’

echo

echo ładujemy dane do tabełi katałog…

$SQL $KAT_SQL/łoad/łoad_tabłe_katałog.sqł

echo indeksujemy tabełe katałog…

$SQL $KAT_SQL/create/c reate_index_katał og.sqł

echo

echo Koniec.

Powyższy pod-skrypt generuje dane do dodatkowo tworzonej tabeli zawierającej wyfiltrowane dane z tabeli zawierającej dane ze wszystkich magazynów. W aplikacji finansowo księgowej firmy, każdy magazyn zawiera towary współistniejące w innych magazynach. Każdy z magazynów posiada ten sam indeks dla towaru, zgodny z innymi indeksami w pozostałych magazynach. Każdy z nich ma swój własny stan magazynowy (dyspozycyjny i księgowy) oraz cenę. Istnieje także globalna tabela cen dewizowych przechowująca wspólną cenę dla wszystkich magazynów. Idea działania aplikacji magazynowej w firmie jest taka, iż gdy istnieje dla danego towaru cena w centralnym cenniku to właśnie ona ma przewagę nad ceną lokalną w danym magazynie, dlatego tutaj właśnie zdecydowano się na zagregowanie tych danych w jeden wspólny rekord będący podstawą do dalszego działania sklepu.

#!/bin/sh

  • skrypt 40-zalozindeksy

echo Założenie indeksów bazy emarket SQI

# KAT_SQL=’/home/bazy/emarket/sqł’ SQL=’/usr/łocał/pgsqł/bin/psqł -d emarket -q -f’

echo

echo cennik…

$SQL $KAT_SQL/create/c reate_index_cennik.sqł echo cenydew…

$SQL $KAT_SQL/create/c reate_index_cenydew .sqł #echo dostawcy…

#$SQL $KAT_SQL/create/create_index_dostawcy .sqł #echo magazyn…

#$SQL $KAT_SQL/create/create_index_magazyn.sqł #echo odbiorcy…

#$SQL $KAT_SQL/create/create_index_odbi orcy .sqł echo uniqmagazyn…

$SQL $KAT_SQL/create/c reate_index_uniqmagazyn.sqł echo informacje…

$SQL $KAT_SQL/create/c reate_index_informacje.sqł echo

echo Koniec.

Powyższy pod-skrypt indeksuje wszystkie potrzebne pola w tabelach. Wykonywane jest to dopiero po wczytaniu całości danych gdyż w ten sposób uniknięto przebudowywania indeksów przy wczytywaniu danych do tabel i uzyskano znaczny wzrost szybkości całej operacji importu danych. Silnik bazy danych w takim przypadku nie wykonuje blokad przy dodawaniu rekordów a i same dane są fizycznie na dysku nie pofragmentowane, co miało by miejsce, gdyby równocześnie trwało przeplatanie wczytania rekordu i zaktualizowanie indeksu. Co prawda leżący u podstaw systemu plików mechanizm dba o takie rozmieszczenie plików, aby ulegały jak najmniejszej fragmentacji, jednak odbywa się to kosztem zwiększonego zapotrzebowania na zasoby systemu. Pamiętajmy że PostgreSQL przechowuje wszystkie obiekty bazy w osobnych plikach.

#!/bin/sh

  • skrypt 45-optymalizuj

echo Optymalizacja bazy emarket SQI

# echo

/usr/łocał/pgsqł/bin/vacuumdb –analyze emarket echo

echo Koniec.

Powyższy pod-skrypt uruchamia mechanizmy analizy i optymalizacji wbudowane w silnik bazy danych. W przypadku bazy, w której nie są kasowane tabele z danymi ten mechanizm wpływa na „uczenie” się rozkładu danych i wykorzystywanie metod stochastycznych dla przyspieszenia dostępu do danych i powinien być uruchamiany okresowo. W przypadku bazy eMarket nie ma on aż tak znaczącego wpływu, gdyż dane są stale „młode”.

#!/bin/sh

  • skrypt 50-statystyka

echo Statystyka tabel bazy emarket SQI

# KAT_SQL=’/home/bazy/emarket/sqł’ SQL=’/usr/łocał/pgsqł/bin/psqł -d emarket -q -c’

echo

echo Załadowane rekordy w tabelach:

echo cennik    ‚$SQL „SELECT count(*)  FROM cennik;”’

echo ceny_dew  ‚$SQL „SELECT count(*)  FROM cenydew;”‚

echo dostawcy  ‚$SQL „SELECT count(*)  FROM dostawcy;”‚

echo uniqmagazyn. ‚$SQL „SELECT count(*) FROM uniqmagazyn;”

echo odbiorcy  ‚$SQL „SELECT count(*)  FROM odbiorcy;”‚

echo katalog   ‚$SQL „SELECT count(*)  FROM katalog;”‚

echo informacje.. ‚$SQL „SELECT count(*) FROM informacje;”‚

echo

echo Koniec.

Powyższy pod-skrypt zlicza ilości krotek w poszczególnych tabelach po załadowaniu danych oraz je prezentuje co zostaje dołączone przy wczytywaniu danych do raportu kontrolnego przesyłanego administratorom.

#!/bin/sh

  • skrypt 80-usunindeksy

echo Skasowanie indeksow bazy emarket SQ

# KAT_SQL=’/home/bazy/emarket/sqł’ SQL=’/usr/łocał/pgsqł/bin/psqł -d emarket -q -f’

$SQL $KAT_SQL/dełete/drop_ałł_index.sqł

echo

echo Koniec.

#!/bin/sh

  • skrypt 90-usuntabele

echo Skasowanie tabel bazy emarket SQI

# KAT_SQL=’/home/bazy/emarket/sq1′ SQL=’/usr/1oca1/pgsq1/bin/psq1 -d emarket -q -f’

$SQL $KAT_SQL/de1ete/drop_a11_tab1e. sq1

echo

echo Koniec.

Powyższe dwa pod-skrypty usuwają wszystkie tabele i indeksy z bazy eMarket. Wykonywane są przed załadowaniem nowych danych do tabel. Operacja skasowania całych tabel wraz z indeksami jest nieporównywalnie szybsza niż kasowanie zawartości tabel a ponadto fizycznie usuwane są niepotrzebne już pliki z dysku serwera.

#!/bin/sh

  • 95-czysctmp

echo Usuwanie plikow zasilenia bazy SQL eMarket

# # parametry poczatkow/e:

KAT_TMP=’/home/bazy/emarket/tmp’

rm $KAT_TMP/CENNIK. IN rm $KAT_TMP/CENIY_DEW.IN rm $KAT_TMP/ODBIORCY.IN rm $KAT_TMP/DOSTAWCY.IN rm $KAT_TMP/MAGAZYN.IN

echo Zbiorki zasilajace usuniete! echo Koniec.

Powyższy pod-skrypt ma na celu fizyczne usunięcie niepotrzebnych zbiorów zasilających. Jest uruchamiany w tylko specyficznych przypadkach, bowiem zbiory te są kasowane przy przesyłaniu danych z serwera wewnętrznego firmy.

#!/bin/sh

  • 99-struktura

echo Struktura bazy emarket SQI

#

|           /usr/1oca1/pgsq1/bin/psq1  -d   emarket 2>&1

|           /usr/1oca1/pgsq1/bin/psq1  -d   emarket 2>&1

”      |            /usr/1oca1/pgsq1/bin/psq1  -d   emarket 2>&1

|           /usr/1oca1/pgsq1/bin/psq1  -d   emarket 2>&1

|           /usr/1oca1/pgsq1/bin/psq1  -d   emarket 2>&1

|           /usr/1oca1/pgsq1/bin/psq1  -d   emarket 2>&1

|           /usr/1oca1/pgsq1/bin/psq1  -d   emarket 2>&1

Powyższy pod-skrypt ma za zadanie wyświetlenie struktury bazy danych eMarket. Służy wyłącznie celom administracyjnym np. przy rozbudowywaniu i modyfikowaniu tabel, pól czy
indeksów. Wyniki jego wykonania posłużą do dalszej prezentacji struktur tabel bazy w dalszej części pracy.