Systemy zarządzania bazami danych
2. Układ danych na dysku
• Jak ułożyć dane na dysku?
• Jak odwzorować je w pamięci RAM?
Zagadnienia
Jakie dane się składuje?
• Wynagrodzenie (netto, brutto)
• Nazwisko (aktualne, rodowe)
• Data (urodzenia, zatrudnienia)
• Zdjęcie (z ostatniej wycieczki na grzyby)
Co mamy do dyspozycji?: Bajty
8
Reprezentacja:
• Integer (short): 2 bajty
np., 35 to
00000000 00100011
• Real (zmiennopozycyjnie)
n bitów na mantysę, m na cechę
• Real (stałopozycyjnie) księgowi lubią
• Znaki
rozmaite kodowanie, kiedyś: ASCII, teraz coraz częściej Unicode (UTF-8)
Reprezentacja:
Przykłady (ASCII):
A: 1000001 a: 1100001 5: 0110101 LF: 0001010
• Boolean
np., TRUE FALSE
1111 1111 0000 0000
Reprezentacja:
• Typy wyliczeniowe
np., RED 1 GREEN 3
BLUE 2 YELLOW 4 … Czy można użyć mniej niż 1 bajt?
• Daty
np.: - Integer, liczba dni od 01-01-1900 - 8 znaków, YYYYMMDD
- 7 znaków, YYYYDDD
(Teraz już raczej nie YYMMDD.
A może właśnie tak!)
• Czas
np. - Integer, liczba sekund od północy - 8 znaków, HHMMSSFF
Reprezentacja:
• Napisy
– Zakończone zerem, np.
– Z podaną długością, np.
c a t
c a t 3
Reprezentacja:
Zasadnicze rozróżnienie
• Elementy stałego rozmiaru
• Elementy zmiennego rozmiaru
- rozmiar zwykle jest podawany na początku elementu
• Typ elementu: Sposób jego
interpretacji (określa także rozmiar, gdy jest on stały)
• Uwzględnienie w reprezentacji danych typu elementu to krok w kierunku
danych samoopisowych
Na początku elementu także:
Elementy danych Rekordy
Bloki Pliki
Pamięć RAM
Składanie
Rekord
• Kolekcja powiązanych elementów danych (zwanych polami)
• Np. Rekord Employee: pole name,
pole salary,
pole hire date,
pole previous jobs (wielokrotne)
Rodzaje rekordów
• Główny podział :
– Rozmiar: stały vs. zmienny – Format: stały vs. zmienny
• Schemat (nie rekord) zawiera następujące informacje
– liczba pól
– typy poszczególnych pól – porządek pól w rekordzie – nazwa każdego pola
• Z zupełnie innej beczki. Także:
– informacje statystyczne: liczba wystąpień,
Format stały
Przykład: stały format i rozmiar
Employee
(1) E#, dwubajtowy integer
(2) Ename, napis 10-znakowy Schemat (3) Dept, dwubajtowy kod
55 s m i t h 02
83 j o n e s 01
Rekordy
• Rekord musi zawierać opis formatu
• Jest więc mniej lub bardziej samoopisowy
• Różne warianty informacji schematowych w takim wypadku
Format zmienny
Przykład: zmienny format i rozmiar
4 I
5
2 46 S 4 F O R D
Nazwy pól mogą być niekodowane, np. znaczniki XML
Liczba pól Kod pola E# Kod typu Integer Kod pola Ename Kod typu String Rozmiar pola String
Przydatność zmiennego formatu
• Rekordy „rzadkie” (pola opcjonalne)
• Pola wielokrotnych
• Ewolucja schematu
– Możemy modyfikować tylko schemat i nie musimy ruszać danych
Oznacza jednak marnowanie (?) przestrzeni...
• Pracownik może mieć dowolnie wiele dzieci
• Employee 1:N Child
3 E_name: Fred Child: Sally Child: Tom
Format zmienny z polem wielokrotnym
Pola wielokrotne wcale nie muszą oznaczać ani - ani formatu zmiennego
- ani rozmiaru zmiennego
John Sailing Chess --
• Trzeba tylko określić maksymalną liczebność
– i w razie czego wypełnić NULLowym gruzem
Wiele pośrednich opcji między formatem stałym i zmiennym
Przykład 1: Typ rekordu w rekordzie
typ rekordu rozmiar rekordu (wyjaśniony
w schemacie)
• Niezbędne w gronach tabel (cluster)
5 27 . . . .
Nagłówek rekordu
• Dane opisowe na początku rekordu
• Może zawierać
– typ rekordu
– rozmiar rekordu – stempel czasowy – nagłówki pól
– zamki transakcyjne
Przykład 2:
Format pośredni stało-zmienny• Format mieszany
– Jedna część jest stała, a druga zmienna
• Wszyscy pracownicy mają E#, name, dept Inne pola są zmienne.
25 Smith Toy 2 Hobby:chess retired
# liczba pól w części zmiennej
Wiele możliwości wewnętrznej organizacji rekordu
długość pola
3 10 F1 5 F2 12 F3
* * *
3 32 5 15 20 F1 F2 F3
rozmiar całości
0 1 2 3 4 5 15 20
Pytanka
• Widzieliśmy przykłady
– Rekordów stałego formatu i rozmiaru
– Rekordów zmiennego formatu i rozmiaru
• Czy ma sens format stały i rozmiar zmienny?
• Czy ma sens format zmienny i rozmiar stały?
Inne interesujące kwestie
• Kompresja
– W ramach rekordu, np. kodowanie
– W ramach zbioru rekordów (np. w bloku), np. wyszukiwanie wspólnych fragmentów
• Szyfrowanie
Układanie rekordów w blokach
bloki ...
plik
Zakładamy bloki stałego rozmiaru
Zakładamy, że jest
(1) Oddzielanie rekordów
(2) Łańcuchowane albo niełańcuchowane
(3) Mieszanie różnych typów rekordów (grono) (4) Rekordy wieloczęściowe
(5) Porządkowanie (sortowanie) rekordów (6) Adresowanie, wskaźniki
Opcje składowania rekordów w blokach
Blok
(a) Rozmiar stały: nie ma potrzeby oddzielania (b) Specjalny znacznik
(c) Zapisywanie rozmiarów rekordów (lub offsetów) - w rekordach
- w nagłówku bloku
- w tablicy translacji adresów rekordów (?)
(1) Oddzielanie rekordów
R2
R1 R3
• Niełańcuchowane: rekord musi mieścić się w jednym bloku
blok 1 blok 2
...
• Łańcuchowane
blok 1 blok 2
(2) Łańcuchowane vs. niełańcuchowane
R1 R2 R3 R4 R5
należy wskazać należy wskazać że to jest część że to kontynuacja
(+ wskaźnik na resztę) (+ ew. wskaźnik zwrotny)
R1 R2 (a)R3 (b)R3 R4 R5 R6 (a)R7
Przy łańcuchowaniu rekordów:
• Niełańcuchowanie jest znacznie prostsze, ale może oznaczać marnowanie przestrzeni
• Łańcuchowanie jest konieczne, gdy:
– rozmiar rekordu > rozmiar bloku
• Łańcuchowania w praktyce się unika, bo zmniejsza efektywność OLTP
– Odczyt rekordu wymaga bowiem odczytu więcej
Łańcuchowane vs. niełańcuchowane
Przykład marnowania przestrzeni
• 106 rekordów
• Każdy o stałym rozmiarze 2,050 bajtów
• Rozmiar bloku = 4096 bajtów
blok 1 blok 2
2050 bajtów 2046 pustych 2050 bajtów 2046 pustychR1 R2
• Zmarnowanych bajtów = 2 x 109
• Rozmiar pliku = 4 x 109 (wykorzystanie 50%)
• Mieszany – w tym samym bloku są
rekordy różnych typów (np. EMPLOYEE, DEPT)
np., taki blok
(3) Mieszanie różnych typów rekordów
EMP e1 DEPT d1 DEPT d2
Dlaczego chcemy mieszać?
Odpowiedź: GRONA ( clusters )
• Rekordy, które są zwykle pobierane
łącznie, powinny znajdować się w tym samym bloku
• Inna możliwość: bez mieszania, ale
trzymamy powiązane w rekordy w tym samym cylindrze
Przykład
Q1: select A#, C_NAME, C_CITY, … from DEPOSIT, CUSTOMER
where DEPOSIT.C_NAME =
CUSTOMER.C.NAME
blok CUSTOMER,NAME=SMITH
DEPOSIT,NAME=SMITH DEPOSIT,NAME=SMITH
• Jeśli Q1 jest często zadawanie, grono podnosi efektywność
• Ale jeśli poniższe zapytanie Q2 jest częste Q2: SELECT *
FROM CUSTOMER
To grono wręcz obniża efektywność
• Są też problemy z gronami na maszynach wieloprocesorowych. Przeplot instrukcji
może wtedy powodować problemy
Część o formacie stałym jest w jednym bloku
Zwykle przy takim formacie
Część o formacie zmiennym jest w innym bloku
(4) Rekordy wieloczęściowe
Blok z częścią stałą
R1 (a)
R1 (b)
Blok z częścią zmienną
R2 (a)
R2 (b) R2 (c)
Taki blok może mieć rekordy stałego formatu
Pytanie
• Jaka jest różnica między
– rekordami wieloczęściowymi a
– po użyciem dwóch zwykłych typów rekordów?
• Posortowanie rekordów w pliku (bloku) wg wartości pewnego klucza
• Plik uporządkowany ( posortowany)
• Po co to robić?
– Przyspieszenie odczytu rekordów w zadanym porządku
– Wykonanie złączenia przez scalanie (merge- join). Odpada wtedy kosztowne sortowanie.
(5) Porządkowanie (sortowanie) rekordów
Możliwości porządkowania
(a) Kolejne rekordy są fizycznie sąsiednie ...
(b) Powiązane wskaźnikami
Next (R1) R1
R1 Next (R1)
(c) Obszar nadmiarowy Rekordy
posortowane
R1 R2 R3 R4 R5
W praktyce trzeba obie opcje połączyć:
nagłówek
R2.1 R1.3 R4.7
• Jak się odwoływać do rekordów?
(6) Adresowanie, wskaźniki
Rx
• Wiele możliwości na skali:
Fizyczne Logiczne
Czysto fizyczne
ID urządzenia Np., Adres Nr cylindra
rekordu = Nr ścieżki lub ID Nr sektora
Offset w bloku
ID bloku
Czysto logiczne
• Np. ID rekordu to dowolny ciąg bitów odwzorowanie
ID rekordu r
Adres Adres a
fizyczny ID
rekordu
Kompromis
Elastyczność Koszt
przenoszenia rekordów pośredniości
– przy usuwaniu – przy modyfikacji – przy porządkach
Przykład 1 Pośredniość w bloku
Nagłówek
Blok: Wolny obszar
R3 R4
Nagłówek bloku
• Dane opisowe na początku (końcu) bloku
• Mogą zawierać:
– Identyfikator pliku (relacji, bazy danych) – Identyfikator tego bloku
– Katalog rekordów
– Wskaźnik na wolny obszar
– Typ bloku (np. zawiera rekordy typu 4 lub jest blokiem nadmiarowym)
– Wskaźnik do innych podobnych bloków (powiązanie w listę lub inną strukturę)
– Stempel czasowy
Przykład 2 Użycie identyfikatora bloku znanego systemowi operacyjnemu
Id rekordu Id pliku Nr bloku
Nr rekordu lub Offset
Id pliku, Odwzorowanie Fizyczne
Blok
Usuwanie
Rx
Możliwości
(a) Natychmiast odzyskaj miejsce (b) Oznacz jako usunięty
– Można prowadzić listę usuniętych rekordów (by ponownie użyć przestrzeń)
– Potrzebny sposób oznaczania
• Specjalna sekwencja znaków
• Pole usunięcia
Jak zwykle wiele kompromisów
• Jak bardzo kosztowne jest przeniesienie nieskasowanego rekordu w wolne
miejsce, aby odzyskać je natychmiast?
• Jak dużo miejsca się marnuje?
– Usunięte rekordy – Pola usunięcia
– Listy wolnego miejsca
• Rozwiązanie 1: Don’t worry, be happy
• Prawa Murphiego wykluczają tę opcję
Problem z usuwaniem: wiszące wskaźniki
R1 ?
• Pozostaw marker w fizycznej lokacji lub odwzorowaniu
• Adresy fizyczne:
Rozwiązanie 2: Nagrobki
Blok
To miejsce To miejsce
będzie będzie
niedostępne dostępne
• Adresy logiczne
ID lokacja
7788
odwzorowanie
ID 7788 nie będzie już nigdy użyte
Rozwiązanie 2: Nagrobki logiczne
• Umieść ID rekordu w każdym rekordzie
• Przechodząc po wskaźniku, sprawdź, czy doszedłeś do tego samego rekordu
Rozwiązanie 3 (?):
Czy to może działać? Jeśli to miejsce
będzie ponownie użyte, czy nowy rekord będzie miał to samo id?
wsk.
3-77
id rek:
3-77
• Budując wskaźnik użyj pary (wskaźnik + hasz) lub (wskaźnik + klucz)?
Rozwiązanie 4 (?):
wsk.+
hasz klucz
Łatwo: rekordy nie są uporządkowane
Wstaw nowy rekord na końcu pliku lub w miejsce jakiegoś usuniętego rekordu
Gdy rekordy są rozmiaru zmiennego, nie tak łatwo...
Trudno: rekordy są uporządkowane
Jeśli jest luz między rekordami, super!
Jeśli nie ma, stwórz obszar nadmiarowy
Wstawianie
Interesujące pytania
• Ile zostawić luzu (wolnego miejsca) w każdym bloku, ścieżce, cylindrze?
• Jak często reorganizować plik w celu pozbycia się stron nadmiarowych?
Wolne miejsce
Wymiana wskaźników
Pamięć Dysk
Rek A
blok 1
Rek A
blok 2 blok 2
blok 1
• Tablica translacji
Adres dyskowy Adres pamięciowy Rek-A Rek-A-RAM
Możliwość 1
Wskaźniki pamięciowe (podwójne) + bit rodzaju
do dysku
M
do pamięciMożliwość 2
Wymiana wskaźników
• Automatyczna
• Na żądanie
• Brak wymiany: aplikacja dba o to
• Są miliony sposobów ułożenia danych na dysku. Który wybrać?
Elastyczność Użycie przestrzeni
Porównanie
• Przestrzeń potrzebną na spodziewane dane
• Spodziewany czas
– pobrania rekordu o zadanym kluczu – pobrania następnego rekordu
– wstawienia rekordu – dopisania rekordu – usunięcia rekordu – modyfikacji rekordu
– odczytania całego pliku – reorganizacji pliku
By ocenić konkretny wybór oszacuj następujące parametry: