Plan wykładu Bazy danych Architektura systemów zarządzania bazami danych Realizacja zapytań algebra relacji Wielodostęp do danych - transakcje Dr inż. Paweł Kasprowski pawel@kasprowski.pl Aplkacja przechowująca dane Architektury SZBD Plik tekstowy/binarny Własny format Własna obsługa Lepiej użyć gotowych rozwiązań! Embedded driver sterownik dołączany do aplikacji, obsługujący bezpośrednio pliki Dostęp tylko lokalny i tylko przez jednego użytkownikaż Client-server sterownik łączy się we własnym protokole z częścią serwerową na innym lub tym samym komputerze Sterowniki bazodanowe Realizacja zapytań Własne producenta (na wymarciu) Wykorzystujące standardowe API ODBC JDBC OLE DB Wykorzystujące otwarte standardy (XML) Web Services Zapytanie SQL jest kompilowane Wyodrębnienie koniecznych operacji Przygotowany jest plan zapytania Kolejność wykonywania operacji 1
Trzy podstawowe operacje Algebra relacji Selekcja wybór wierszy Projekcja wybór kolumn Złączenie ą naturalne łączenie relacji Terminologia A 1, A 2 atrybuty R, S schemat relacji, np. {A,B,C} r(r) relacja o schemacie R t x [A 1 ] wartość artybutu A 1 w krotce t x Klucz relacji Selekcja Zbiór atrybutów, których wartość jest unikalna dla każdej krotki Jest to podzbiór R K R taki, że dla każdej pary krotek z r wartości klucza są różne t t i t j r [ K ] t [ K ] i j Matematycznie: σ ( r) = { t : t r w( t) TRUE} w = Podzbiór krotek relecji dla których spełniony jest warunek Projekcja Złączenie naturalne Matematycznie: π X () r = { u : u = t[ X ] t r} gdzie X jest podzbiorem R Wybór niektórych atrybutów ze wszystkich krotek relacji Dla dwóch relacji r(r) i s(s) ( R) s( S ) = r >< { u: t r w s t [ R S] = wr [ S] u [ R] = t u[ S] = w} Połącz dwie relacje według wspólnych dla nich atrybutów 2
Przykłady zapytań (1) Przykłady zapytań (2) Znajdź pracowników z pojedynczymi dochodami większymi niż 150 Znajdź pracowników z dochodami z projektu EDYTOR TEKSTU (σ kwota>150 (pracownicy Χ wypłaty)) (σ nazwa=edytor tekstu (pracownicy X wypłaty X projekty)) Przykłady zapytań (3) Przykłady zapytań (4) Znajdź projekty w których brał udział pracownik Kowalski Znajdź id projektów i kwoty wypłat pracownika Kowalskiego Π nazwa (σ nazwisko=kowalski (pracownicy X wypłaty X projekty)) Π kwota,idpr (σ nazwisko=kowalski (pracownicy X wypłaty)) Inne operacje na relacjach Prawa operacji na relacjach UNION suma zbiorów (r lub s) INTERSECTION część wspólna zbiorów (r oraz s) DIFFERENCE krotki z r, których nie ma w s (r s) Przemienność złączeń rxs=sxr Łączność złączeń rx(sxz)=(rxs)xz Kaskada projekcji jeśli X 1 ЄX 2 to Π x1 (Π x2 (r)) = Π x1 (r) Przemienność i kaskada selekcji σ F1 (σ F2 (r)) = σ F2 (σ F1 (r)) = σ F1F2 (r) Przemienność projekcji i selekcji Π X (σ F (r)) = σ F (Π X (r)) 3
Prawa operacji na relacjach Optymalizacja operacji Przemienność operacji złączenia i selekcji σ F (r X s) = σ F (r) X s jeśli atr(f) Є R σ F (r X s) = rxσ σ F (s) jeśli atr(f) Є S σ F (r X s) = σ F1 (r) X σ F2 (s) jeśli atr(f1) Є R i atr(f2) Є S i F1+F2 = F Analogicznie dla projekcji Wykorzystujemy poznane prawa Przykład: Nazwiska pracowników zespołu nr 3, którzy mieli wypłatę większą niż 100 zł Konieczność złączenia tablic pracownicy i dochody Koszt operacji: liczba odczytów pojedynczych rekordów pracownicy (20) X wypłaty (50) Realizacja standardowa Realizacja po optymalizacji (σ kwota>100 i nrz=3 (pracownicy Χ wypłaty)) (σ nrz=3 (pracownicy) Χ σ kwota>100 (wypłaty)) pracownicy (20 rek.) wypłaty pracownicy (20 rek.) wypłaty k 1 = 20 σ nrz=3 σ kwota>100 k 2 = 50 k 1 = 20 x 50 = 1000 (5 rek.) (20 rek.) σ kwota>100 i nrz=3 k 2 = 50 k 3 = 20 x 5 = 100 koszt całkowity = k 1 + k 2 = 1050 koszt całkowity = k 1 + k 2 + k 3 = 170 Optymalizacja Kolejność złączeń Zasada 1: O ile się tylko da to najpierw selekcje, później złączenia Przykład 2: Podaj nazwiska pracowników, którzy mieli dochody w projekcie Edytor Tym razem trzy tablice: pracownicy(20) X wypłaty(50) X projekty (10) 4
Realizacja standardowa Najpierw selekcje (σ nazwa=edytor (pracownicy Χ wypłaty X projekty)) pracownicy (20 rek.) wypłaty projekty (10 rek.) (pracownicy Χ wypłaty X σ nazwa=edytor (projekty)) pracownicy (20 rek.) wypłaty projekty (10 rek.) σ nazwa=edytor k 1 = 20 x 50 = 1000 k 1 = 20 x 50 = 1000 k 2 = 10 k 2 = 10 x 50 = 500 (1 rek.) σ nazwa=edytor k 3 = 50 k 3 = 50 x 1 = 50 koszt całkowity = k 1 + k 2 + k 3 = 1550 koszt całkowity = k 1 + k 2 + k 3 = 1060 Zmiana kolejności złączeń Optymalizacja (pracownicy Χ wypłaty X σ nazwa=edytor (projekty)) pracownicy (20 rek.) wypłaty projekty (10 rek.) σ nazwa=edytor k 1 = 10 (1 rek.) (20 rek.) k 2 = 1 x 50 = 50 (10 rek.) Zasada 1: O ile się tylko da to najpierw selekcje, później złączenia Zasada 2: Najpierw złączenia dla których relacje są najmniejsze (największa selekcja lub mało rekordów) Wniosek: Dobrze jest znać zawartość bazy - statystyki k 3 = 20 x 10 = 200 koszt całkowity = k 1 + k 2 + k 3 = 260 Optymalizacja odczytów Dziennik transakcji Podział plików na bloki strony i superbloki extenty Użycie mechanizmu cache (bufora) Odłożony zapis (konieczny dziennik transakcji) Zapis wszystkich operacji na bazie danych Umożliwia odtworzenie danych w przypadku awarii Pozwala na wycofanie zmian w bazie w przypadku wykrycia błędu (mechanizm transakcji) 5
Co to jest transakcja Przykład transakcji Pewna liczba operacji, spełniająca warunki ACID Atomicity (atomowość) muszą się wykonać wszystkie operacje, jeśli jakaś nie może się wykonać, żadna inne też nie powinna Consistency (spójność) transakcja zastaje i zostawia dane w postaci spójnej (prawidłowej) Isolation (izolacja) dane używane przez transakcje muszą być prawidłowe, dlatego transakcje muszą być od siebie izolowane Durability (trwałość) po zakończeniu transakcji efekty jej pracy są zapisane na stałe (persistence) i nie zostaną utracone Tablica: konta(nr, saldo) Operacja przelewu 100 zł z konta nr 10 na konto nr 20 update konta set saldo=saldo-100 where nr=10 update konta set saldo=saldo+100 where nr=20 Atomowość: obie aktualizacje muszą zadziałać Spójność: po zakończeniu transakcji suma pieniędzy na kontach nie zmienia się Izolacja: wycofana aktualizacja nie powoduje utraty spójności Trwałość: po zakończeniu wyniki są w zapisane w bazie Zapewnianie transakcyjności Wycofywanie transakcji AutoCommit każda operacja na danych jest osobną transakcją Implicit transactions pierwsza operacja na danych otwiera transakcję koniec transakcji: COMMIT Explicit transactions otwarcie transakcji: BEGIN TRANSACTION operacje na bazie zakończenie: COMMIT lub ROLLBACK Przez serwer: w razie awarii serwera rozłączenie się klienta bez zakończenia transakcji Przez klienta: wyniki którejś operacji są niezgodne z oczekiwaniami polecenie: ROLLBACK Przykład transakcji kcji (przelew bankowy)... con.setautocommit(false); try{ int n1 = stmt.executeupdate( "update accounts set amount=amount-100 where custid=75"); int n2 = stmt.executeupdate( "update accounts set amount=amount+100 where custid=43"); if(n1==1 && n2==1) con.commit(); else con.rollback(); }catch(sqlexception ec) {con.rollback(); System.err.println(ec.getMessage());}... Poziomy izolacji transakcji READ_UNCOMMITTED niemożliwa zmiana danych zmienionych przez inną transakcję i niezatwierdzonych READ_COMMITTED niemożliwy brudny odczyt (dirty read) REPEATABLE_READ dane raz odczytane nie mogą być zmieniane przez inne transakcje SERIALIZABLE powtórzenie zapytania w transakcji daje takie same wyniki 6
Dziękuję za uwagę Do zobaczenia... materiały dostępne pod adresem: www.kasprowski.pl 7