R-03-07.pdf
(
694 KB
)
Pobierz
Rozdzia³_3_Bazy danych
Rozdział 3. Bazy danych
Prawie wszystkie aplikacje wymagają przechowywania danych. Wymagania te mogą się zmieniać,
począwszy od zupełnie podstawowych jak przechowywanie niewielkiej liczby opcji startowych, aż
do olbrzymich i złożonych baz danych jak np. bazy przechowujące informacje o wykształceniu
wszystkich obywateli danego kraju. Równie ważne jest to, że wymagania stawiane pojemności
nośników danych także mogą się zmieniać, począwszy od potrzeby przechowania prostych plików
tekstowych o ustalonej długości aż do dużych obiektów binarnych.
Bardzo waży jest wybór rozwiązania odpowiedniego dla danego problemu. Nie ma przecież sensu
używanie skomplikowanego serwera bazy danych do przechowywania obrazu wyświetlanego jako
„tapeta” na ekranie monitora. Podobnie nie ma też sensu próba przechowywania w jednym pliku
tekstowym wszystkich danych potrzebnych w dużym domu maklerskim do śledzenia kursów
akcji.
Właściwy wybór zależy zarówno od objętości, jak i od rodzaju danych. Jeżeli dane zawierają dużą
liczbę „pojedynczych obiektów” (traktując słowo „obiekt” w jego ogólnym sensie), które muszą
być przechowane, to odpowiednim rozwiązaniem może być baza w postaci prostego lub
indeksowanego pliku tekstowego. Jeśli dane mają strukturę hierarchiczną, wówczas lepsza może
być struktura drzewiasta używana np. w serwerze
LDDP
(z serwerem
LDAP
spotkamy się w
dalszych częściach książki).
Jeżeli dane zawierają obiekty kilku różnych rodzajów, powiązanych przez swoje właściwości,
dobrym rozwiązaniem będzie prawdopodobnie relacyjna baza danych. Bazy tego typu są bardzo
elastyczne i umożliwiają przechowywanie większości struktur danych, łącznie ze strukturami
drzewiastymi, jeśli jest to konieczne.
Korzystając z systemu operacyjnego Linux, znajdujemy się w szczęśliwym położeniu, bowiem
dysponujemy wieloma sposobami zarządzania swoimi danymi i możemy wybrać rozwiązanie
spełniające nasze wymagania. W najprostszym przypadku możemy użyć prostych plików
tekstowych albo stosując niskopoziomowe
API
, albo wykorzystując ułatwiający dostęp do danych
interfejs
gnome_config
, jeśli aplikacja będzie aplikacją
Gnome
. Jeżeli nasze wymagania nie są
skomplikowane, a potrzebny jest szybki dostęp do danych, to możemy rozważyć użycie funkcji
ndbm
. Umożliwiają one przechowywanie prawie dowolnych danych i zapewniają bardzo wydajny
dostęp za pomocą indeksów. Funkcje te zostały opisane w książce
Beginning Linux Programming
wydanej przez wydawnictwo Wrox Press. Rozwiązania tego rodzaju nie są jednak właściwe przy
bardziej skomplikowanych potrzebach i nie będziemy się nimi dalej zajmować.
Na dalszych miejscach skali mamy do wyboru trzy główne bazy:
mSQL
,
MySQL
i
PostgreSQL
,
które omówimy w dalszych częściach książki. Można także rozważać użycie bazy
InterBase
, która
formalnie jest produktem komercyjnym, ale w czasie pisania tej książki była dostępna dla systemu
Linux bezpłatnie łącznie z pełnym kodem źródłowym. Jeśli nasze wymagania są ostrzejsze, to
możemy rozważyć użycie jednej z zaadaptowanych dla systemu Linux komercyjnych baz danych,
takich jak
DB2
,
Sybase
lub
Oracle
. Na szczęście niewielu użytkowników ma aż tak wygórowane
wymagania i większość z nich może zupełnie pomyślnie posługiwać się otwartym
oprogramowaniem w rodzaju
MySQL
lub
PostgreSQL
, które całkowicie spełnia ich potrzeby.
Wybór bazy danych
Zanim przejdziemy do omawiania bardziej technicznych zagadnień, omówimy skrótowo trzy
najpopularniejsze otwarte rozwiązania wykorzystujące
SQL
i dostępne w systemie Linux.
Zastanowimy się także nad tym, które z nich będzie najlepiej spełniać nasze wymagania stawiane
bazie danych. Podczas pisania tej książki dostępne były kody źródłowe dla wszystkich trzech baz
danych, a
MySQL
i
PostgreSQL
były ponadto wolne od opłat licencyjnych. Możliwe, że w
przyszłości ograniczenia licencyjne zostaną złagodzone lub zaostrzone, albo też nowsze wersje
kodów źródłowych nie będą swobodnie rozpowszechniane, należy więc sprawdzić aktualny stan
licencji na stronach macierzystych tych produktów.
mSQL
David Hughes, pracownik naukowy Bond University w Australii, pracował nad oprogramowaniem
do zarządzania siecią o nazwie
Minerva
, które wymagało użycia bazy danych. Chciał on użyć
standardowego języka
SQL
, ale w owym czasie jedyną „wolną” bazą danych był
Postgres
, w
którym zastosowano własny język zapytań o nazwie
PostQUEL
. David napisał interfejs
programowy przetwarzający podstawowe zapytania
SQL
na
PostQUEL
i przekazujący je do
serwera
Postgres
. Nazwano go
MiniSQL
lub
mSQL
. Wkrótce okazało się, że użycie serwera
Postgres
i tłumaczenie zapytań było bardziej skomplikowane, niż się tego spodziewano i Hughes
ulepszył
mSQL
w taki sposób, aby nie korzystać ze wspomagania serwera
Postgres
. Taki
samodzielnie działający
mSQL
jest obecnie również dostępny i można go znaleźć pod adresem
http://www.hughes.com/au/
.
MySQL
Baza
MySQL
powstała w podobny sposób jak
mSQL
. Firma TcX opracowywała aplikację
wykorzystującą
WWW
i bazę danych i stwierdziła, że najlepszym rozwiązaniem będzie użycie
SQL. Postanowiono wykorzystać
API
zbudowane na podstawie
mSQL
i tak powstał produkt o
nazwie
MySQL
. Po pewnym czasie
API
dla
MySQL
i
mSQL
zaczęły się różnicować w miarę
rozwoju
MySQL
, ale nadal podobieństwa są na tyle duże, że przenoszenie kodu z
mSQL
do
MySQL
jest dosyć łatwe.
MySQL
można znaleźć pod adresem
http://www.MySQL.com/
.
PostgreSQL
PostgreSQL
wywodzi się z pakietu
Ingres
(bazy danych opracowanej na Uniwersytecie
Kalifornijskim w Berkeley). Podczas pisania książki
Ingres
był nadal dostępny w ofercie
handlowej firmy Computer Associates. W Berkeley, wkrótce po bazie
Ingres
, opracowano także
inną bazę o nazwie
Postgres
, która była wykorzystywana do eksperymentów z relacjami między
obiektami. Początkowo
Postgres
zupełnie nie korzystał z
SQL
, ale około roku 1995. Jolly Chen i
Andrew Yu dodali obsługę
SQL
i wydali nową wersję o nazwie
Postgres95
.
Po koniec roku 1996. prace rozwojowe przejął zespół związany z ruchem wolnego
oprogramowania i produkt ponownie zmienił nazwę, tym razem na
PostgreSQL
, pod którą jest
aktywnie rozwijany do dzisiaj. Ponieważ
PostgreSQL
nie jest objęty żadnymi restrykcjami
komercyjnymi, zatem może być swobodnie rozpowszechniany. Dzięki temu jest dostępny w wielu
dystrybucjach Linuksa. Można go pobrać z sieci z adresu
http://www.postgresql.org/
.
Jaki wybór będzie odpowiedni?
Mamy więc trzy bazy danych przeznaczone do przeciętnych zastosowań, a każda z nich ma
dostępny kod źródłowy — co więc należy wybrać do naszego projektu? Odpowiedź brzmi jak
zawsze: zależy to od wielu czynników. Nie ma prostej odpowiedzi. W czasie pisania książki
najłatwiej było dokonać wyboru między
mSQL
i
MySQL
. Baza
MySQL
lepiej obsługuje standard
SQL
i jej licencja jest nieco bardziej otwarta, a więc można ją faworyzować. Być może, podczas
czytania tych słów sytuacja się już zmieniła i baza
mSQL
odebrała pierwszeństwo
MySQL
,
ponieważ obydwie były aktywnie rozwijane.
Wybór między
MySQL
(lub być może
mSQL
) a
PostgreSQL
zależy już bardziej od naszych
potrzeb. Jeżeli potrzebna jest niewielka baza danych z szybko działającymi zapytaniami,
przeznaczona do zastosowań wewnątrz firmy lub użytku osobistego i nie jesteśmy zbyt mocno
zainteresowani używaniem transakcji (które wyjaśnimy później) lub bardzo zaawansowanymi
aspektami SQL, to najprawdopodobniej najlepszym wyborem będzie
MySQL
. W rzeczywistości
jest ona szeroko stosowana na wielu serwerach
WWW
, w których obsługa transakcji jest o wiele
mniej ważna niż szybkość pobierania danych. Wynika to stąd, że serwery
WWW
wymagają tylko
odczytu danych przekazywanych do klienta, zaś potrzeba modyfikacji danych występuje tam
bardzo rzadko.
Jeśli jednak chcemy rozpowszechniać naszą aplikację z bazą danych i jesteśmy zainteresowani
użyciem mechanizmów transakcyjnych, to
PostgreeSQL
będzie prawdopodobnie jedyną
możliwością wyboru. Aby dokonać wyboru między tymi krańcowo różniącymi się bazami, należy
samodzielnie przestudiować strony macierzyste obydwu produktów i ocenić je według swoich
potrzeb. Obydwie bazy są na pewno bardzo dobre.
PostgreSQL
W pozostałych częściach tego rozdziału i w następnych rozdziałach skoncentrujemy się na bazie
PostgreSQL
z następujących powodów:
1. Jest ona dostępna na warunkach bardzo liberalnej licencji i można jej używać za darmo. Oto
krótki cytat z licencji ilustrujący jej główne założenie:
Copyright (c) 1994-8 Regents of the University of California
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written
agreement is hereby granted, provided that the above copyright notice and
this paragraph and the following two paragraphs appear in all copies.
(Pozostałe części zawierają standardowe zastrzeżenia).
2. Baza ta jest dołączana do wielu dystrybucji Linuksa, są więc duże szanse, że jeśli pracujemy
w tym systemie, to ona również została zainstalowana. Jeżeli tak nie jest, to można ją
zapewne znaleźć na płycie z dystrybucją w postaci gotowej do zainstalowania.
3. Baza
PostgreSQL
obsługuje transakcje, dzięki czemu możliwe jest dokonanie kilku
modyfikacji danych i podjęcie decyzji, czy wszystkie te modyfikacje zatwierdzić lub wycofać.
W wypadku pracy wielu użytkowników, którzy modyfikują dane, jest to bardzo ważne
zagadnienie. Nawet w aplikacji przeznaczonej dla pojedynczego użytkownika zastosowanie
transakcji może się okazać bardzo pożyteczne.
4.
PostgreSQL
lepiej wspomaga standard
ANSI SQL
niż inne bazy, zatem można posługiwać się
zapytaniami o bardziej zaawansowanej konstrukcji.
Instalacja i uruchamianie
Nie mamy zamiaru rozwodzić się tutaj szeroko o instalacji bazy
PostgreSQL
, ponieważ baza ta
została prawdopodobnie już zainstalowana lub jest dostępna w danej dystrybucji Linuksa. Jeżeli
tak nie jest, to należy pobrać ją ze strony o adresie
http://www.postgresql.org
i zainstalować we
własnym zakresie. Dostępne są zarówno wersja źródłowa, jak i pakiety binarne. Polecamy
instalację pakietów binarnych, ponieważ jest to łatwiejsze i szybsze niż samodzielna kompilacja.
Po pierwszym uruchomieniu serwera
PostgreSQL
pojawia się tylko jedna baza danych o nazwie
template1
i z tą bazą należy się połączyć. Domyślnie dostęp do serwera ma tylko jeden
użytkownik o nazwie
postgres
, mający uprawnienia administratora bazy danych (jest on
tworzony podczas instalacji pakietu).
Po zainstalowaniu
PostgreSQL
należy się upewnić, czy proces serwera bazy działa i czy serwer
został zainicjowany. Aby zainicjować bazę, należy zalogować się jako
root
i utworzyć katalog
/usr/local/pgsql/data
. Właścicielem tego katalogu powinien być użytkownik
postgres
:
#
chown postgres /usr/local/pgsl/data
Następnie należy zmienić tożsamość na użytkownika
postgres
:
#
su - postgres
i zainicjować
PostgreSQL
w następujący sposób:
#
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
Teraz należy sprawdzić, czy działa proces
postmaster
(taką nazwę nosi proces serwera bazy
PostgreSQL
):
#
ps axw
Jeśli proces
postmaster
został uruchomiony, wówczas w zależności od wyboru instalacji
możemy zobaczyć komunikat zbliżony do poniższego:
474 p1 S 0:00 /usr/local/pgsql/bin/postmaster -D/usr/local/pgsql/data
Jeżeli proces
postmaster
nie działa, to należy go uruchomić za pomocą polecenia:
#
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
Oczywiście, jeżeli zmienna
$PATH
zawiera katalog
/usr/local/pgsql/bin
lub jego
równoważnik, to nie trzeba używać pełnej ścieżki w poleceniu i wystarczy tylko napisać:
#
postmaster -D /usr/local/pgsql/data
Warto więc zmodyfikować zmienną
$PATH
, aby zaoszczędzić czas w przyszłości.
Zazwyczaj dystrybucja jest przygotowywana w taki sposób, że przy pierwszym uruchomieniu
serwera wywoływane jest automatycznie polecenie
initdb
inicjujące bazę
PostgreSQL
. Można
sprawdzić, czy w pliku konfiguracyjnym systemu po instalacji
PostgreSQL
automatycznie jest
wywoływany demon serwera
PostgreSQL
.
W niektórych starszych dystrybucjach (np. w Red Hat 6.0) funkcja
initdb
nie była wywoływana
automatycznie i nie była tworzona pusta wzorcowa baza danych. Ręczna inicjacja bazy jest
opisana na macierzystej stronie WWW firmy Red Hat oraz w książce Professional Linux
Deployment wydanej przez Wrox.
Po upewnieniu się, że proces
postmaster
działa, możemy połączyć się z serwerem. Łączenie
polega na połączeniu się z bazą danych. Podobnie jak w innych „prawdziwych” bazach, jeden
proces serwera
PostgreSQL
może obsługiwać wiele różnych baz.
W pakiecie
PostgreSQL
istnieje wygodne narzędzie o nazwie
psql
wspomagające dostęp do bazy
danych z wiersza poleceń. Wykorzystamy je do eksperymentów z bazą, zanim użyjemy do tego
celu języka programowania.
Aby sprawdzić, czy serwer działa poprawnie, najpierw trzeba stać się administratorem bazy
danych. W tym celu, po zalogowaniu jako
root
, należy użyć polecenia:
#
su - postgres
Teraz możemy połączyć się z serwerem:
$
psql template1
Przy odrobinie szczęścia powinniśmy otrzymać sekwencję komunikatów podobną do poniższej:
Plik z chomika:
jacek_040
Inne pliki z tego folderu:
PLP_Spis treści-1.pdf
(189 KB)
R-00-07.pdf
(210 KB)
R-01-07.pdf
(498 KB)
R-02-07.pdf
(628 KB)
R-03-07.pdf
(694 KB)
Inne foldery tego chomika:
Android
C#
C++
Cisco
cisko
Zgłoś jeśli
naruszono regulamin