Systemy baz danych

advertisement
Rozproszone bazy danych
Przygotował Lech Banachowski na podstawie:
1.
Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000
(książka i slide’y).
2.
Lech Banachowski, Krzysztof Stencel, Bazy danych – projektowanie aplikacji na serwerze, EXIT,
2001.
1
Przy rozproszeniu użytkowników w sieci internetowej
v
v
v
Najprostsza organizacja bazy danych - baza scentralizowana:
dane są przechowywane w jednym węźle sieci.
Zalety:
– Jeden system kontroli danych zapewniający spójność
danych.
– Przetwarzanie transakcji i odtwarzanie po awarii objęte
sprawdzonymi algorytmami i protokołami.
Wady:
– Potencjalnie długi czas oczekiwania na rezultaty z odległego
węzła sieci – bardzo długi przy awarii sieci lub centralnego
węzła.
– Brak kontroli nad danymi specyficznymi dla danego
miejsca.
– Generowanie dużego ruchu w sieci.
2
Przy rozproszeniu użytkowników w sieci internetowej
v
v
Możliwa organizacja bazy danych - baza rozproszona: dane
są przechowywane w wielu węzłach sieci - część jest
powtarzana (replikowana).
Zalety:
– Dane bliżej końcowego użytkownika - szybsze zapytania.
– Węzeł lokalny może mieć kontrolę nad swoimi danymi.
– Zwiększenie dostępności danych w sieci (poprzez repliki).
v
Wady:
– Trudności w utrzymaniu spójności danych.
– Transakcje i odtwarzanie bardziej skomplikowane - przy awariach
możliwe trudności w zakończeniu transakcji.
– Bardziej skomplikowana aktualizacja danych (repliki).
3
Przykład
v
v
Rozproszona baza danych powinna reprezentować
pojedynczy model danych firmy.
Przypuśćmy, że tworzymy model danych odzwierciedlający
zarządzanie kadrami w pewnej organizacji i projektujemy
rozproszoną bazę danych tak aby:
– w biurze w Gdańsku znajdowały się dane dotyczące Polski Północnej,
– w biurze w Krakowie dane dotyczące Polski Południowej a
– w biurze w Warszawie dane dotyczące Polski Środkowej.
v
Informacje o strukturze firmy są replikowane i
przechowywane w każdym węźle. Zakładamy, że tylko
okresowo dane dotyczące wszystkich trzech regionów będą
rozważane razem (np. w postaci raportów), dając obraz całego
kraju.
4
Założenia
v
v
v
Dane są przechowywane w więcej niż w jednym
węźle sieci – każdy z nich zarządzany przez osobną
bazę danych.
Przezroczystość rozproszenia danych: Użytkownicy
nie wiedzą, w którym dokładnie miejscu są
przechowywane dane.
Transakcje rozproszone: Użytkownicy używają
transakcji działających na wielu węzłach w taki sam
sposób jak na jednym węźle.
5
Typy rozproszonych baz danych
v
v
Jednorodna: We wszystkich węzłach jest ten
sam system zarządzania bazą danych.
Niejednorodna: W każdym węźle może być
inny system zarządzania bazą danych.
Gateway
(Brama)
DBMS1
DBMS2
DBMS3
6
Przechowywanie
danych
v
v
TID
t1
t2
t3
t4
Fragmentacja (tabeli)
– Pozioma: zwykle na rozłączne
fragmenty.
– Pionowa: z możliwością
odtworzenia całej tabeli.
Replikacja
– Zwiększona dostępność
danych.
– Szybsze wykonywanie zapytań.
– Synchroniczna vs.
asynchroniczna.
R1
R3
Węzeł A
Węzeł B
R1
R2
7
System zarządzania rozproszoną bazą danych
v
v
v
Słownik danych rozproszonej bazy danych jest znacznie
bardziej złożony. Obejmuje on, na przykład informacje o
położeniu fragmentów i replikacji tabel bazowych.
Problemy związane ze współbieżnością są zwielokrotnione
w systemach rozproszonych. Propagowanie aktualizacji do
szeregu różnych węzłów jest skomplikowane.
Optymalizator
zapytań
w
prawdziwym
systemie
rozproszonym powinien być w stanie użyć informacje
topologiczne o sieci (np. o koszcie przesłania danych między
dwoma węzłami) przy decydowaniu jak najlepiej wykonać
dane zapytanie.
8
Zapytania rozproszone
v
SELECT AVG(S.age)
FROM Sailors S
WHERE S.rating > 3
AND S.rating < 7
Fragmentacja pozioma: Wiersze z rating < 5 w
Shanghai, >= 5 w Tokyo.
– Trzeba obliczyć w obu węzłach SUM(age), COUNT(age).
– Gdyby był warunek S.rating>6, tylko w jednym węźle.
v
Fragmentacja pionowa: sid i rating w Shanghai,
sname i age w Tokyo, tid w obu.
– Trzeba zrekonstruować tabelę i wykonać zapytanie.
v
Replikacja: Kopie Sailors dostępne w obu węzłach.
– Wybór węzła uzależniony od lokalnego kosztu wykonania
zapytania i od kosztu przesłania wyników.
9
LONDYN
Rozproszone złączenia
Sailors
500 stron
v
PARYŻ
Reserves
1000 stron
Sprowadzaj strony gdy trzeba, metoda Page Nested Loops,
tabela Sailors zewnętrzna.
– Koszt: 500 D + 500 * 1000 (D+S).
– D – koszt odczytu/zapisu; S - koszt przesłania strony.
– Gdyby zapytanie nie było złożone w Londynie, trzeba by było
dodać koszt przesłania wyniku.
v
Sprowadź całą tabelę: Prześlij Reserves do Londynu.
– Koszt: 1000 S + 4500 D (Złączenie SortMerge; koszt = 3*(500+1000)).
– Jeśli rozmiar wyniku jest duży, może się opłacać sprowadzić tabele
do końcowego węzła i tam je złączyć.
10
Półzłączenia
v
v
W Londynie, dokonaj projekcji tabeli Sailors na kolumny
złączenia i prześlij wynik do Paryża.
W Paryżu, dokonaj złączenia projekcji tabeli Sailors z tabelą
Reserves.
– Wynik nazywa się redukcją tabeli Reserves względem Sailors.
v
v
v
v
Prześlij redukcję tabeli Reserves do Londynu.
W Londynie, dokonaj złączenia Sailors z redukcją Reserves.
Idea: koszt przesłania całej tabeli Reserves zastępujemy
kosztem obliczenia i przesłania kolejno projekcji i redukcji.
Szczególnie warte zastosowania gdy w zapytaniu występuje
selekcja wartości z tabeli Sailors oraz gdy wyniki są
wymagane w Londynie.
11
Optymalizacja rozproszonego
zapytania
v
Metoda oparta na koszcie; rozważ wszystkie
plany, wybierz najtańszy; podobnie jak w
scentralizowanym przypadku.
– Różnica 1: Koszty komunikacji między
węzłami; decyzja którą replikę wybrać.
– Różnica 2: Trzeba wziąć pod uwagę specyfikę
węzła lokalnego (np. inny SZBD).
– Różnica 3: Specyficzne metody rozproszonego
złączenia.
12
Modyfikacja replik
v
v
Synchroniczna replikacja: Zanim modyfikująca
transakcja zostanie zatwierdzona należy dokonać
aktualizacji wszystkich replik (obejmuje
zakładanie blokad, wymianę komunikatów w
sieci). Przy odczytywaniu możemy skorzystać z
dowolnej kopii.
Asynchroniczna replikacja: Kopie
zmodyfikowanej tabeli są tylko okresowo
aktualizowane – metoda znacznie tańsza; ale
chwilowo różne kopie mogą nie być ze sobą
zsynchronizowane.
13
Rozproszone odtwarzanie
v
v
Nowe problemy:
– Dodatkowe rodzaje awarii, np. związane z
połączeniami sieciowymi i odległymi węzłami.
– Gdy “pod-transakcje” całej transakcji są
wykonywane w różnych węzłach, wszystkie
wykonują COMMIT albo żadna z nich. Potrzebny
jest specjalny protokół zatwierdzania.
W każdym węźle jest utrzymywany odrębny dziennik
(log) wykonywanych akcji, jak w scentralizowanej
bazie danych. W tym dzienniku są odnotowywane
akcje protokołu zatwierdzania.
14
Dwufazowe zatwierdzanie (2PC)
v
v
Węzeł inicjujący transakcję – koordynator.
Wykonanie instrukcji COMMIT:
 Koordynator wysyła komunikat prepare.
 Węzły zapisują w swoim dzienniku rekord abort lub prepare a
następnie wysyłają do koordynatora komunikat no lub yes.
 Gdy koordynator uzyska jednomyślną odpowiedź yes, zapisuje do
swojego dziennika rekord commit i wysyła komunikat commit. Wpp.
zapisuje do swojego dziennika rekord abort i wysyła komunikat abort.
 Węzły zapisują w swoim dzienniku odpowiedni rekord abort/commit
i end a następnie wysyłają do koordynatora komunikat ack.
 Po otrzymaniu wszystkich potwierdzeń ack koordynator zapisuje do
swojego dziennika rekord end.
15
Komentarz na temat 2PC
v
v
v
Dwie rundy komunikacji: pierwsza - głosowanie;
druga - zakończenie. Obie inicjowane przez
koordynatora.
Każdy węzeł może zadecydować o wycofaniu
(abort) transakcji.
Każdy komunikat odzwierciedla decyzję
nadawcy; aby mieć pewność odporności na
awarie, decyzja jest najpierw zapisywana do
dziennika transakcji (logu).
16
Implementacja rozproszonych baz
danych w Oracle
v
Oracle dostarcza oprogramowania sieciowego
Net8 (SQL*Net) umożliwiającego komunikację
między bazami danych Oracle oraz obsługę
transakcji działających na więcej niż jednej bazie
danych – w tym zatwierdzanie takich transakcji i
ich wycofywanie.
17
Powiązanie z odległą bazą danych
(database link)
v
v
Jest to zapisana w bazie danych ścieżka sieciowa do odległej
bazy danych.
Składnia:
– CREATE DATABASE LINK nazwa_powiązania
– CONNECT TO użytkownik IDENTIFIED BY hasło
– USING ’nazwa_usługi’;
u gdzie
u użytkownik/hasło – dotyczą konta, na które ma zostać dokonane
logowanie w odległej bazie danych, jeśli ich brak – używana jest
nazwa użytkownika i hasło z lokalnej bazy danych,
u nazwa_usługi – nazwa usługi (aliasu bazy danych) Net8 (SQL*Net)
zdefiniowanej w pliku konfiguracyjnym TNSNAMES.ORA .
18
v
Po utworzeniu powiązania z bazą danych, można korzystać z tabel i
perspektyw w tej odległej bazie danych, tak jakby znajdowały się one w
lokalnej bazie danych – dołączając do nazwy tabeli lub perspektywy napis
@nazwa_powiązania. Na przykład instrukcja
u
u
u
v
CREATE DATABASE LINK baza
CONNECT TO scott IDENTIFIED BY tiger
USING 'mojabaza';
– tworzy powiązanie bazodanowe o nazwie baza z odległą bazą danych
określoną przez sieciową usługę Oracle o nazwie mojabaza.
Przy wykonywaniu instrukcji
u SELECT *
u FROM Emp@baza;
– lokalny serwer Oracle łączy się, używając oprogramowania Net8, z
odległą bazą danych mojabaza. Oprogramowanie Net8 znajdujące się
na docelowym komputerze przechwytuje zgłoszenie i dokonuje
logowania w bazie mojabaza na konto scott/tiger. Serwer wykonuje
przesłaną instrukcję SELECT i przesyła przez sieć z powrotem wyniki
zapytania, jednocześnie wylogowując użytkownika scott/tiger.
19
Przykłady
Oracle potrafi wykonać dowolne instrukcje SQL, tak jakby tabele i
perspektywy z odległych baz danych znajdowały się w lokalnej
bazie danych np.
SELECT
*
FROM
Emp@warszawa
UNION
SELECT * FROM Emp@gdansk
UNION
SELECT
*
FROM
Emp@katowice;
UPDATE Emp@warszawa
SET Salary = Salary *
1.1;
Definiuje się zwykle synonimy dla obiektów w odległej bazie
danych np.
CREATE SYNONYM Klienci
FOR Klienci@Baza_szkola;
20
Replikacja, migawka, perspektywa zmaterializowana
v
lokalna kopia (replikacja) danych znajdujących się w jednej
lub więcej odległych bazach danych. Składnia (Oracle):
CREATE SNAPSHOT nazwa_migawki
REFRESH NEXT przedział_czasu
AS zapytanie;
gdzie przedział_czasu określa co jaki czas należy odświeżać
migawkę, zapytanie – określa zapytanie, które tworzy zawartość
migawki.
Zamiast słowa kluczowego SNAPSHOT można też używać
słowa kluczowego MATERIALIZED VIEW.
21
Przykład
•
Instrukcja
CREATE SNAPSHOT Wszyscy_prac
REFRESH NEXT Sysdate +1
AS SELECT * FROM Emp@warszawa
UNION
AS SELECT * FROM Emp@gdansk;
tworzy migawkę złożoną z danych o pracownikach pochodzących z dwóch
oddziałów firmy w Warszawie i Gdańsku. Zawartość migawki będzie odświeżana raz
na dzień.
• Po zdefiniowaniu, migawki Wszyscy_prac można jej używać w zapytaniach, tak
jakby to była zwykła tabela lub perspektywa. Np.
SELECT * FROM Wszyscy_prac
WHERE Job = 'MANAGER';
wypisuje informacje o wszystkich osobach pracujących w firmie na stanowisku
MANAGER.
22
Implementacja migawki w lokalnej
bazie danych
v
v
v
Tabela, do której jest zapisywany wynik
zapytania
(stąd
nazwa
perspektywa
zmaterializowana),
indeks dla klucza głównego,
perspektywa służąca do wyświetlania i
używania zawartości migawki.
23
Aktualizacja replik (odświeżanie migawek)
v
v
Migawka prosta – w instrukcji SELECT nie występują ani klauzule
GROUP BY, CONNECT BY, DISTINCT ani funkcje sumaryczne ani
operatory zbiorowe ani złączenia tabel.
Dla migawki prostej jest możliwe szybkie odświeżanie (opcja REFRESH
FAST) pod warunkiem utworzenia w węźle, w którym znajduje się
tabela nadrzędna tej migawki, specjalnego dziennika tej tabeli, do
którego są wpisywane wszystkie zmiany dokonywane na tej tabeli.
Następnie przy odświeżaniu migawki zamiast przesyłać całą zawartość
tabeli jest przesyłana tylko zawartość dziennika tej tabeli. Składnia:
CREATE SNAPSHOT LOG ON Emp;
24
Modyfikowanie danych przez
migawkę
Migawka modyfikowalna (musi być prosta):
CREATE SNAPSHOT Rep_emp
REFRESH FAST NEXT sysdate +1
FOR UPDATE
AS SELECT * FROM Emp@warszawa
Można przez nią wprowadzać zmiany.
UPDATE Rep_emp
SET Sal = Sal*1.05
WHERE Ename = 'SCOTT';
25
Download