Wykład 13

Rozproszona baza danych

 

Streszczenie

Są dwa punkty wyjściowe do konstrukcji rozproszonej bazy danych:

Wykład składa się z trzech części. W pierwszej przedstawione jest pojęcie rozproszonej bazy danych. Omówione zostają jej zalety i wady w porównaniu z konwencjonalną, scentralizowaną bazą danych. Przedstawiony jest zarys rozszerzenia algorytmów optymalizacji zapytań i zatwierdzania transakcji na przypadek rozproszonej bazy danych.

W drugiej części wykładu przedstawiona jest implementacja pojęć rozproszonej bazy danych w konkretnym systemie baz danych – Oracle.

W trzeciej części wykładu jest rozważony pokrewny problem integracji informacji pochodzących z różnych baz danych.

 


13.1 Scentralizowana baza danych

W sytuacji rozproszenia użytkowników w różnych węzłach sieci internetowej są możliwe różne organizacje bazy danych. Najprostszym rozwiązaniem jest baza scentralizowana, w której dane są przechowywane w jednym węźle sieci. W takim przypadku można utrzymywać jeden centralny system kontroli danych. Przetwarzanie transakcji i odtwarzanie po awarii są objęte sprawdzonymi algorytmami i protokołami. Jeśli kierowane z węzłów sieci do bazy danych transakcje dotyczą wszystkich danych (nie zależą istotnie od samego węzła), wówczas rozwiązanie scentralizowane jest dobre. Przykładem takich systemów mogą być ogólnokrajowe rejestry: podmiotów gospodarczych, podatników, samochodów.

Natomiast do wad rozwiązania zcentralizowanego należą:

  1. 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. Dostępność danych może być więc czasami  ograniczona.
  2. Brak kontroli nad danymi specyficznymi dla danego miejsca.
  3. Generowanie dużego ruchu w sieci.

 


13.2 Rozproszona baza danych

W przypadku, gdy transakcje w lokalnych węzłach dotyczą na ogół danych lokalnych i stosunkowo rzadko zachodzi potrzeba sięgnięcia do danych dotyczących węzłów odległych, lepszym rozwiązaniem może być zbiór połączonych ze sobą baz lokalnych – z danymi przechowywanymi w węzłach lokalnych.
 

Z rozproszoną bazą danych mamy do czynienia wtedy, gdy zbiór lokalnych baz stanowi całość w sensie jednego modelu danych i koordynacji wykonywanych transakcji.

W rozproszonej bazie danych występuje rozłożenie danych do węzłów sieci poprzez ich fragmentację (podział) lub replikację - do różnych konfiguracji sprzętowych i programistycznych na ogół rozmieszczonych w różnych (geograficznie) miejscach organizacji.

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:

Informacje  o strukturze firmy są replikowane i przechowywane w każdym węźle. Zakładamy, że okresowo dane dotyczące wszystkich trzech regionów są zbierane razem, dając obraz całego kraju.

Są dwa typy fragmentacji: pionowa i pozioma.

Fragment poziomy stanowi podzbiór wierszy w tabeli, np. dane z jednego rejonu kraju. Obliczenie fragmentu poziomego uzyskuje się przez wykonanie operatora selekcji na podstawowej tabeli.

Fragment pionowy stanowi podzbiór kolumn w tabeli, np. identyfikator, data urodzenia i zarobki pracowników. Wymaga się aby wśród wybranych kolumn znajdowały się kolumny klucza głównego. Obliczenie fragmentu pionowego uzyskuje się z tabeli podstawowej przez wykonanie rzutu na podzbiór kolumn zawierający w sobie klucz główny.

Fragmentację poziomą uzyskuje się przez podział tabeli na zbiór fragmentów poziomych. Po zastosowaniu fragmentacji poziomej, odtworzenie oryginalnej tabeli polega na zastosowaniu operatora sumy UNION.

Fragmentację pionową uzyskuje się przez podział tabeli na zbiór fragmentów pionowych. Po zastosowaniu fragmentacji pionowej odtworzenie oryginalnej tabeli polega na zastosowaniu złączenia względem kolumn klucza głównego.
 

Operacja  Fragmentacja pozioma Fragmentacja pionowa
rozkład selekcja rzut
złożenie suma złączenie

Tab. 13.1 Operacje związane z fragmentacjami tabeli

Stosując fragmentację (poziomą albo pionową) dzielimy tabelę podstawową na części przechowywane w różnych węzłach sieci. Oczywiście można też stosować bardzie złożone  kryteria podziału, jeśli dziedzina aplikacyjna tego wymaga np. najpierw dokonując podziału poziomego, a w ramach każdego fragmentu poziomego dokonując odpowiedniego podziału pionowego (albo na odwrót).

Dla użytkownika rozproszona baza danych powinna wyglądać dokładnie tak samo jak jedna, scentralizowana baza danych. To znaczy, na poziomie użytkowym rozproszona baza danych powinna być identyczna z odpowiadającą jej scentralizowaną bazą danych. W związku z tym rozproszona baza danych powinna mieć trzy właściwości przezroczystości:

  1. Przezroczystość geograficzna. Użytkownicy nie muszą wiedzieć, w którym dokładnie węźle są przechowywane dane, które oglądają.

  2. Przezroczystość fragmentacji. Użytkownicy nie muszą wiedzieć, w jaki sposób dane są podzielone. W przykładzie zarządzania kadrami mamy do czynienia logicznie z jedną bazą danych, a fizycznie z trzema jej fragmentami.

  3. Przezroczystość replikacji. Użytkownicy nie muszą wiedzieć, w jaki sposób dane są replikowane i z której repliki pochodzą dane, które oglądają. W przykładowej bazie danych, w każdym z trzech biur jest przechowywana kopia informacji o strukturze firmy. Kiedy zachodzi potrzeba okresowej aktualizacji tych danych, użytkownicy nie muszą być świadomi tego, że aktualizacja dotyczy wszystkich trzech miejsc.

Zalety rozproszenia (w porównaniu z systemem scentralizowanym)

  1. Odwzorowanie w bazie danych geograficznego podziału organizacji. Jeśli organizacja ma charakter narodowy lub ponadnarodowy, system powinien uwzględniać podział organizacji na departamenty, oddziały itd.
  2. Większą kontrolę nad danymi można uzyskać przechowując je w miejscu, gdzie są one potrzebne. Jeśli biurowi w Gdańsku przekażemy odpowiedzialność za dane dotyczące Polski Północnej, wówczas tylko personel w Gdańsku będzie miał prawo aktualizować te dane.
  3. Utrzymywanie replik danych zwiększa dostępność danych i niezawodność systemu. Przechowywanie danych w miejscach, gdzie są one potrzebne, poprawia ich dostępność. W dużych bankach bazy danych obsługujące transakcje klientów muszą działać 24 godziny na dobę przez wszystkie dni w tygodniu. Stopień niezawodności systemu podnosi się przez utrzymywanie dwóch lub więcej bliźniaczych baz danych, jednej do bezpośredniego wykonywania transakcji, drugiej jako jej kopii (bazy rezerwowej lub repliki).
  4. Działanie systemu może się istotnie poprawić, jeśli dokona się prawidłowego rozproszenia danych. Jeśli większość zapytań generowanych w lokalnej bazie danych będzie wykonywana w tej lokalnej bazie danych zamiast w dużej scentralizowanej, wówczas jest duża szansa przyśpieszenia dostępu do danych przy operacjach wyszukiwania i aktualizacji.

System zarządzania rozproszoną bazą danych jest bardziej skomplikowany w porównaniu z bazą scentralizowaną.

  1. Słownik danych (katalog systemowy) rozproszonej bazy danych jest znacznie bardziej złożony. Obejmuje on na przykład informacje o położeniu fragmentów i replik tabel bazowych.

  2. Problemy związane ze współbieżnością są zwielokrotnione w systemach rozproszonych. Propagowanie aktualizacji do szeregu różnych węzłów jest skomplikowane. Gdy jest wiele kopii tego samego obiektu, problemy mogą się pojawić z utrzymaniem spójności danych. Trudno jest zrealizować naturalny dla bazy danych postulat, że każdy użytkownik, niezależnie skąd loguje się, widzi dokładnie to samo. Obok dotychczas rozpatrywanych rodzajów awarii, system rozproszony musi sobie dać radę również z awariami połączeń sieciowych.

  3. Optymalizator zapytań w prawdziwym systemie rozproszonym powinien być w stanie użyć właściwości topologiczne sieci (np. o koszcie przesłania danych między dwoma węzłami a także o szybkości działania odległych SZBD) przy decydowaniu, jak najlepiej wykonać dane zapytanie.

  4. Aby zapewnić odporność na awarie, system zarządzania rozproszoną bazą danych nie powinien być ulokowany w jednym miejscu. Zarówno oprogramowanie, jak i dane powinny zostać rozproszone po różnych miejscach w sieci.

Pożądane właściwości rozproszonej bazy danych podsumujemy w postulatach Date'a.

  1. Lokalna autonomia - na każdym węźle działa niezależny system zarządzania bazą danych.
  2. Uniezależnienie od centralnego węzła – wszystkie węzły są równorzędne.
  3. Działanie ciągłe – operacje na sieci węzłów nie powinny mieć wpływu na funkcjonowanie systemu (jak dodanie czy usunięcie węzła).
  4. Niezależność lokalizacji - użytkownik nie powinien być świadomy fizycznego umiejscowienia danych (przezroczystość lokalizacji).
  5. Niezależność fragmentacji - użytkownik nie powinien być świadomy istnienia fragmentów i ich lokalizacji, dostęp do każdego fragmentu jest jednakowy i nie zależy od lokalizacji.
  6. Niezależność replikacji - użytkownik nie powinien być świadomy istnienia replik, ich lokalizacji i czy korzysta z nich.
  7. Niezależność sprzętowa – na jakim komputerze znajduje się węzeł.
  8. Niezależność od systemu operacyjnego – wyniki jakie uzyskuje użytkownik nie powinny zależeć pod jakim systemem działa komputer węzła.
  9. Niezależność od SZBD – wyniki jakie uzyskuje użytkownik nie powinny zależeć jaki SZBD jest zainstalowany w węźle.
  10. Niezależność od sieci – wyniki jakie uzyskuje użytkownik nie powinny zależeć od architektur i protokołów sieciowych.
  11. Rozproszone zarządzanie transakcjami – zaimplementowane są aksjomaty ACID dla transakcji działających na całej sieci węzłów.
  12. Rozproszone przetwarzanie zapytań – instrukcje SQL działają na danych rozmieszczonych we wszystkich węzłach sieci.

Transakcje rozproszone

W kontekście rozproszonej bazy danych odróżnia się zapytania i transakcje odległe od rozproszonych.

Zapytanie odległe, transakcja odległa – dane do realizacji znajdują się w jednym, odległym węźle sieci.

Zapytanie rozproszone, transakcja rozproszona – dane do realizacji znajdują się w różnych węzłach sieci.

Do kosztu wykonywania zapytania dochodzi koszt przesłań danych między węzłami w sieci i właśnie ten koszt ma największy wpływ na czas wykonywania zapytania (większy niż koszt operacji We-Wy).

Zapytania rozproszone

Załóżmy, że dane do poniższego zapytania znajdują się w różnych węzłach sieci.

SELECT AVG(E.Sal)
 FROM Emp E
 WHERE E.Deptno > 30 AND E.Deptno < 70;

Rozproszone złączenia

Rozważymy problem rozproszonego złączenia na konkretnym przykładzie. Załóżmy, że tabela Dept jest dostępna w Warszawie a  Emp jest dostępna w Krakowie.

 SELECT E.Ename, D.Dname
 FROM Emp E INNER JOIN Dept D ON E.Deptno=D.Deptno
 WHERE E.Job='MANAGER' AND d.Loc='Warszawa';
Rozpoczniemy od ogólnej uwagi. Ze względu na to, że koszt przesłań danych między węzłami ma decydujący wpływ na wydajność wykonania zapytania, w pierwszym kroku wykonywania rozproszonego złączenia staramy się ograniczyć ilość danych w każdej tabeli, które są istotne do obliczenia wyniku zapytania i które trzeba potencjalnie przesłać do innego węzła w sieci. W przypadku naszego przykładowego zapytania najpierw wykonujemy wskazane poniżej projekcje i selekcje tabel Emp i Dept.
SELECT E.Ename, d.Dname
FROM (SELECT E.Deptno, E.Ename FROM Emp E WHERE E.Job='MANAGER')E INNER JOIN
     (SELECT D.Deptno, D.Dname FROM Dept D WHERE d.Loc='Warszawa')D ON E.Deptno=D.Deptno;
Oto trzy podstawowe metody rozproszonego złączenia.

1. Sprowadź jedną tabelę (ewentualnie jej odpowiednią projekcję selekcji) do węzła gdzie jest druga tabela i tam dokonaj złączenia.

2. Gdy rozmiar wyniku jest duży w porównaniu z rozmiarem tabel, sprowadź tabele (a lepiej tylko ich odpowiednie projekcje selekcji) do końcowego węzła i tam je złącz.

3. Metoda półzłączeń (ang. Semijoins)

  1. W Warszawie, na tabeli Dept najpierw dokonaj selekcji d.Loc='Warszawa' ograniczającej zbiór wierszy a następnie projekcji na kolumny złączenia i prześlij wynik do Krakowa.
  2. W Krakowie, dokonaj złączenia nadesłanej tabeli z tabelą Emp. Wynik nazywa się redukcją tabeli Emp względem Dept. Prześlij redukcję tabeli Emp do Warszawy. Przy obliczaniu redukcji stosuje się dodatkowo selekcję E.Job='MANAGER' oraz projekcję na kolumny, które są potrzebne do obliczenia wyniku całego zapytania.
  3. W Warszawie, dokonaj ostatecznego złączenia tabeli Dept z redukcją tabeli Emp.

 

Rys. 13.1 Przesyłanie danych w sieci w metodzie półzłączeń

W konkretnym przypadku, optymalizator szacuje ilość danych, które trzeba przesłać siecią, przy zastosowaniu każdej z trzech metod i wybiera tę metodę, dla której ta ilość jest najmniejsza.

Optymalizacja rozproszonego zapytania

Rozważ wszystkie plany, wybierz najtańszy; podobnie jak w scentralizowanym przypadku. Oto różnice w porównaniu z przypadkiem scentralizowanym.

Różnica 1: Trzeba uwzględnić koszty komunikacji między węzłami - koszty przesyłania danych siecią mają decydujące znaczenie dla wydajności wykonania zapytania rozproszonego.

Różnica 2: Trzeba podjąć decyzję, którą replikę wybrać, jeśli te same dane są dostępne w różnych węzłach.

Różnica 3: Trzeba wziąć pod uwagę specyfikę każdego węzła lokalnego (np. inny rodzaj SZBD).

Różnica 4: Trzeba wziąć pod uwagę specyficzne metody rozproszonego złączenia. W szczególności, w trakcie złączania, nie opłaca się przesyłać pojedynczego wiersza, ale od razu całą ich kolekcję.

Odświeżanie replik

Są dwie metody synchronizacji (odświeżania) replik:

Modyfikacje przez repliki

Repliki dzielą się na niemodyfikowalne i modyfikowalne. Do tej pory rozważane przez nas repliki są niemodyfikowalne co oznacza, że operacje INSERT, DELETE i UPDATE są  wyłącznie wykonywane bezpośrednio na tabeli-oryginale.

Replika modyfikowalna jest to replika przez którą można dokonywać zmian w tabeli oryginale wykonując instrukcje INSERT/DELETE/UPDATE.

Przy dokonywaniu modyfikacji przez replikę mamy dwie możliwości:

1. wykonywać zmianę danych na tabeli oryginale w ramach tej samej transakcji co zmiana danych w replice;

2. wykonywać zmianę danych najpierw tylko na replice, a dopiero potem zgodnie z określonymi procedurami przekazywać je do wykonania na tabeli oryginale (ten sposób bardziej odpowiada naturze użycia replik w rozproszonej bazie danych). W tym przypadku może się pojawić sytuacja kolizji, gdy w różnych replikach te same dane zostaną zmienione w różny sposób. Wtedy, opierając się na ustalonych z góry zasadach, trzeba wybrać jedną wersję jako główną i przekazać ją do wszystkich replik.

Dla replik możliwe jest zastosowanie modelu optymistycznych blokad. Gdy oryginał został w międzyczasie zmieniony i zmiany zostały zatwierdzone, aktualizacja na replice zostałaby wycofana.

 


13.3 Rozproszone zatwierdzanie i odtwarzanie

W porównaniu z przypadkiem scentralizowanym pojawiają się nowe problemy:

  1. Mamy do czynienia z nowymi rodzajami awarii, np. związanymi z połączeniami sieciowymi i odległymi węzłami.
  2. Gdy "pod-transakcje" jednej transakcji są wykonywane w różnych węzłach, wszystkie razem  wykonują COMMIT albo żadna z nich. Potrzebny jest specjalny protokół zatwierdzania.
  3. W każdym węźle jest utrzymywany odrębny dziennik (log) wykonywanych akcji, tak jak w scentralizowanej bazie danych. W tym dzienniku są odnotowywane akcje protokołu zatwierdzania.

Transakcja rozproszona jest realizowana przez zbiór węzłów w sieci. Jest jeden wyróżniony węzeł, który inicjuje i koordynuje transakcję – jest nazywany koordynatorem transakcji.

Rys. 13.2 Model wykonywania transakcji rozproszonej

Strzałki oznaczają przepływ sterowania, nie koniecznie przepływ danych. Baza danych użytkownika może być jedną z baz danych biorących udział w transakcji, ale nie koniecznie.

ROLLBACK

Realizacja polecenia ROLLBACK jest prosta. Koordynator przekazuje węzłom lokalnym polecenie abort do wykonania w lokalnym węźle. Oczywiście, wydanie polecenia abort może wynikać z obsługi wyjątku zgłoszonego do aplikacji przez lokalny węzeł. Również zgłoszenie awarii w lokalnym węźle może spowodować konieczność wykonania polecenia ROLLBACK przez aplikację bądź system.

COMMIT

W przypadku realizacji polecenia COMMIT jest stosowany następujący protokół uzgodnionego zatwierdzania transakcji rozproszonej.

Protokół dwufazowego zatwierdzania (2PC ang. Two-Phase Commit)

  1. Koordynator wysyła do wszystkich węzłów komunikat prepare.
  2. Węzły podejmują lokalnie decyzję o gotowości do zatwierdzenia prepare lub o konieczności wycofania transakcji abort i zapisują w swoim dzienniku odpowiednio albo rekord prepare albo rekord abort i następnie wysyłają do koordynatora odpowiednio komunikat albo yes albo no.
  3. Gdy koordynator uzyska jednomyślną odpowiedź yes, zapisuje do swojego dziennika rekord commit i wysyła do wszystkich węzłów komunikat commit. Oznacza to zatwierdzenie rozproszonej transakcji i trwałość wprowadzonych zmian, niezależnie od awarii jakie od tego momentu mogą wystąpić. Gdy koordynator uzyska co najmniej jedną odpowiedź no, zapisuje do swojego dziennika rekord abort i wysyła do wszystkich węzłów komunikat abort. Również w przypadku przekroczenia czasu oczekiwania na odpowiedź, koordynator zapisuje do swojego dziennika rekord abort i wysyła do wszystkich węzłów komunikat abort.
  4. Węzły zapisują w swoim dzienniku odpowiednio rekord abort/commit, kończą transakcję usuwając informację o niej z buforów bazy danych w pamięci RAM a następnie wysyłają do koordynatora komunikat ack.
  5. Po otrzymaniu wszystkich potwierdzeń ack koordynator zapisuje do swojego dziennika rekord end i kończy transakcję usuwając informację o niej z buforów bazy danych w pamięci RAM.

Komentarz na temat protokołu 2PC

  1. Dwufazowość - dwie rundy komunikacji: pierwsza - głosowanie; druga - kończenie. Obie są inicjowane przez koordynatora.
  2. Koordynator w fazie głosowania, gdy nie ma odpowiedzi z jednego z węzłów, może zadecydować o wycofaniu (abort) całej transakcji - jest zwykle określone ograniczenie czasowe oczekiwania na odpowiedzi z węzłów.
  3. Każdy węzeł przed lub w czasie fazy głosowania może zadecydować o wycofaniu (abort) transakcji - również wtedy gdy nie może się połączyć z koordynatorem.
  4. Każdy komunikat odzwierciedla decyzję nadawcy; aby mieć pewność odporności na awarie, decyzja jest najpierw zapisywana do dziennika transakcji (logu).

Jest możliwe kilka modyfikacji zasadniczego protokołu 2PC.

  1. Dwu-fazowe zatwierdzanie (2PC) z domyślnym wycofaniem: w przypadku podjęcia decyzji o wycofaniu zarówno koordynator jak i węzeł lokalny od razu dokonują wycofania transakcji. Brak transakcji w pamięci RAM oznacza, że została ona wycofana. Natomiast gdy koordynator podjął decyzję o zatwierdzeniu transakcji rozproszonej, utrzymuje o niej informacje dopóki nie uzyska potwierdzeń ack od wszystkich lokalnych węzłów.
  2. Zdecentralizowany 2PC: koordynator wysyła komunikat prepare. Węzły zapisują w swoim dzienniku rekord abort lub prepare a następnie wysyłają do wszystkich węzłów komunikat no lub yes. Każdy węzeł (w tym koordynator) ma pełen obraz stanu transakcji rozproszonej. Gdy węzeł uzyska jednomyślną odpowiedź yes, zapisuje do swojego dziennika rekord commit. Wpp. zapisuje do swojego dziennika rekord abort. Węzeł już nie wysyła żadnej wiadomości ani do koordynatora ani do innych węzłów.
  3. 2PC w topologii drzewowej:  koordynator znajduje się w korzeniu drzewa węzłów. Komunikacja między węzłami zachodzi po krawędziach drzewa. Koordynator rozsyła swoje komunikaty w dół drzewa. Każdy węzeł przekazuje komunikat koordynatora do swoich następników w drzewie. Najpierw swoją decyzję (yes lub no) podejmują i wysyłają węzły-liście. Każdy węzeł czeka na odpowiedź od swoich następników. Gdy je otrzyma, podejmuje zbiorczą decyzję (yes lub no) i przesyła ją do swojego poprzednika w drzewie.

 


13.4 Implementacja rozproszonych baz danych w Oracle

Przede wszystkim Oracle dostarcza oprogramowanie sieciowe Oracle Net umożliwiające komunikację między bazami danych Oracle oraz obsługę transakcji rozproszonych działających na więcej niż jednej bazie danych – w tym zatwierdzanie takich transakcji i ich wycofywanie.

Z punktu widzenia projektanta rozproszonej bazy danych najważniejsze są dwa nowe rodzaje obiektów tworzonych w lokalnej bazie danych, za pomocą których uzyskuje się dostęp do obiektów w odległych bazach danych. W ten sposób ze zbioru lokalnych baz danych można utworzyć jedną rozproszoną bazę danych. Obiekty te to:

1. Powiązanie z bazą danych (ang. database link) – jest to zapisana w bazie danych ścieżka sieciowa do odległej bazy danych.

2. Migawka, perspektywa zmaterializowana (ang. snapshot, materialized view) – lokalna kopia (replika) danych znajdujących się w jednej lub więcej odległych bazach danych. Migawka ma charakter perspektywy odświeżanej co określony przedział czasu (może więc nie zawierać danych w pełni aktualnych!).

Powiązanie z bazą danych

Składnia tworzenia powiązania z bazą danych (powiązania bazodanowego) jest następująca:
 
CREATE DATABASE LINK nazwa_powiązania
 CONNECT TO użytkownik IDENTIFIED BY hasło
 USING ’nazwa_usługi’;
gdzie:

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:

CREATE DATABASE LINK baza
CONNECT TO scott IDENTIFIED BY tiger
USING 'elektron';
tworzy powiązanie o nazwie baza z odległą bazą danych określoną przez sieciową usługę Oracle o nazwie elektron. Przy wykonywaniu instrukcji
SELECT *
FROM Emp@baza;
lokalny serwer Oracle łączy się, używając oprogramowania Oracle Net, z odległą bazą danych elektron. Oprogramowanie Oracle Net znajdujące się na docelowym komputerze przechwytuje zgłoszenie i dokonuje logowania w bazie danych elektron 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.

System Oracle potrafi wykonywać 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;
czy
UPDATE Emp@baza
SET Salary = Salary * 1,1;

Synonimy

Definiuje się zwykle synonimy dla obiektów w odległej bazie danych, np.

CREATE SYNONYM Klienci
FOR Klienci@Baza_szkola;
Następnie używamy nazwy Klienci, tak jakby to była to zwykła tabela.

Migawki (repliki)

Drugi rodzaj obiektów specyficzny dla rozproszonej bazy danych Oracle replika jest tworzona za pomocą instrukcji:
 
CREATE SNAPSHOT nazwa_migawki
REFRESH NEXT przedział_czasu
AS zapytanie;
gdzie:

  1. przedział_czasu – określa, co jaki czas należy odświeżać migawkę,

  2. zapytanie – określa zapytanie, które tworzy zawartość migawki i które jest ponawiane przy każdym odświeżaniu migawki.

Zamiast słowa kluczowego SNAPSHOT można też używać słowo kluczowe MATERIALIZED VIEW. Migawka jest faktycznie perspektywą zmaterializowaną, a nazwy "migawka" bądź słowa kluczowego "SNAPSHOPT" używa się aby podkreślić kontekst użycia perspektywy zmaterializowanej - do konstrukcji rozproszonej bazy danych.

Na przykład, instrukcja:

CREATE SNAPSHOT Wszyscy_prac
REFRESH NEXT Sysdate+1
AS SELECT * FROM Emp@warszawa
   UNION
   SELECT * FROM Emp@krakow
   UNION
   SELECT * FROM Emp@gdansk;
tworzy migawkę złożoną z danych o pracownikach pochodzących z trzech oddziałów firmy w Warszawie, Krakowie i Gdańsku. Zawartość migawki ma być 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. Na przykład:
SELECT *
FROM Wszyscy_prac
WHERE Job = 'MANAGER';
wypisuje informacje o wszystkich osobach pracujących w firmie na stanowisku MANAGER.

Implementacja migawki

W lokalnej bazie danych dla każdej migawki są tworzone trzy obiekty:

  1. tabela, do której jest zapisywany wynik zapytania (stąd nazwa perspektywa zmaterializowana),

  2. indeks dla klucza głównego,

  3. perspektywa służąca do wyświetlania i używania zawartości migawki.

Odświeżanie migawki

Rozróżniamy dwa typy migawek względem instrukcji SELECT występującej w jej definicji: proste i złożone. W przypadku migawki złożonej nie ma żadnych ograniczeń. Jeśli w instrukcji SELECT nie występują ani klauzule GROUP BY, CONNECT BY, DISTINCT ani funkcje sumaryczne, ani operatory zbiorowe, ani złączenia tabel, to taka migawka jest prosta.

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-oryginał tej migawki, specjalnego dziennika nazywanego dziennikiem migawki, do którego są wpisywane zmiany dokonywane na tabeli-oryginale. Następnie, przy odświeżaniu migawki zamiast przesyłać całą zawartość tabeli-oryginału, jest przesyłana tylko zawartość dziennika migawki. Oto przykład instrukcji zakładającej dziennik migawki na tabeli Emp:

CREATE SNAPSHOT LOG ON Emp
TABLESPACE users;
Ze względu na spójność referencyjną - łączy się migawki w grupy i dokonuje się ich jednoczesnego odświeżania.

Modyfikowanie danych przez migawkę

Jeśli w definicji migawki prostej użyjemy klauzuli FOR UPDATE, utworzymy migawkę modyfikowalną:

CREATE SNAPSHOT Rep_emp
REFRESH FAST NEXT Sysdate+1
FOR UPDATE
AS SELECT * FROM Emp@warszawa;
Można wówczas dokonywać zmian na tabeli oryginale wykonując operacje INSERT/DELETE/UPDATE na migawce, np.
UPDATE Rep_emp
SET Sal = Sal*1.05
WHERE Ename = 'SCOTT';

 


13.5 Problem integracji informacji

W zastosowaniach baz danych coraz częściej pojawia się problem integracji danych pochodzących z różnych źródeł danych - w szczególności z baz danych.

  1. Powiązane dane istnieją w różnych miejscach i może zaistnieć potrzeba jednoczesnego ich użycia przez jedną aplikację.
  2. Bazy danych bądź źródła danych mogą się różnić:

Przykład

Dwie szkoły wyższe chcą się połączyć. Każda z nich ma swoją osobną bazę danych. Władze nowej szkoły wyższej chcą mieć zintegrowany widok na całość.

Rozwiązanie problemu integracji informacji można traktować jako pewną ograniczoną rozproszoną bazę danych zbudowaną nad zbiorem heterogenicznych źródeł danych przez dodanie jednej "centralnej" bazy danych i umożliwienie kontaktowania się jej z każdym źródłem danych z osobna.

Trzy podejścia do integracji

  1. Hurtownia danych (Tylko-do-odczytu). Skopiuj dane źródłowe do centralnej bazy danych dokonując ich transformacji do wspólnego schematu. Hurtownie danych były już tematem wykładu 7.

    Rys. 13.3 Rozwiązanie problemu integracji za pomocą hurtowni danych

     

  2. Mediator (najczęściej tylko-do-odczytu). Utwórz perspektywę wszystkich źródeł danych, tak jakby były zintegrowane.

    Rys.13.4 Rozwiązanie problemu integracji za pomocą modułu mediatora

3. Federacja baz danych. Każda baza danych stanowi osobny system mający własnych użytkowników. Do realizacji pewnych specjalnych wspólnych zadań bazy danych tworzą federację w oparciu o określony mechanizm integrujący (może to być mediator z poprzedniego rozwiązania). Transakcje lokalne działają na lokalnych bazach danych. Transakcje globalne działają na federacji baz danych i zwykle składają się z kilku niezależnych lokalnych transakcji.

Moduł osłony (wrapper) i rola języka XML

Moduł stojący między źródłową bazą danych a hurtownią danych bądź mediatorem nazywa się osłoną (ang. wrapper).

Filtruje on dane ze źródłowej bazy danych na zewnątrz (zgodnie ze specyfikacją). Najwygodniejszym uniwersalnym językiem wynikowym jest XML (do komunikacji, co najmniej, między mediatorem a osłoną).

Zapytanie do źródłowej bazy danych (przygotowywane przez mediatora) też może być sformułowane przy użyciu XML. Tłumaczenia na język źródłowej bazy danych dokonuje konkretny moduł osłony związany z konkretną bazą danych.

 


13.6 Podsumowanie

Zostało przedstawione pojęcie rozproszonej bazy danych i omówione jej zalety i wady w porównaniu z konwencjonalną, scentralizowaną bazą danych.

Przedstawiona została implementacja rozproszonej bazy danych w konkretnym systemie baz danych – Oracle.

Rozważony też został problem integracji informacji pochodzących z różnych heterogenicznych baz danych.

 


13.7 Słownik pojęć

fragment danych - podzbiór wszystkich danych całej bazy danych przechowywany w jednym węźle sieci.

replika danych - kopia całości lub jakiejś części danych przechowywanych w innym węźle sieci niż oryginał.

replikacja synchroniczna - zanim modyfikująca transakcja zostanie zatwierdzona dokonuje się aktualizacji (odświeżenia) wszystkich replik (obejmuje zakładanie blokad, wymianę komunikatów w sieci).

replikacja asynchroniczna - kopie zmodyfikowanej tabeli są tylko okresowo aktualizowane (odświeżane) – metoda znacznie tańsza; ale chwilowo różne kopie mogą nie być ze sobą zsynchronizowane.

zapytanie odległe – zapytanie, w którym dane do realizacji znajdują się w jednym odległym węźle sieci.

transakcja odległa – transakcja, której dane do realizacji znajdują się w jednym odległym węźle sieci.

zapytanie rozproszone – zapytanie, w którym dane do realizacji znajdują się w różnych, odległych węzłach sieci.

transakcja rozproszona – transakcja, której dane do realizacji znajdują się w różnych odległych węzłach sieci.

protokół dwufazowego zatwierdzania (2PC) - protokół zatwierdzania transakcji rozproszonej obowiązujący węzły w sieci biorące udział w realizacji transakcji rozproszonej. Składa się z dwóch faz komunikacji między węzłami: pierwsza - głosowanie czy można zatwierdzić transakcję; druga - kończenie transakcji po podjęciu decyzji. Obie fazy są inicjowane przez jeden wyznaczony do tego węzeł nazywany koordynatorem transakcji.

powiązanie bazodanowe (z bazą danych) - zapisana, jako obiekt bazy danych Oracle,  ścieżka sieciowa do odległej bazy danych.

integracja informacji - problem zbudowania jednolitego interfejsu do zbioru heterogenicznych baz danych. Dwa stosowane podejścia to albo kopiowanie danych do jednej bazy danych nazywanej hurtownią danych albo zbudowanie modułu mediatora między bazami danych. Jako język do komunikacji jest używany język XML.
 


13.8 Sprawdzenie wiedzy

  1. Za pomocą jakich operacji ze zwykłej bazy danych tworzy się rozproszoną bazę danych:

    Replikacja
    Centralizacja
    Normalizacja
    Fragmentacja

  2. Czy replikacja przyśpiesza wykonywanie:

    instrukcji SELECT
    instrukcji INSERT
    instrukcji DELETE
    instrukcji UPDATE

  3. W metodzie półzłączeń siecią przesyła się:

    jedną tabelę
    dwie tabele
    pewną selekcję
    pewną redukcję

  4. Co jest prawdą dla dwu-fazowego protokołu zatwierdzania:

    Mają miejsce dwie fazy w komunikacji koordynatora z węzłami lokalnymi.
    Mają miejsce dwie fazy: w jednej są zakładane blokady na węzły, w drugiej na koniec transakcji blokady są zdejmowane.
    Następuje uzgodnienie stanowisk, czy można zatwierdzić transakcję.
    Każdy węzeł lokalny może zawsze lokalnie zatwierdzić swoją część transakcji.
    Każdy węzeł lokalny może zawsze lokalnie wycofać swoją część transakcji.

  5. Powiązanie z odległą bazą danych jest w Oracle zapisywane:

    do pliku inicjalizacyjnego
    do pliku kontrolnego
    do specjalnej tabeli tworzonej przez system na koncie użytkownika
    jako specjalny obiekt bazy danych

  6. Które obiekty są charakterystyczne dla rozproszonej bazy danych w Oracle:

    procedura
    indeks
    migawka
    punkt kontrolny
    powiązanie bazodanowe

  7. Zapis "UPDATE Emp@Warszawa SET Salary = Salary *1.1;" oznacza w Oracle aktualizację tabeli Emp, która:

    znajduje się na koncie użytkownika 'Warszawa'
    znajduje się w przestrzeni tabel o nazwie 'Warszawa'
    Znajduje się w odległej bazie danych określonej przez powiązanie bazodanowe o nazwie 'Warszawa'

  8. Implementacja migawki w lokalnej bazie danych wymaga utworzenia:

    tabeli
    indeksu
    perspektywy

  9. Implementacja migawki prostej z opcją REFRESH FAST w głównej bazie danych wymaga utworzenia:

    dziennika migawki
    perspektywy
    indeksu

  10. Co stanowi metodę rozwiązania problemu integracji informacji:

    hurtownia danych
    mediator
    utworzenie od początku nowego systemu informacyjnego

 


13.9 Zadania

1. Międzynarodowa sieć supermarketów potrzebuje bazy danych do zarządzania działalnością sieci. Jakiego rodzaju zapytania będą kierowane do bazy danych z lokalnych oddziałów a jakie z centrali? Zaplanuj, które dane powinny znajdować się w lokalnych bazach danych, a które w bazie centrali; które dane powinny być replikowane, a które nie muszą. Czy modyfikowalność przez repliki jest istotna?

2. Kilka funkcjonujących sklepów chce utworzyć spółkę. Każdy ze sklepów ma swoją niezależnie zbudowaną i funkcjonującą bazę danych. Kierownictwo firmy chce mieć pełny wgląd w całość spółki. Jakie rozwiązanie zaproponowałbyś, np. utworzyć od początku nową bazę danych i dokonać do niej migracji danych, zbudować moduł mediatora, zbudować hurtownię danych?
 



Strona przygotowana przez Lecha Banachowskiego - 06/19/07 .