Bazy danych

Transkrypt

Bazy danych
Plan wykładu
• Model logiczny i model fizyczny
• Mechanizmy składowania plików
• Moduł zarządzania miejscem na dysku i moduł zarządzania
buforami
• Formaty rekordów i sposoby ich zapisu
• Rozmieszczenie rekordów w blokach
• Metody organizacji pliku rekordów
Bazy danych
Wykład 10: Fizyczna organizacja
danych w bazie danych
Małgorzata Krętowska
Katedra Oprogramowania
e-mail: [email protected]
2
Model logiczny i fizyczny
Operacje na pliku
• Model logiczny bazy danych
• Podstawowe operacje na pliku
–
–
–
–
• Model fizyczny bazy danych - oparty jest na pojęciu pliku i
rekordu.
– Plik obiektu bazy danych składa się z rekordów posiadających ten
sam format
– Format rekordu jest listą nazw pól z określeniem ich typów danych.
– Rekord składa się z wartości poszczególnych pól. Niektóre pola są
wyróżnione jako klucz rekordu - ich wartości jednoznacznie
identyfikują cały rekord.
wstawianie
usuwanie
modyfikacja
wyszukiwanie
• Plik służy zwykle jako reprezentacja fizyczna jednej tabeli. Ale
również istnieje możliwość pliku jako klastra kilku tabel i wtedy
rekordy trzymane w pliku mogą mieć różny format
3
Mechanizmy składowania
4
Dyski
• Podstawowy mechanizm składowania - nośniki danych, na
których może bezpośrednio operować procesor np. pamięć
RAM. Mechanizm podstawowy zapewnia zwykle szybki dostęp
do danych, ale wiąże się z ograniczoną pojemnością
• Charakterystyka wykorzystania danych przechowywanych na
dysku:
– dostęp swobodny: w oparciu o adres rekordu na dysku można go
przesłać do pamięci RAM w jednej operacji We-Wy
– dane są przechowywane i przesyłane w jednostkach nazywanych
blokami dyskowymi lub stronami
– czas dostępu do danych na dysku zależy od ich położenia na dysku
(ciągi sąsiadujących ze sobą stron)
– dąży się do tego, aby dane, które są często wykorzystywane przez
programy, na stałe przebywały w buforach pamięci RAM.
– Operacje odczytu i zapisu bloków na dysku mogą być realizowane
współbieżnie. Stąd opłaca się, aby transakcje użytkowników były
realizowane przez system współbieżnie, a nie sekwencyjnie.
• Drugorzędny mechanizm składowania - dyski magnetyczne,
dyski optyczne oraz taśmy
– urządzenia te charakteryzują się większą pojemnością, mniejszymi
kosztami i oferują wolniejszy dostęp do danych niż mechanizm
podstawowy.
– Dane nie mogą być przetwarzane bezpośrednio przez procesor
główny
5
6
Taśmowe urządzenia pamięciowe
Dyskowy model fizyczny
• Dostęp sekwencyjny - aby uzyskać dostęp do n-tego bloku na
taśmie najpierw musimy przejrzeć wcześniejsze n-1 bloków.
• Nie są przeważnie wykorzystywane do przechowywania danych
bieżących ale do archiwizacji baz danych
Atrybut
Pole
Wiersz (obiekt)
Rekord
Strona (blok)
Relacja
Plik
Porównanie pojęć poziomu logicznego i fizycznego
7
Dyskowy model fizyczny
8
Moduł zarządzania miejscem na dysku
• W pliku mamy dwa rodzaje stron:
• gdy rozmiar rekordu jest większy niż rozmiar strony, rekord jest
dzielony na części przechowywane na osobnych stronach
(najlepiej sąsiadujących na dysku)
– strony z wolnym miejscem do zapisu nowych rekordów
– strony całkiem lub prawie całkiem zapełnione
• Zakładamy także, że system ma możliwość rozszerzenia pliku
rekordów i alokacji nowych pustych stron.
• Moduł zarządzania miejscem na dysku realizuje następujące
funkcje:
• duże obiekty LOB są trzymane w osobnym obszarze
przeznaczonym do ich przechowywania w bazie danych, zwykle
jako ciąg sąsiednich stron. W rekordach danych znajdują się
tylko ich wskaźniki
–
–
–
–
• jeden plik może reprezentować też klaster tabel tzn. powiązanie
danych z dwóch lub większej liczby tabel. Dane w pliku są
wówczas umieszczane w oparciu o wspólny klucz.
odczyt strony
zapis strony
pobranie strony do zapisu nowego rekordu
alokacja ciągu stron (położonych spójnie na dysku)
• Moduł zarządzania miejscem na dysku ukrywa szczegóły sprzętu
i systemu operacyjnego i umożliwia pozostałym modułom
traktowanie danych na dysku jako zbioru stron.
9
Zarządzanie buforami danych (w RAM)
10
Działania modułu zarządzania buforami
• Moduł zarządzania buforami danych jest odpowiedzialny za
sprowadzanie stron z dysku do puli buforów w pamięci RAM.
Zapis strony odbywa się w ramce
• Gdy procesowi potrzebna jest strona:
– Gdy potrzebnej strony nie ma w puli ramek
• wybierz ramkę z listy wolnych ramek (licznik odwołań=0)
• jeśli strona w wybranej ramce została zmieniona, ale nie
zaktualizowana na dysku (bit modyfikacji=true) zapisz ją na dysk
• wczytaj potrzebną stronę w wybraną ramkę
• ustaw jej licznik odwołań=1
– Gdy potrzebna strona jest w puli ramek, zwiększ jej licznik odwołań
o 1.
– Przekaż procesowi wskaźnik do ramki ze stroną
– jeśli można przewidzieć , że mają być sprowadzone sąsiadujące na
dysku strony , sprowadź od razu kilka stron
• Oprócz puli ramek w pamięci RAM są przechowywane:
– tablica par: <nr_ramki, id_strony>
– dla każdej ramki: licznik odwołań - ile różnych procesów używa
ramki w danej chwili
– dla każdej ramki bit modyfikacji - czy po sprowadzeniu do pamięci
RAM zawartość ramki została zmodyfikowana
– wszystkie ramki, których licznik odwołań=0 tworzą listę wolnych
ramek
11
12
Działania modułu zarządzania buforami
Formaty rekordów
• Gdy zmienia się zawartość ramki:
• Plik jest ciągiem rekordów. Jeżeli każdy rekord w pliku ma
dokładnie ten sam rozmiar o takim pliku mówi się , że składa się
z rekordów o stałej długości. Jeżeli różne rekordy w pliku mają
różny rozmiar o pliku mówi się, że składa się z rekordów o
zmiennej długości. Taka sytuacja ma miejsce wówczas, gdy
– ustawiamy dla ramki bit modyfikacji = true
• Strona w buforze danych może być potrzebna wielu procesom:
– nowe zapotrzebowanie na stronę zwiększa jej licznik odwołań o
jeden
– gdy proces zwalnia stronę w ramce, jej licznik odwołań zmniejsza
się o jeden
– ramka staje się kandydatem do zastąpienia, gdy jej licznik odwołań
=0. Zostaje wtedy wstawiona na listę wolnych ramek
– rekordy mają ten sam typ rekordu, ale jedno lub więcej pól ma
zmienną długość
– rekordy mają ten sam typ rekordu, ale jedno lub więcej pól jest
opcjonalne
– plik zawiera rekordy o różnych typach rekordów, a przez to różnych
rozmiarach (klastry)
• Strategie zastępowania stron w ramkach z listy wolnych ramek
– LRU - zastępuje się stronę, która najdłużej była nieużywana
– MRU - zastępuje się stronę, która ostatnio była używana
– Clock - ustala się stałą cykliczną kolejność pobierania wolnych
ramek
13
Zapis rekordu o stałej długości
Zapis rekordu o zmiennej długości
• Zapis rekordu składa się ze spójnego obszaru zawierającego
ciągi pól P1,.., Pn o stałych rozmiarach D1,.., Dn
• Zapis rekordu o zmiennej długości można reprezentować przez
zapis o stałej długości (każde pole będzie reprezentowane w
rekordzie)
• dla pól o zmiennej długości (stałą liczba pól w rekordzie) można
wykorzystywać separatory (?, %, $), które nie występują w
wartości żadnego pola, w celu określenia końca pól o zmiennej
długości
• Mając adres bazowy (początek rekordu) B łatwo można obliczyć
początek i-tego pola jako B+D1+...+Di-1.
P1
P2
P3
P4
D1
D2
D3
D4
Adres bazowy
(B)
14
P1
P2
D1
Adres=B+D1+D2
P3
$
D3
P4
$
15
Zapis rekordu o zmiennej długości
Zapis rekordu z polami opcjonalnymi
• Jeżeli liczba pól w rekordzie jest duża, ale liczba pól faktycznie
występujących w rekordzie jest mała, można w każdym rekordzie
uwzględnić sekwencję par <nazwa_pola, wartość pola> zamiast
samych wartości pól.
• Występuje kilka rodzajów znaków rozdzielających
• Na początku rekordu umieszczamy tablicę wskaźników do
początków kolejnych pól, wówczas uzyskujemy
– bezpośredni dostęp do wartości i-tego pola
– efektywne przechowywanie wartości Null
P1
P2
16
P3
Nazwisko=Kowalski
oddziela nazwę pola
$
Wiek=25
oddziela pola
$
Zarobki=1500
%
kończy rekord
od jego wartości
17
18
Zapis rekordów różnych typów
Rozmieszczenie rekordów w blokach
• Każdy rekord zostaje poprzedzony wskaźnikiem typu rekordu
• Rekordy pliku muszą być rozmieszczane w blokach dyskowych
(stronach), ponieważ blok jest jednostką przesyłania danych
między dyskiem a pamięcią
• Gdy rozmiar bloku jest większy od rozmiaru rekordu, wówczas
każdy blok będzie zawierał wiele rekordów
Zapis rekordu w jednej z omawianych postaci
• Zakładając, że rozmiar bloku wynosi B bajtów, a rekordu R, gdzie
R<=B, wówczas można określić współczynnik bloku dla pliku:
bfr = floor(B/R)
Wskaźnik typu rekordu
• Rozmiar nieużywanej przestrzeni wynosi wówczas
B-(bfr R) bajtów
19
Rozmieszczenie rekordów w blokach
Rozmieszczenie rekordów w blokach
• Organizacja segmentowa bloku
• Organizacja niesegmentowa bloku
– wykorzystuje nieużywaną przestrzeń bloku w ten sposób, że część
rekordu jest przechowywana w jednym bloku, a reszta w drugim
– wskaźnik znajdujący się na końcu pierwszego bliku wskazuje na
blok zawierający resztę rekordu w przypadku, gdy nie będzie to
następny w kolejności blok na dysku.
Blok i
Blok i+1
20
Rekord 1
Rekord 2
Rekord 3
Rekord 4
P
R 4 (reszta)
Rekord 5
Rekord 6
Rekord 7
P
– rekordy nie mogą przekraczać granic bloków
– wykorzystuje się ją w przypadku rekordów o stałej długości , gdy
B>R, ponieważ powoduje to, że każdy rekord zaczyna się od znanej
lokalizacji w bloku, co upraszcza ich przetwarzanie
– w przypadku rekordów o zmiennej długości możliwa jest zarówno
organizacja segmentowa jak też niesegmentowa (zależy od
przeciętej długości rekordu)
Blok i
Rekord 1
Rekord 2
Rekord 3
Blok i+1
Rekord 4
Rekord 5
Rekord 6
21
Format strony dla rekordów stałej długości
22
Format strony dla rekordów stałej długości
• Dwa alternatywne formaty:
Wolne
miejsce
1
2
– najpierw są zgrupowane wszystkie miejsca zajęte a potem wolne
– miejsca zajęte i wolne są ze sobą przemieszane - to czy miejsce
jest wolne czy zajęte wskazuje bit w dodatkowej tablicy Occupied
• Occupied (i) =1 wtedy i tylko wtedy, gdy i-te miejsce na stronie
jest zajęte
N
• Przy operowaniu na danych pojawia się potrzeba sięgania do
konkretnych rekordów, a nie do wszystkich za każdym razem np.
sięgamy do rekordu w oparciu o jego wcześniej wyliczony adres
bądź poprzez adres znaleziony w indeksie.
• Adres rekordu (identyfikator rekordu rid) identyfikujący jego
położenie na dysku jest określany następująco:
rid=<id_strony, numer pozycji na stronie>
1
2
N
M
N
1 0 1 ... 0 1 1 1 M
M .......
Liczba rekordów
3 21
Liczba pozycji
W przypadku pierwszej struktury przesuwanie rekordów na stronie
powoduje zmianę identyfikatora rekordu, co komplikuje odwołania do
rekordu przez jego identyfikator rid.
23
24
Metody organizacji pliku rekordów
Format strony dla rekordów zmiennej długości
•
•
•
• Podstawowa różnica pomiędzy różnymi organizacjami plików
rekordów polega na tym, czy porządkują one rekordy według
wartości pewnego klucza czy nie.
Adres zapisu rekordu na stronie jest określony przez wartość w tablicy Poz.
Wartość Poz(i) wskazuje na początek obszaru i-tego rekordu. Dodatkowo
wartość Poz(0) wskazuje na początek obszaru wolnych miejsc.
Rid=<id_strony, numer pozycji w tablicy Poz>
Przy zmianie pozycji na stronie aktualizowany jest też adres w Poz(i). Nie
zmienia to indeksu i ,czyli nie zmienia również identyfikatora rekordu rid.
• Wyróżniamy:
– Plik nieuporządkowany
– Plik posortowany
– Plik haszowany
Strona i
Rid=(i,N)
Rid=(i,1)
20
... 13
24
Tablica pozycji
N
Wskaźnik do puli
wolnych miejsc
Liczba pozycji
25
Plik nieuporządkowany
26
Pliki posortowane
• Rekordy są przechowywane na stronach pliku w dowolnym
porządku
• nowy rekord jest wstawiany do pierwszej strony, na której jest
wolne miejsce
• Przy wyszukiwaniu przechodzimy po wszystkich stronach do
chwili napotkania szukanego rekordu albo końca pliku, gdy
rekordu nie ma w pliku
• Rekordy są zapisywane na kolejnych stronach względem klucza
rekordu
• Reprezentacja wygodna gdy rekordy przetwarza się zawsze w
pewnym ustalonym porządku lub tylko ich pewien zakres
względem tego porządku
np. Select * from pracownik order by pensja
select * from pracownik where pensja>2000
– wówczas do wyszukania odpowiednich rekordów można użyć
wyszukiwania binarnego na blokach a nie na rekordach (uzyskanie
dostępu do log2(b) bloków, gdzie b - liczba bloków w pliku.
• Organizacja nieuporządkowana jest wygodna przy wykonywaniu
zapytań dotyczących wszystkich rekordów lub większości
rekordów: select * from emp;
• Brak korzyści, gdy chcemy odwołać się do rekordów w oparciu o
wartości innych pól, które nie są polami uporządkowania -dostęp
wymaga wyszukiwania liniowego (średnio b/2 bloków)
27
Pliki posortowane
28
Pliki haszowane
• Problem - wstawianie i usuwanie rekordów
• Plik jest kolekcją segmentów
• Segment to strona główna plus zero lub więcej stron
nadmiarowych alokowanych do segmentu w razie potrzeby.
• Przydział rekordu do segmentu odbywa się w oparciu o wartość
funkcji haszującej, zastosowanej do klucza wyszukiwania
rekordu, którym jest jedno lub więcej pól rekordu:
– wstawianie - należy znaleźć odpowiednią pozycję w pliku względem
pola uporządkowania, a następnie zapewnić wolne miejsce w pliku.
W tym celu należy przesunąć średnio połowę rekordów w pliku.
• Poprawa wydajności przez wykorzystanie tymczasowego pliku
nieuporządkowanego tzn pliku przepełnienia. Nowe rekordy są
wstawiane do pliku przepełnienia - na jego koniec. Okresowo
plik jest sortowany i kolejne rekordy są wstawiane do pliku
głównego =>zwiększona złożoność operacji wyszukiwania
– usuwanie rekordów - problem mniej istotny , gdy wykorzystuje się
znaczniki usunięcia
• Funkcja haszująca: h(klucz wyszukiwania rekordu r)= adres
segmentu, do którego wpada rekord r
29
30
Plik haszowany
Plik haszowany
• Organizacja pliku haszowanego jest użyteczna przy wyborze
rekordu z pliku w oparciu o wartość lub wartości pewnych pól
rekordu np.:
select * from pracownik where nazwisko=&nazwisko
0
1
klucz
2
h
• Organizacja rekordów w pliku haszowanym nie zachowuje
kolejności wartości klucza wyszukiwania
M-1
Strony główne
• Zastosowanie jednej organizacji rekordów w pliku zazwyczaj nie
wystarcza w aplikacji baz danych, w których wyszukiwanie
odbywa się względem wartości różnych kluczy wyszukiwania.
Rozwiązanie tego problemu polega na skorzystaniu z osobnych
struktur indeksowych.
Strony nadmiarowe
31
32