Bazy danych
Transkrypt
Bazy danych
2010-11-29
PLAN WYKŁADU
Składowanie danych
Podstawowe struktury plikowe
Organizacja plików
BAZY DANYCH
Wykład 8
dr inż. Agnieszka Bołtuć
HIERARCHIA MECHANIZMÓW SKŁADOWANIA
Podstawowy mechanizm składowania – pamięć
operacyjna, zapewnia szybki dostęp, ale
ograniczona pojemność,
Drugorzędny mechanizm składowania – dyski
magnetyczne, optyczne i taśmy, większa
pojemność, mniejszy koszt, wolniejszy dostęp.
PRZECHOWYWANIA BAZ DANYCH
Dane w dużych ilościach i trwałe przechowywane
są najczęściej na dyskach drugorzędnego
mechanizmu przechowywania (pamięć
zewnętrzna),
Powody:
zbyt duże, aby mieściły się w pamięci w
całości,
jest to pamięć nieulotna, mniej narażona na
utratę danych,
mniejszy koszt jednostkowy.
1
2010-11-29
TYPY REKORDÓW I PLIKI
REKORDY
Dane są zwykle przechowywane w postaci rekordów,
Każdy rekord składa się z pól przechowujących
wartości,
Rekordy zwykle opisują encje i ich atrybuty,
Nazwy pól i ich dane to typ rekordu,
Przykład rekordu w notacji C:
Rodzaje rekordów:
Proste – wartość pola elementarna i złożone wartością pola rekordu jest inny rekord,
O stałej długości - zawsze zajmuje tyle samo
miejsca na dysku, niezależnie od rzeczywistych
rozmiarów przechowywanych w nim danych i
zmiennej długości – wszystkie rekordy różnej
długości, przyjmują taki rozmiar jaki faktycznie
przyjmują przechowywane w nich dane (pola o
zmiennej długości, wiele wartości dla pojedynczego
rekordu, pola opcjonalne, różne typy rekordów),
Plik jest ciągiem rekordów.
struct pracownik{
char imie[10];
char pesel[10];
int wiek;
int zarobki;
};
Typ danych BLOB jest przechowywany poza swoim
rekordem,
FORMATY PRZECHOWYWANIA REKORDÓW
Nazwisko
PESEL
1
Nazwisko
Kowalski
12
PESEL
45061123411
Nazwisko=Kowalski
ROZMIESZCZANIE REKORDÓW W BLOKACH
Stanowisko
Rekordy są przydzielane w blokach dyskowych,
gdyż blok stanowi jednostkę przesyłania danych
pomiędzy dyskiem a pamięcią,
Rozmiar tych bloków jest określany przez system
operacyjny,
Każdy blok może zawierać wiele rekordów, każdy
rekord może się mieścić w wielu blokach,
22
Stanowisko
kierownik
PESEL=45061123411
Stanowisko=kierownik
2
2010-11-29
WSPÓŁCZYNNIK BLOKU
ORGANIZACJA REKORDÓW
Można określić tzw. współczynnik bloku bfr –
reprezentujący średnią liczbę rekordów na blok dla
danego pliku:
bfr= ⎣B/R⎦, B- rozmiar bloku w bajtach, R- rozmiar
rekordu o stałej długości lub maksymalny rozmiar
rekordu o zmiennej długości, B≥R,
B-(bfr*R) bajtów – to obszar nieużywanej
przestrzeni w każdym bloku, wynikający z faktu że
R jest zazwyczaj niepodzielne przez B,
b= ⎡(r/bfr)⎤ bloków – liczba bloków wymaganych
dla pliku zawierającego r rekordów, dla rekordów o
zmiennej długości,
Organizacja segmentowa (dzielona)
Rekordy mogą być przechowywane w kilku
blokach, gdy są zbyt duże są dzielone,
Wskaźniki wskazują na kolejne bloki w których
znajduje się pozostała cześć rekordu,
Redukuje ilość traconej przestrzeni dyskowej,
ORGANIZACJA REKORDÓW
RODZAJE ALOKACJI BLOKÓW NA DYSKU
Organizacja niesegmentowa (niepodzielna)
Rekord, który nie mieści się w całości w bloku jest
przenoszony do bloku, w którym zmieści się cały,
Powoduje pozostawanie niewykorzystywanego
miejsca w blokach,
Ciągła – bloki pliku są alokowane w kolejnych blokach
dysku, szybkie, ale utrudnia rozszerzanie pliku,
Łączona – każdy blok pliku zawiera wskaźnik na
następny, spowalnia, ale umożliwia rozszerzanie,
Klastrów - ciągłe sekwencje bloków są łączone w
klastry, które zawierają wskaźniki na kolejne klastry,
klastry nazywa się segmentami pliku lub obszarami
pliku,
Indeksowa - bloki pełnią rolę indeksów zawierających
wskaźniki na faktyczne bloki pliku.
R1
R4
R2
R5
R3
blok i
R5
blok i+1
R1
R2
R3
blok i
R3
R4
R5
blok i+1
3
2010-11-29
NAGŁÓWKI (DESKRYPTORY) PLIKÓW
OPERACJE NA PLIKACH
Zawiera podstawowe informacje wymagane przez
programy systemowe:
Informacje służące do określania adresów na
dysku bloków pliku,
Opisy formatów – z długością pól i kolejnością
pól w rekordzie dla niesegmentowanych
rekordów o stałej długości,
Kody typów pól, znaki separatorów oraz kody
typów rekordów dla rekordów o zmiennej
długości
Informacje wykorzystywane do wyszukiwania
rekordu na dysku.
Operacje jednorekordowe:
OPERACJE NA PLIKACH
OPERACJE NA PLIKACH
ZnajdźNastępny: szuka kolejnego rekordu
spełniającego warunki,
Usuń: usuwa rekord bieżący, aktualizuje plik na
dysku,
Zmodyfikuj: modyfikuje wybrane pola bieżącego
rekordu, aktualizuje plik na dysku,
Wstaw: wstawia nowy rekord do zlokalizowanego
bloku po ówczesnym przesłaniu rekordu do
pamięci, zapisuje bufor na dysk,
Zamknij: zwalnia bufory, wykonuje inne operacje
czyszczące,
Przeglądaj: zwraca pierwszy lub kolejny rekord
(jeśli plik był wcześniej otwarty)
Operacje zbiorowe:
ZnajdźWszystkie: znajduje wszystkie rekordy w
pliku spełniające warunek,
ZnajdźN: wyszukuje 1 rekord spełniający warunek i
następnie n-1 kolejnych,
ZnajdźPosortowane: pobiera rekordy z pliku w
wybranym porządku,
Zreorganizuj: dokonuje rozpoczęcia procesu
reorganizacji, np. zmiany kolejności rekordów pliku
poprzez ich posortowanie,
Otwórz, Zamknij.
Otwórz: przygotowuje plik do odczytu, przydziela
bufory, odczytuje nagłówek pliku, ustawia wskaźnik na
początku pliku,
Zeruj: ustawia wskaźnik na początku otwartego pliku,
Znajdź: znajduje pierwszy rekord spełniający warunki
wyszukiwania, przesłanie znalezionego bloku
dyskowego do bufora w pamięci, ustawia wskaźnik na
znalezionym rekordzie – nazywanym rekordem
bieżącym,
Odczytaj: kopiuje bieżący rekord do zmiennej programu
w aplikacji użytkownika, może przesuwać wskaźnik na
następny rekord w pliku,
4
2010-11-29
RODZAJE OPERACJI I PLIKÓW
RODZAJE ORGANIZACJI PLIKÓW
Operacje pobierania – nie zmieniają danych,
lokalizują określone rekordy,
Operacje aktualizacji – zmieniają plik poprzez np.
dodawanie czy usuwanie rekordów,
Pliki nieuporządkowanych rekordów (stertowe lub
stosowe),
Pliki uporządkowanych rekordów (posortowane,
sekwencyjne),
Pliki statyczne – operacje aktualizacji są stosowane
bardzo rzadko,
Pliki dynamiczne – podlegają częstym zmianom,
Pliki haszowe.
PLIKI NIEUPORZĄDKOWANYCH REKORDÓW
PLIKI STERTOWE - OPERACJE
Wstawianie: wydajne, po ostatnim rekordzie,
Wyszukiwanie: liniowe przeszukanie całego pliku
blok po bloku, jeśli mamy w pliku b bloków to przy
jednym rekordzie spełniającym warunki mamy
koszt średni b/2, zaś przy kilku rekordach lub ich
braku koszt nawet b,
Usuwanie: wiąże się z takimi operacjami jak
wyszukanie, skopiowanie do bufora, usunięcie i
zapisanie na dysku, powoduje pojawienie się
nieużywanej przestrzeni na dysku, można
wprowadzić znacznik usunięcia lub okresowa
reorganizację pliku,
Rekordy umieszczane są w pliku w kolejności
wstawiania – nowy rekord zawsze na końcu,
Adres ostatniego bloku przechowywany jest w
nagłówku pliku,
5
2010-11-29
PLIKI STERTOWE - OPERACJE
PLIKI STERTOWE - CHARAKTERYSTYKA
Porządkowanie: tworzy się posortowaną kopię
pliku, operacja kosztowna, stosuje się technikę
sortowania zewnętrznego - polega ono na
sortowaniu pliku fragmentami, które mieszczą się w
pamięci operacyjnej. Każdy posortowany fragment
jest w drugiej fazie sortowania łączony z innymi
fragmentami,
PLIKI UPORZĄDKOWANYCH REKORDÓW
PLIKI SEKWENCYJNE - OPERACJE
Rekordy pliku są porządkowane według wartości
jednego pola (pole uporządkowania),
Aaron
Abbott
Blok 1
…
Adams
Andrews
Barnaba
…
Efektywne wstawianie pojedynczych rekordów i
zbiorów rekordów – zawsze na końcu,
Efektywne inne operacje, ale tylko w przypadku
plików o rozmiarze kilku bloków,
Struktura właściwa dla odczytu wszystkich
rekordów (o stałej i zmiennej długości, o organizacji
segmentowanej i niesegmentowanej),
Struktura stosowana z innymi strukturami dostępu
do danych (np. indeksy).
Blok 2
Cyklon
Odczyt rekordów: wydajny, bez sortowania,
Znalezienie następnego: wydajne, przeważnie
bez konieczności dostępu do innych bloków,
Wyszukiwanie: może być użyty mechanizm
wyszukiwania binarnego, efektywny, koszt log2b,
Wstawianie: kosztowe, gdyż wymaga fizycznego
uporządkowania rekordów, należy wyszukać
pozycję i przesuwać średnio połowę rekordów
(odczytanie i zapisanie),
…
Wojko
Zaklew
…
Blok n
Zynks
6
2010-11-29
PLIKI SEKWENCYJNE - OPERACJE
Usuwanie: kosztowny tak jak wstawianie, można
nadawać znaczniki usunięcia i dokonywać
reorganizacji,
Wyszukiwanie wg innego klucza niż klucz
uporządkowania: wyszukiwanie liniowe,
Modyfikacja: koszt zależy od warunku
wyszukiwania (gdy uwzględnia pole porządkujące
to binarnie) i modyfikowanego pola (porządkujące
czy nie), modyfikacja pola porządkującego jest tak
samo kosztowna jak wstawienie rekordu
PLIKI SEKWENCYJNE - WSTAWIANIE
Zwiększenie wydajności wstawiania można uzyskać
dzięki:
Pozostawianie niezużytej przestrzeni w każdym
bloku dla nowych rekordów- gdy miejsce się
skończy ten sam problem,
Tworzenie tymczasowego pliku
nieuporządkowanego (plik przepełnienia) z nowym
rekordem na końcu i okresowe jego sortowanie z
dołączaniem do pliku głównego w trakcie
reorganizacji- zwiększamy efektywność wstawiania,
ale dołączamy nieefektywne wyszukiwanie liniowe,
PLIKI SEKWENCYJNE - CHARAKTERYSTYKA
PLIK MIESZAJĄCY/HASZOWY
Zalety:
Efektywny odczyt rekordów w kolejności pola
porządkującego, gdyż są już posortowane
Znalezienie następnego rekordu, według określonego
porządku, jest bardzo proste
Bardzo efektywne wyszukiwanie oparte na metodzie
binarnej, jeśli kryterium oparte jest o pole porządkujące,
Wady:
Uporządkowanie pliku jest nieprzydatne, gdy
wyszukiwanie jest realizowane według wartości pola nie
porządkującego pliku danych,
wstawianie i usuwanie rekordów jest bardzo kosztowne
ze względu na konieczność zachowania porządku.
Organizacja pliku bazuje na technice mieszania,
Porządek rekordów w pliku określony na podstawie
tzw. pola mieszającego/haszowego,
Idea polega na określeniu funkcji h (funkcja
mieszająca/haszowa/randomizacji), która to zwraca
adres bloku dyskowego, w którym powinien znaleźć
się dany rekord,
Wyróżniamy następujące rodzaje haszowania:
wewnętrzne,
zewnętrzne.
7
2010-11-29
HASZOWANIE WEWNĘTRZNE
HASZOWANIE WEWNĘTRZNE
Mieszanie implementowane jest w postaci tablicy
mieszającej z użyciem tablicy rekordów,
Koncepcja haszowania wewnętrznego:
dana jest tablica o indeksach od 0 do M-1, zatem jest
M pozycji których adresy odpowiadają indeksom
tablicy,
wybierana jest funkcja mieszająca, która przekształca
pole mieszające na wartość całkowitą z przedziału od
0 do M-1,
najczęściej spotykaną funkcją haszową jest funkcja
h(K)=K MOD N,
inne funkcje haszujące opierają się na operacjach
arytmetycznych, logicznych, wybieraniu pewnych cyfr
z wartości pola mieszającego.
HASZOWANIE WEWNĘTRZNE - PRZYKŁAD
Nazwisko
PESEL
Stanowisko
Dział
0
1
2
3
4
5
M-2
M-1
Polem mieszającym może być Nazwisko, zaś wynikiem działania funkcji
haszowej adres pod którym umieścimy rekord.
ALGORYTMY MIESZAJĄCE
Pierwszym etapem przed zastosowaniem
mechanizmu haszowania jest transformacja:
wartości niecałkowitoliczbowych do całkowitych,
czy ciągu znaków do wartości numerycznych,
Przykład algorytmu mieszającego: zastosowanie
funkcji mieszającej mod względem ciągu znaków K
Id
Nazwisko
Dział
16
Kowlaski
O
0
10;Polaks;O
12
Otycek
P
1
11;Wertykowski;P
15
Macukow
L
2
12;Otycek;P
14
Fortulik
K
3
13;Laisek;O
13
Laisek
O
4
14;Fortulik;K
10
Polaks
O
5
15;Macukow;L
11
Wertykowski
P
6
16;Kowlaski;O
char K[20];
temp=1;
for (i=1;i<=20;i++)
{
h(Id)=Id mod 10
temp=temp*K[i] ;}
adress=temp % M;
8
2010-11-29
KOLIZJA
Następuje gdy wartość pola mieszającego
wstawianego rekordu po wykonaniu mieszania
zwraca adres który zawiera już inny rekord,
Rozwiązaniem jest wstawienie rekordu na innej
pozycji, nazywamy to rozstrzygnięciem kolizji,
Metody rozstrzygania kolizji:
Adresowanie jawne,
Łączenie,
Mieszanie wielokrotne.
ADRESOWANIE JAWNE
METODY ROZSTRZYGANIA KOLIZJI
Adresowanie jawne - począwszy do pozycji
zwróconej przez haszowanie program sprawdza
wszystkie kolejne aż znajdzie nieużywaną pozycję,
czyli w skrócie kolejną wolną,
Łączenie – do każdej pozycji rekordu zostaje
dodane pole wskaźnika, nowy rekord jest
umieszczany na nieużywanej pozycji przepełnienia
i ustawiany jest adres mieszający na taką pozycję,
tworzony jest obszar przepełnienia do
przechowywania rekordów ulegających kolizji,
Mieszanie wielokrotne – program stosuje drugą
lub trzecią funkcję mieszającą, jeśli mamy dalej
kolizję wykorzystywane jest adresowanie jawne,
ŁĄCZENIE
Algorytm rozstrzygnięcia kolizji przez jawne adresowanie
Pola danych
i=adres_mieszania(K); a=i;
if (pozycja i jest zajęta)
{
i= (i+1) % M;
while ((i!=a) && pozycja i jest zajęta)
i= (i+1) % M;
if (i==a) wszytskie_pozycje_zajęte
else
nowy_adres=i;
}
0
1
2
3
4
5
Wskaźnik przepełnienia
NULL
M
NULL
NULL
obszar
adresowy
M+2
M-2
M-1
M+1
M
M+1
M+2
M+5
NULL
NULL
M+4
obszar
przepełnienia
M+O-2
M+O-1
9
2010-11-29
ODWZOROWANIE NUMERU PAKIETU NA ADRES
HASZOWANIE ZEWNĘTRZNE
BLOKU
Mieszaniem zewnętrznym określamy mieszanie dla
plików na dysku,
Przestrzeń adresowa dzielona jest na pakiety
zawierające wiele rekordów,
Liczba pakietów jest stała i równa liczbie szczelin w
tablicy haszowej,
Pakiet może być pojedynczym blokiem albo ich
klastrem,
Funkcja haszująca przekształca klucz na względny
numer pakietu,
Nagłówek pliku dyskowego zawiera tablicę
konwersji numerów pakietów w fizyczne adresy
bloków dyskowych,
tablica konwersji
numer
pakietu
0
1
2
3
4
5
HASZOWANIE ZEWNĘTRZNE - OPERACJE
Mniej istotny,
Jeśli należy rozstrzygać kolizję można skorzystać z
techniki łączenia, gdzie mamy wskaźniki na listę
rekordów przepełnienia danego pakietu,
Pakiet 1
Pakiet 2
pakiet przepełenienia
Rekord 1
Rekord 1
Rekord 2
Rekord m
wskaźnik
Rekord 2
…
…
wskaźnik
…
Rekord
m+1
wskaźnik
Rekord n
Wskaźnik
Rekord n
NULL
…
M-2
M-1
PROBLEM KOLIZJI
adres bloku na
dysku
Wskaźnik
Wyszukiwanie rekordu – jeśli oparte o pole inne
niż mieszające to jest tak samo kosztowne jak w
pliku nieuporządkowanym,
Usuwanie rekordu – usuwanie ich z pakietu,
Jeśli pakiet posiada łańcuch przepełnień to
przenosimy jeden z rekordów do pakietu,
Jeśli usuwamy rekord przepełnienia usuwamy
go z listy, należy jednak zapamiętywać puste
pozycje przepełnienia,
Można w tym celu wykorzystać listę
nieużywanych pozycji przepełnienia,
NULL
10
2010-11-29
HASZOWANIE ZEWNĘTRZNE - OPERACJE
MIESZANIE STATYCZNE I DYNAMICZNE
Modyfikacja rekordu – zależy od warunku
wyszukiwania oraz rodzaju pola, które ma być
zmodyfikowane,
Jeśli warunek jest porównaniem równościowym z
polem mieszającym to wyszukiwanie za pomocą
funkcji haszowej, jeśli inny to wyszukiwanie liniowe,
Gdy modyfikacji ulega pole nie będące polem
mieszającym to zmieniamy rekord i zapisujemy go
w tym samym pakiecie, w przeciwnym przypadku
pakiet może ulec zmianie stąd usuwamy rekord i
wstawiamy zmodyfikowany,
O mieszaniu statycznym mówimy gdyż przydzielana jest
stała liczba pakietów M,
Jest to wadą gdy chcemy dynamicznie rozszerzać lub
skracać pliki,
Można to rozwiązać stosując mieszanie rozszerzalne
lub liniowe,
Schematy te wykorzystują fakt możliwości
przedstawienia wyniku funkcji mieszającej w postaci
liczby binarnej (wartość skrótu), rekordy są rozkładane
do pakietów na bazie wartości bitów wiodących w ich
wartościach skrótów,
MIESZANIE ROZSZERZALNE
MIESZANIE ROZSZERZALNE
pakiety plików danych
Dostępna jest struktura katalogu – tablicy o 2d
adresach pakietów, gdzie d to głębokość globalna
katalogu,
Wartość całkowita, która odpowiada pierwszym d
bitom jest indeksem tablicy w celu określenia
pozycji katalogu, adres z tej pozycji określa pakiet z
odpowiednimi rekordami,
Kilka lokalizacji katalogu z tymi samymi pierwszymi
bitami może zawierać ten sam adres pakietu, jeśli
wszystkie rekordy się w nim mieszczą,
d’ – to głębokość lokalna – trzymana w każdym
pakiecie, która mówi o liczbie bitów na których
oparta jest zawartość pakietu,
d’=3
katalog
d=3
000
d’=3
pakiety dla rekordów
rozpoczynających się od 000
pakiety dla rekordów
rozpoczynających się od 001
001
010
011
d’=2
100
pakiety dla rekordów
rozpoczynających się od 01
101
110
d’=2
pakiety dla rekordów
rozpoczynających się od 10
111
d’=3
pakiety dla rekordów
rozpoczynających się od 110
d’=3
pakiety dla rekordów
rozpoczynających się od 111
11
2010-11-29
MIESZANIE LINIOWE
ideą haszowania liniowego jest umożliwienie zmiany
rozmiaru przestrzeni adresowej funkcji haszowej bez
użycia katalogu,
plik początkowo składa się pakietów 0,1,2,...,M-1 a
wykorzystywana funkcja haszowa to hi(K) = K mod M
przepełnienia wywołane kolizjami są obsługiwane przez
przechowywanie łańcuchów dla poszczególnych
pakietów,
jeśli w dowolnym pakiecie nastąpi przepełnienie,
pierwszy pakiet pliku (0) jest dzielony na dwa pakiety 0 i
M za pomocą nowej funkcji haszowej hi+1(K) = K mod
2M
przy kolejnych kolizjach pakiety są dzielone w porządku
liniowym 1,2,3,… za pomocą hi+1(K), w konsekwencji
mamy 2M pakietów
W YKŁAD PRZYGOTOWANO NA PODSTAWIE
R. Elmasri, S. B. Navathe, Wprowadzenie do
systemów baz danych, Helion, 2005,
http://wazniak.mimuw.edu.pl/index.php?title=Bazy_
danych.
12