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.