Obiektowe bazy danych - Technologie Przetwarzania Danych

Transkrypt

Obiektowe bazy danych - Technologie Przetwarzania Danych
Obiektowebazydanych
Obiektowy model danych
Wykadprowadzi:
TomaszKoszlajda
Planwykadu
•
•
•
•
•
•
•
•
•
•
Przesankidlanowejgeneracjisystemówbazdanych
Podstawoweelementyobiektowegomodeludanych
Konstruktory zoonychtypówdanych
Abstrakcyjnetypydanych
Dziedziczenie
Zwizkimidzydanymi
Hierarchiekolekcjiobiektów
Polimorfizmipónewizanie
Tosamodanych
Trwaodanych
Nowedziedzinyzastosowa
bazdanych
• SystemywspomaganiaprojektowaniaCAD/CAM
• Systemyinformacjiprzestrzennej
• Multimedialnebazydanych
Charakterystykanowychdziedzinzastosowa
• Zoone,hierarchicznestrukturydanych
• Zoonebehawioralnewasnocidanych
• Nowemodeleprzetwarzania:adhoc– dynamiczna
strukturatransakcji,nawigacjavs.selekcja,
kooperujceiintensywnieprzetwarzajcedane
transakcje
Nowetechnologiebudowyaplikacji
• Jzykiobiektowe
Przykadzoonejrzeczywistoci
Obraz
{persistence}
#utworzony : Date
#elementy[1..*] : Figura
+dodaj(Figura)
+utwórzKopi() :Obraz
[1..*]
jest_pierwowzorem
[0..1]
Figura
Odcinek
#Wierzchoki[2] : Punkt
+Dugo() : Float
+Przesu(Float, Float)
{abstract}
+typ : String
+Powierzchnia() : Float
+Przesu(Float, Float)
[0..*]
Wielokt
Koo
#Krawdzie[3..*] : Odcinek
+Powierzchnia() : Float
+Przesu(Float, Float)
#rodek : Punkt
#promie : Float
+Powierzchnia() : Float
+Przesu(Float, Float)
utworzya [1..*]
Osoba
{persistence}
+imi : String
+nazwisko : String
+adres : Adres
Adres
Punkt
+miasto : String
+ulica : String
+NrDomu : Integer
+X : Float
+Y : Float
+przesu(Float,Float)
Ograniczeniarelacyjnegomodeludanych
•
•
•
•
•
Paskie jednowymiarowe struktury danych
Identyfikacja danych jedynie za pomoc ich wartoci
Zamknity zbiór prostych i predefiniowanych typów danych
Brak pojcia zwizków midzy danymi
Brak hierarchii typów danych
Figury(id_f PK, typ, powierzchnia)
Odcinki(id_odc PK FK(Figury), typ, x1, y1, x2, y2)
Wielokty(id_w PK FK(Figury), typ)
Krawdzie(id_k PK, x1, y1, x2, y2, id_w FK(Wielokty))
Koa(id_k PK FK(Figury), typ, x, y, promie)
Obrazy(id_ob PK, utworzony)
Osoby(id_os PK, imi, nazwisko, miasto, ulica, numer_domu)
Autorstwo(id_ob FK(Obrazy), id_os FK(Osoby))
Modyfikacje(wzorzec FK(Obrazy), modyfikacja FK(Obrazy))
Przesanki
nowejgeneracjimodeludanych
• Potrzebabogatszegomodeludanych
• Rozszerzalnymodeldanychumoliwiajcycise
dopasowaniedladowolnychdziedzinzastosowa
• cilejszaintegracjazobiektowymiaplikacjamibazy
danych
Aplikacja
Semantyka
wiata
rzeczywistego
Prosty model
danych
Aplikacja
Silny model
danych
Semantyka
wiata
rzeczywistego
Podstawoweelementy
obiektowegomodeludanych
•
•
•
•
•
•
•
Obiekt:stanifunkcjonalno
Cechyobiektów:atrybutyizwizki
Funkcjonalnoobiektu:metody
Tosamoobiektu
Hermetycznoobiektów
Klasa:typdanychimoduprogramowy
Dziedziczenie:wspódzielenieimplementacjiirelacja
podtypu
• Przecianieidynamicznewizaniefunkcjonalnoci
obiektów
Drogirozwojuobiektowychbazdanych
Obiektowe jzyki
programowania
Relacyjne bazy
danych
Obiektowe
bazy danych
Obiektowe
interfejsy
Obiektowo-relacyjne
bazy danych
ODMG
O/RM
SQL3/99
Obiektowe
Obiektowe
Relacyjne
Relacyjne Obiektowe
Architekturyobiektowychiobiektowo
relacyjnychsystemówbazdanych
Struktury
danych aplikacji
4GL
kopiowanie
i konwersja
danych
brak
konwersji
danych
OQL
SQL
Obiektoworelacyjne bazy
danych
Struktury
danych bazy
danych
Obiektowe
bazy danych
Bazadanych
jakozbiórkolekcjiobiektów
• Stanobiektowejbazydanychjestzbioremkolekcji
trwaychirozrónialnychobiektów.
• Schematobiektowejbazydanychjestzbioremklas,
któredefiniujstrukturifunkcjonalnoobiektów.
• Wobiektowychbazachdanychrozróniasipojcie
klasyjakodefinicjiwasnociobiektówodpojcia
rozszerzeniaklasybdcegozbioremtrwaychobiektów.
class Figura { // nazwa klasy jako typu
(extent Figury)
// nazwa rozszerzenia klasy jako
// zbioru wystpie
Abstrakcyjnetypydanych
Moliwo definiowania nowych typów danych o dowolnej
zoonoci i funkcjonalnoci. Typy danych uytkownika
mog by podstaw definicji pojedynczych atrybutów klas
jak równie caych klas.
class Punkt {
attribute Float X, Y;
void przesu (in Float x,
in Float y);};
class Odcinek {
attribute Punkt W1, W2;
void przesu (in Float a,
in Float b) {
W1.przesu(a, b);
W2.przesu(a, b); }};
Punkt
+X : Float
+Y : Float
+przesu(Float,Float)
Odcinek
{persistence}
#Wierzchoki[2]:Punkt
+przesu(Float,Float)
Dziedziczenie
Klasymogbyspecjalizowaneprzezmechanizm
dziedziczenia.Klasapochodnadziedziczyfunkcjonalno
iimplementacjklasybazowej.Wklasiepochodnej
monadodanowfunkcjonalnolubredefiniowa
funkcjonalnoodziedziczon.
Figura
class Wielokt extends Figura
// dziedziczenie
{...};
class Wielokt : Figura
// relacja podtypu
{...};
Relacja podtypu ‹ Dziedziczenie
{abstract, persistence}
+Powierzchnia() : Float
+Przesu(Float, Float)
Wielokt
{persistence}
#Krawdzie[3..*] : Odcinek
+Powierzchnia() : Float
+Przesu(Float, Float)
Zoonestrukturydanych
Moliwo naturalnego modelowania atrybutów zoonych i
wielowartociowych. Przykad zastosowania konstruktorów
typów zoonych w jzyku ODL.
Punkt
+X : Float
+Y : Float
class Wielokt {
Odcinek
struct Punkt { //typ
#Wierzchoki[2] : Punkt
Float X, Y; }
struct Odcinek { //typ
Wielokt
Punkt Wierzchoek_1;
{persistence}
#Krawdzie[3..*] : Odcinek
Punkt Wierzchoek_2;}
//atrybut
attribute set<Odcinek> krawdzie;};
Zwizkimiedzydanymi
Moliwo definiowania i skadowania w bazie
danych zwizków midzy danymi.
Osoba
Obraz
{persistence}
{persistence}
jest_autorem #utworzony : Date
+imi : String
[1..*] #elementy[1..*] : Figura
+nazwisko : String [1..*]
+dodaj(Figura)
+adres : Adres
+utwórzKopi()
nazwa
zwizku
class Osoba {
relationship set<Obraz> jest_autorem
inverse Obraz::jest_utworzony_przez;
...}
typ
zwizek
zwizku
odwrotny
Hierarchiakolekcjiobiektów
Zwizekdziedziczeniamidzyklasami,którychrozszerzenia
sskadowanewbaziedanychimplementujezwizek
zawieraniasipodzbiorówobiektów.Rozszerzenieklasy
pochodnejjestpodzbioremrozszerzeniaklasybazowej.
class Figura {
(extent Figury)
...};
class Wielokt extends Figura{
(extent Wielokty)
...};
Figura
{persistence}
#typ : String
+Powierzchnia() : Float
+Przesu(Float, Float)
Wielokt
{persistence}
#Krawdzie[3..*] : Odcinek
+Powierzchnia() : Float
+Przesu(Float, Float)
Wielokty Ž Figury
Polimorfizmipónewizanie
Relacja podtypu czca klasy i interfejsy umoliwia
podstawienia polimorficzne polegajce na podstawieniu pod
zmienn typu klasy bazowej obiektu, który jest wystpieniem
klasy pochodnej.
Podstawienia polimorficzne umoliwiaj dynamiczne
wizanie nazw metod.
zmienna polimorficzna
podstawienie polimorficzne
Figura f = new Koo(10,6,5);
Float p = f.powierzchnia();
f = new Wielokt(p1,p2,p3);
p = f.powierzchnia();
Koo::powierzchnia( )
wizanie dynamiczne
Wielokt::powierzchnia( )
Tosamodanych
Obiektowejzykiprogramowania:identyfikacja
danychprzezsymbolicznnazwifizycznyadresw
pamicioperacyjnej.
class Pracownik {...};
PAO
Pracownik Nowak("Jan","Nowak");
0c78:89ad
Nowak.nazwisko = "Kowalski";
Tosamodanych
Modelrelacyjny:identyfikacjadanychprzezichwartoci
SELECT * FROM patnicy
WHERE Nazwisko = 'NOWAK';
JAN
TADEUSZ
MACIEJ
JAN
KUBA
JÓZEF
JAN
NOWAK
KOWALSKI
NOWAK
RZEPA
TARZAN
MALINIAK
NOWAK
Jednoznaczna identyfikacja danych wymaga zdefiniowania
dla kadej relacji – klucza podstawowego
Tosamodanych
wobiektowejbaziedanych
• Identyfikacjanapodstawiewartociidentyfikatora
obiektunazywanegoOID
• IdentyfikacjaprzezOIDjestniezalenaodwartoci
atrybutówobiektu
Osoba *kowalski, *kowalska;
kowalski = new Osoba("Jan","Kowalski");
kowalska = new Osoba("Janina","Kowalska");
Kowalska->maonek = kowalski; //podstawienie oid
Kowalski->nazwisko = "Nowak";
Kowalski->pesel = 68040102766;
Kowalski->pe = "K";
Kowalska->maonek->dochody->poka();
Trwaodanych
• Obiektymogbytworzonewtrwaymlub
ulotnymobszarzeskadowania
• Trwaopowinnabywasnociposzczególnych
obiektów,anieklasobiektów
• Trwaopowinnabywasnociobiektów
dowolnejklasy
• Sposóboperowanianaobiektachtrwaychi
ulotnychpowinienbytakisam
• Obiektywcigucykluyciamogbyprzenoszone
midzytrwayminietrwaymobszarem
skadowania
Trwaodanych
Obiektystajsitrwaeprzezjawneutrwalenielub
przezbycieosigalnymiprzezinneobiektytrwae.
Wszystkie wystpienia klasy
Obiekty trwae
Baza danych
o1
o2
o3
Obiekty nietrwae
o4
pm = pmf.getPersistenceManager();
Punkt p = new Punkt(10.5, 7.1); // obiekt nietrway
Koo k = new Koo(p, 4); // obiekt nietrway
transaction = pm.currentTransaction();
pm.makePersistent(k); // utrwalenie obiektów p i k w bazie danych
transaction.commit();
Odwzorowanie
obiektowo-relacyjne
Wykad opracowa:
Tomasz Koszlajda
Odwzorowanie obiektowo-relacyjne
`
Odwzorowanie obiektowej architektury systemu
informatycznego w relacyjne struktury danych bazy danych
Aplikacja obiektowa
O/RM Middleware
OQL (HSQL, Linq)
NativeQuery
Wielokt
#typFigury string
#liczbaWierzch integer
+Powierzchnia() : Float
+Przesu(Float, Float)
+DodajWierzch(Punkt)
Logicznymodeldanych
– logikabiznesowa
select *
from Wielokty
insert into wielokty
values (w.typFigury, …)
OdwzorowanieO/R
Relacyjna baza
danych
Wielokty
idWielokta number(9) PK
typFigury varchar(15)
LiczbaWierzch number(3)
wBazieDanych boolean
Fizycznymodeldanych
Architektura przetwarzania O/RM
O-R DB
OO DB
O/RM
Aplikacja
OQL
dane
DBMS
Przetwarzanie
obiektów
Aplikacja
Aplikacja
Przetwarzanie
obiektów
Przetwarzanie
obiektów
QBE
SODA obiekty
NQuery
DBMS
OQL
dane
obiekty
DBMS
Przetwarzanie
danych
Rozwizania O/RM
`
Odwzorowanie modelu obiektowego w relacyjny
`
`
`
`
`
`
`
Odwzorowanie prostych atrybutów
Odwzorowanie OID
Odwzorowanie sieci dziedziczenia klas
Odwzorowanie zwizków midzy klasami
Odwzorowanie atrybutów klas
Zarzdzanie transakcjami
Zarzdzanie obiektami
Dodatkowe atrybuty implementacyjne
`
Oprócz odwzorowania atrybutów informacyjnych w O/RM niezbdne
jest utrzymywanie dodatkowych atrybutów implementacyjnych
Punkt
Wielokt
#typFigury string
#liczbaWierzchoków integer
+Powierzchnia() : Float
+Przesu(Float, Float)
+DodajWierzchoek(Punkt)
#X : Float
[2]
jestWierzchokiem #Y : Float
[3..*] +Kt() : Float
[1]
+Odlego() : Float
+Przesu(Float, Float)
tworzKrawdZ
Wielokty
idWielokta number(9) PK
typFigury varchar(15)
LiczbaWierzchoków number(3)
wBazieDanych boolean
`
Klucze podstawowe i obce
`
Zapewnienie trwaoci danych
`
Znaczniki czasowe
[2]
Punkty
idPunktu number(10) PK
idWielokta number(9) FK
X number(5,2)
Y number(5,2)
wBazieDanych boolean
Fizyczny model danych
Dodatkowe atrybuty implementacyjne
`
Narzdzia O/RM wspieraj korzystanie z atrybutów
implementacyjnych. Na przykad w JPA przewidziano np.
definiowane identyfikatorów obiektów, wersji obiektów lub
atrybutów informujcych o klasie obiektu:
@Entity
public class Osoba implements Serializable {
...
@Version
@Column(name="OPTIMISTIC_LOCK")
public Integer getVersion() { ... }
@Id
@Column(name="id_osoby")
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="SEQ_STORE")
}
Przykadowa definicja klas
`
Dany model klas przetwarzanych przez aplikacje
bazy danych
Osoba
Samochód
+imi : String
[0..*]
+nazwisko : String [1]
+wiek : integer
posiada
+pe : Pe
{non complete, overlapping}
Pracownik
+etat: String
+paca: float
+firma: Sring
Student
+Uczelnia: String
+Kierunek: String
+rokStudiów: integer
+nr_rejestracyjny : String
+producent : String
+model : String
+moc : Integer
Odwzorowanie prostych atrybutów
Przykad odwzorowania klas w schemat relacyjnej bazy
danych za pomoc adnotacji jzyka Java w O/RM EJB3/JPA.
@Entity
@Table(name="t_Osoby")
public class Osoba implements Serializable {
public String imi;
@Column(name="t_imi", nullable = false, length = 25);
public String nazwisko;
@Column(name="t_nazwisko");
...
}
Odwzorowanie OID
W JPA moliwe okrelanie OID obiektów (@id) oraz sposobu generowania
jego wartoci @GeneratedValue. Dostpne s nastpujce sposoby
generowania wartoci OID:
`
`
`
`
TABLE - relacja dedykowana do generowania OID
IDENTITY – atrybut relacji przechowujcej obiekty
SEQUENCE – systemowy sekwenser
AUTO – automatycznie jedno z powyszych
@Entity
@Table(name="t_Osoby")
public class Osoba implements Serializable {
private Long id;
@Id
@Column(name="id_osoby")
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="SEQ_STORE")
public Integer getId() { ... }
Cecha Id nie posiada wszystkich cech OID.
Odwzorowanie zwizków
W JAP moliwe jest odwzorowanie zwizków typu:
` 1:1 - @OneToOne,
` 1:N - @ManyToOne, @OneToMany,
` M:N - @ManyToMany,
Jako zwizków jedno lub dwukierunkowych.
Do okrelenia siy powizania suy opcja Cascade:
` CascadeType.PERSIST – oznacza, e utrwalenie danego obiektu
pociga za sob automatyczne utrwalenie obiektu powizanego.
` CascadeType.MERGE – oznacza, e dla odczonego od bazy
danych obiektu, modyfikacje obiektu powizanego bd
synchronizowane metod MERGE razem z obiektem gównym.
` CascadeType.REMOVE – oznacza, e usunicie danego obiektu
pocignie za sob usunicie obiektu powizanego.
` CascadeType.ALL – wszystkie powysze.
Trwae zwizki s implementowane za pomoc wspódzielonych kluczy
podstawowych (1:1), pary klucz podstawowy, klucz obcy lub za pomoc
relacji poczeniowych.
Odwzorowanie zwizków
Przykad implementacji zwizku 1:N w JPA
@Entity
public class Samochód implements Serializable
{
@ManyToOne(cascade = {CascadeType.REMOVE} )
@JoinColumn(name="id_waciciela")
public Waciciel GetWaciciel() {
return waciciel;
}
...
}
Atrybuty wielowartociowe
Adnotacja @OneToMany suy do implementacji
atrybutów wielowartociowych modelowanych w
aplikacji jako: Collection, List, Set.
@Entity public class Miasto {
...
@OneToMany(mappedBy="miasto")
@OrderBy("Ulica")
public List<Ulica> getUlice() {
...
@Entity public class Ulica {
@ManyToOne
@JoinColumn(name="Id_miasta",nullable=false)
public Miasto getMiasto() { ...
Odwzorowanie sieci dziedziczenia
Znane s nastpujce metody odwzorowania:
`
Osoba
+imi : String
+nazwisko : String
+wiek : integer
+pe : Pe
`
{non complete, overlapping}
Pracownik
+etat: String
+paca: float
+firma: Sring
Student
`
+Uczelnia: String
+Kierunek: String
+rokStudiów: integer
`
Odwzorowanie
hierarchii klas w
pojedyncz tablic
Odwzorowanie
konkretnych klas w
osobne tabele
Odwzorowanie kadej
klasy w osobn tabel
Odwzorowanie klas w
uniwersaln struktur
tabel
Odwzorowanie hierarchii klas w pojedyncz tabel
Osoby
Imi
Nazwisko
Pe
Etat
Paca
Firma
Uczelnia
Kierunek
RokStudiów
jestStudentem
jestPracownikiem
Wasnoci:
• Tabela bdzie przechowywaa duo wartoci
pustych
• Tabela bdzie zajmowa wiksz powierzchni
na dysku
• atwo przetwarzania polimorficznego –
wszystkie dane w jednej tabeli
• Dua wydajno dla przetwarzania
polimorficznego
• Maa wydajno dla przetwarzania
homogenicznego – tabela zawiera
niepotrzebne dane
• Maa wydajno dla modyfikacji struktury
pojedynczych klas
• Trudne utrzymywanie przynalenoci do typów
Dobre dla prostych i paskich hierarchii klas
Odwzorowanie hierarchii klas w pojedyncz tabel
JPA wspiera odwzorowanie klas w jedn tabel. Dla
rozcznych i kompletnych podzbiorów – proste warunki
weryfikacji klasy.
@Entity
@Table(name=„t_Osoby")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn( name="t_pe")
public class Osoby{ ... }
@Entity
@DiscriminatorValue("K")
public class Kobieta extends Osoba { ... }
@DiscriminatorValue("M")
public class Mczyzna extends Osoba { ... }
// transformacja zapyta
select k from Kobieta k ->
select ... from t_Osoby where t_pe='K'
select o from Osoba o ->
select ... from t_Osoby
Odwzorowanie hierarchii klas w pojedyncz tabel
Dla nierozcznych podzbiorów niezbdne jest stosowanie zoonych
warunków weryfikacji klasy.
@Entity
@Table(name=„t_Osoby")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="jestStudentem")
@DiscriminatorColumn(name="jestPracownikiem")
@DiscriminatorFormula(
"case when jestStudentem=True then 0
when jestPracownikiem=True then 1 end")
public class Osoby{ ... }
@Entity
@DiscriminatorValue(0)
public class Student extends Osoba { ... }
@DiscriminatorValue(1)
public class Pracownik extends Osoba { ... }
Odwzorowanie konkretnych klas
w osobne tabele
Wasnoci:
• Jeeli klasa Osoba jest klas
abstrakcyjn
• Zaleno midzy podzbiorami
danych typu complete
Pracownicy
idPracownika
Imi
Nazwisko
Pe
Etat
Paca
Firma
Studenci
idStudenta
Imi
Nazwisko
Pe
Uczelnia
Kierunek
RokStudiów
•
•
•
•
Trudna implementacja
overlapping - konieczno
implementacji wspólnej
dziedziny dla kluczy relacji
Maa wydajno dla
przetwarzania polimorficznego –
dane w rónych tabelach
Dua wydajno dla
przetwarzania homogenicznego
Modyfikacja klasy z podklasami
wymaga modyfikacji schematów
wielu tabel
Dobre dla rozcznych podzbiorów rozszerze klas
Odwzorowanie konkretnych klas
JPA wspiera odwzorowanie konkretnych klas w tabele za pomoc strategii
„Table per class” (Hibernate – „Union class”).
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Osoby{ ... }
@Entity
@Table(name="t_Kobiety")
public class Kobieta extends Osoba { ... }
@Table(name="t_Mczyni")
public class Mczyzna extends Osoba { ... }
// transformacja zapyta
select o from Kobieta k ->
select * from t_Kobiety
select o from Osoba o ->
select ... from t_Kobiety
union
select ... from t_Mczyni
Odwzorowanie kadej klasy w osobn tabel
Wasnoci:
Osoby
idOsoby
Imi
Nazwisko
Pe
Proste odwzorowanie 1:1
• atwo przetwarzania
polimorficznego
• atwe utrzymywanie dla
modyfikacji nadklas i dodawania
podklas
Pracownicy
Studenci
idOsoby FK
idOsoby FK
• Rozmiar struktur proporcjonalny
Etat
Uczelnia
do liczby danych
Paca
Kierunek
• Dua liczba tablic
Firma
RokStudiów
• Maa wydajno przetwarzania
homogenicznego – konieczno
czenia tabel
Dobre dla pokrywajcych si podzbiorów rozszerze
klas i czsto zmieniajcych si definicji klas
•
Odwzorowanie kadej klasy w osobn tabel
JPA wspiera odwzorowanie klasy w osobn tabel za pomoc
strategii „Joined subclass”.
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="t_Osoby")
public class Osoby{ ... }
@Entity
@Table(name="t_Kobiety")
@PrimaryKeyJoinColumn(name="id_osoby")
public class Kobieta extends Osoba { ... }
// transformacja zapyta
select o from Kobieta k ->
select o.*, k.*
from t_Osoby o JOIN t_Kobiety k
ON o.id_osoby = k.id_osoby
Odwzorowanie klas
w uniwersaln struktur tabel
Wasnoci:
` atwo utrzymania dla zmian schematu
` Trudne i mao wydajne przetwarzanie
Dobre dla zoonych aplikacji przetwarzajcych
niezbyt due zbiory danych
Odwzorowanie cech klas
Osoby
+imi : String
+nazwisko : String
+pe : Pe
+liczbaOsób : Integer
+procentKobiet: Integer
`
Moliwe strategie:
`
`
`
Osoby_LiczbaOsób
LiczbOs
`
Osoby
LiczbaOsób ProcentKobiet
Jednokolumnowa i jednowierszowa
tabela dla kadej cechy
Wielokolumnowe i jednowierszowe
tabele dla kadej z klas
Wielokolumnowa i jednowierszowa
tabela wspólna dla wszystkich klas
Wielowierszowa tabela o
generycznym schemacie wspólna
dla wszystkich klas
ZmienneKlasowe
Os_LiczbaOsób Os_ProcentKobiet
…
Optymistyczna synchronizacja transakcji
`
W wikszoci protokoów gwarantujcych poprawno wspóbienego
przetwarzania transakcji implementowane jest pesymistyczne podejcie
do synchronizacji, polegajce na modyfikacji historii konfliktowych
transakcji przez czasowe zawieszenie dziaania jednej z nich.
`
Optymistyczne protokoy synchronizacji transakcji przesuwaj
wykrywanie potencjalnych konfliktów do czasu akceptacji transakcji.
Wykryte konflikty s obsugiwane przez wycofanie jednej z
konfliktowych transakcji.
przepustowo
transakcji
protokó
pesymistyczny
protokó
optymistyczny
liczba
konfliktów
Optymistyczna synchronizacja transakcji
`
Schemat protokou optymistycznej synchronizacji
wspóbienoci zakada przeprowadzenie kadej transakcji
przez trzy kolejne fazy:
`
`
`
`
`
Faza odczytów i lokalnych modyfikacji – potencjalnie duga i
obejmujca interakcje z uytkownikiem transakcji.
Faza walidacji, która zaczyna si w punkcie akceptacji transakcji i
suy do weryfikacji moliwo poprawnego zakoczenia transakcji.
Synchronizowana transakcyjnie faza zapisu danych buforowanych
w PAO do bazy danych.
Zaletami optymistycznej synchronizacji transakcji s:
niewystpowanie w tym protokole zakleszcze transakcji
oraz mniejsze obcienie zasobów DBMS (brak blokad).
Optymistyczna synchronizacja transakcji nie gwarantuje
penej uszeregowalnoci – nie obsuguje anomalii fantomów.
Optymistyczna synchronizacja transakcji
Algorytm fazy walidacji jest nastpujcy [H.T.Kung, J.T.Robinson – 1981]:
Validation (Tj)
<valid := true;
// pocztek sekcji krytycznej
for TNRi from TNRstart+1 to TNRfinish do
if RSj ˆ WSi z ‡ then valid:=false;
if valid then
begin
(write);
TNRj := TNC;
TNC := TNC+1
end> // koniec sekcji krytycznej
if not valid then (rollback);
gdzie:
TNRstart jest najwikszym znacznikiem transakcji w momencie startu
transakcji Tj, TNRfinish jest najwikszym znacznikiem transakcji w
momencie rozpoczcia fazy walidacji, a RS i WS s zbiorami czytanych
i modyfikowanych danych.
Dziaanie algorytmu
Przykad synchronizacji dwóch transakcji T1 i T2.
zapis lokalny
T1
r1[x]
lw1[x]
T2
r1[y]
lw1[y]
zapis do bazy danych
c'1 val1 w1[x] w1[y] c1
r2[x]
c'2 val2
lw2[x]
a2
TNR(T1) = 10
Walidacja transakcji T2:
` TNRstart+1 = 10, TNRfinish=10
` RS(T2) = {x}, WS(T1) = {x, y},
` skd: RS(T2) ˆ WS(T1) = {x} z ‡
Transakcja T2 musi zosta wycofana.
Ulepszona wersja algorytmu
`
T1
Pomijanie nieistotnych konfliktów
r1[x]
lw1[x]
T2
r1[y]
lw1[y]
r2[x]
T3
c'1 val1 w1[x] w1[y] c1
lw2[x]
c'2 val2
a2
r3[x] lw3[x] c‚3 val3
a3
`
Transakcja T3 zostanie wycofana, mimo e dysponuje zatwierdzon
wartoci danej x. Wykryty konflikt jest nieistotny dla poprawnoci
przetwarzania, ale jest przyczyn wycofania transakcji.
`
Modyfikacja protokou OC o rozszerzenie zbioru danych czytanych przez
transakcj o znaczniki koców wspóbienych transakcji. Dla transakcji T3,
zbiór czytanych danych RS3={EOT1, x}.
`
Weryfikowany w fazie walidacji warunek zostanie zmodyfikowany do
postaci: RSij ˆ Wi z ‡, gdzie RSij jest podzbiorem tylko tych danych, które
zostay odczytane po zakoczeniu transakcji Ti. RS13 = ‡, co znaczy, e w
zmodyfikowanym protokole transakcja T3 nie zostanie wycofana.
Zarzdzanie wspóbienoci transakcji
`
W rodowiskach O/RM zalecanym sposobem synchronizacji transakcji s
protokoy zarzdzania wspóbienymi transakcjami wzorowane na
podejciu optymistycznym. Modyfikacje obiektów s wykonywane lokalnie.
Ich zapis do bazy danych, realizowany przez systemow operacj flush,
jest przesuwany na koniec transakcji. W zwizku z tym blokady do zapisu
s utrzymywane krótkoterminowo, tylko na czas walidacji transakcji.
`
Dodatkowe rozwizania majce na celu zwikszenie skalowalnoci
wspóbienego dostpu zakadaj, e transakcje systemu bazy danych nie
obejmuj czasu interakcji z uytkownikiem aplikacji bazy danych. W efekcie
równie blokady do odczytu zakadane przez system bazy danych s
krótkoterminowe. Logiczna transakcja (biznesowa) skada si z kilku
transakcji systemu bazy danych.
Transakcja biznesowa ACID
Transakcja
bazy danych
interakcja
Transakcja
bazy danych
interakcja
Blokada do odczytu
Transakcja
bazy danych
Blokada do zapisu
Zarzdzanie wersjami obiektów
`
`
`
W rodowiskach O/RM do implementacji protokoów
optymistycznej synchronizacji transakcji stosuje si
rozproszony algorytm zarzdzania. Transakcje
biznesowe synchronizuj si ze sob poprzez
weryfikacj w fazie walidacji stanu bazy danych.
Walidacja transakcji odbywa si poprzez kontrol wersji
modyfikowanych danych. Kontrola wersji moe by
realizowana rcznie przez aplikacj lub wspierana
systemowo.
Weryfikacja wersji obiektów odbywa si przez kontrol:
znaczników czasowych, identyfikatora wersji obiektu lub
przez porównanie wartoci obiektu zapamitanych z fazy
odczytu z wartoci odczytan w fazie walidacji.
Synchronizacja transakcji przez aplikacj
Kada interakcja z baz danych jest osobn sesj. Aplikacj musi
zaadowa/przeadowa z bazy danych wszystkie obiekty przetwarzane w
ramach danej interakcji oraz kontrolowa wersje modyfikowanych danych
dla uniknicia anomalii lost update.
// o1 jest wersj obiektu zaadowanego przez poprzedni sesj
session = factory.openSession(); // poczenie z baz danych
Transaction t = session.beginTransaction();
int oldVersion = o1.getVersion(); // zapamitaj numer wersji
session.load(o1, o1.getKey() ); // aduj aktualn wersj
if ( oldVersion != o1.getVersion() ) // sprawd zgodno
throw new StaleObjectStateException();
o1.setProperty("J23");
t.commit(); // wykonanie metody flush – zapis o1 do bazy danych
session.close(); //zamknicie poczenia z baz danych
// cig dalszy transakcji biznesowej
Synchronizacja transakcji przez aplikacj
Rozwizanie charakteryzuje si w ogólnoci niskim poziomem izolacji.
Transakcje biznesowe uzewntrzniaj przed zakoczeniem wprowadzone
modyfikacje danych. Nie wyklucza anomalii: brudny odczyt, brudny zapis,
rozmyty odczyt, skrony zapis i fantomów. Ponadto transakcji biznesowa
zarzdzana przez logik aplikacji nie jest jednostk odtwarzania – nie jest
atomowa.
Dodatkowo rozwizanie to charakteryzuje si duym obcieniem systemu
bazy danych operacjami otwierania i zamykania sesji. W praktyce powinno
by stosowane jedynie dla pojedynczej interakcji z uytkownikiem - jednej
transakcji odczytujcej i jednej modyfikujcej stan bazy danych.
Transakcja biznesowa
r[x]
r[y]
f c
Sesja
Transakcja
bazy danych R/W
lw[y]
interakcja
r[z] f c
Sesja
zapis do
bazy danych
lw[z]
interakcja
Transakcja
f – flush
bazy danych R/W c - commit
f c
Sesja
Transakcja
bazy danych R/W
Systemowa synchronizacja z kontrol wersji
Aplikacja biznesowa jest implementowana przez pojedyncz tzw.
rozszerzon sesj (extended session). Kada interakcja z baz danych jest
osobn transakcj. Ostatnia transakcja sesji jest odpowiedzialna za
zapisanie wszystkich modyfikacji sesji. Kontrola poprawnoci wersji
obiektów jest realizowana automatycznie.
// o1 jest wersj obiektu zaadowanego przez poprzedni transakcj
// w tej samej sesji, w ramach innego poczenia z baz danych
Transaction t = session.beginTransaction();
// uzyskaj nowe poczenie z baz danych z puli aktywnych pocze
o1.setProperty("J23");
t.commit(); // oddanie poczenia z baz danych
// interakcja z uytkownikiem
t = session.beginTransaction(); // ostatnia transakcja w sesji
o2.setProperty("007");
session.flush(); // zrzucenie do bazy danych zapisów z caej sesji
t.commit();
session.close();
Systemowa synchronizacja z kontrol wersji
Rozwizanie charakteryzuje si niekompletnym poziomem izolacji. Nie
wyklucza anomalii: rozmyty odczyt, skrony zapis i fantomów. Jednak
transakcja biznesowa jest atomowa.
Rozwizanie to charakteryzuje si du skalowalnoci w dostpie do
systemu bazy danych. W danym momencie aktywna jest staa i znacznie
mniejsza od liczby wspóbienych uytkowników aplikacji liczba pocze
z baz danych *.
Transakcja biznesowa
zapis do
r[x]
r[y]
c
lw[y]
interakcja
Transakcja
bazy danych RO
r[z] c
Sesja
lw[z]
bazy danych
f c
interakcja
Transakcja
f – flush
bazy danych RO c - commit
*) W DBMS Oracle maksymalnie 4*109 wspóbienych transakcji
Transakcja
bazy danych R/W
RO – read only
RW – read/write
Wasnoci optymistycznej synchronizacji
Adaptacja optymistycznego protokou zarzdzania wspóbienoci
transakcji w platformach O/RM zawiera pewne uproszczenia:
`
Zaimplementowany mechanizm synchronizacji zbudowany jest w
oparciu o pesymistyczne mechanizmy systemów baz danych. Std
przebieg transakcji biznesowych wie si z zakadaniem blokad do
odczytu i zapisu. Blokady do zapisu su do zapewnienia poprawnej
realizacji faz walidacji (dziaania operacji flush) wspóbienych transakcji.
Czas utrzymywania blokad jest znacznie krótszy ni w pesymistycznych
protokoach synchronizacji. Dziki temu, ewentualne zawieszenia
przetwarzania trwa krócej, a prawdopodobiestwo zakleszczenia jest
mniejsze.
`
Kontrola modyfikowanych wersji obiektów ma bardziej ograniczony
zasig ni w protokole Kunga i Robinsona. Warunek weryfikujcy
mono zatwierdzenia transakcji jest zredukowany do sprawdzenia
zbioru modyfikowanych, a nie do wszystkich odczytywanych danych:
zamiast RSj ˆ WSi z ‡, weryfikowany jest warunek WSj ˆ WSi z ‡.
Moliwa jest rczna weryfikacja niemodyfikowanych danych: Session.lock()
Anomalie wspóbienego wykonania
`
Bdne wyniki przetwarzania wartoci odczytanych z bazy danych w
dwóch rónych transakcjach.
r[x]
c
r[y]
c
interakcja Transakcja
Transakcja
bazy danych RO
bazy danych RO
`
c
interakcja
Bdny stan bazy danych bdcy konsekwencj braku atomowoci
pary operacji odczytu i zapisu.
r[x]
c
Transakcja
bazy danych RO
`
wywietl: x + y
if(x>0) then w[y] else w[z]
x=10
Skrony zapis, fantomy
interakcja
lw[y]
x=0
f c
Transakcja
bazy danych R/W
Wycofanie transakcji
`
W wypadku konfliktów wykrytych w fazie walidacji dla
uniknicia anomalii lost update transakcja biznesowa
musi zosta wycofana.
try {
Transaction t = session.beginTransaction();
// przetwarzanie danych
...
session.flush();
t.commit();
session.close();
}
catch (RuntimeException e) {
t.rollback();
throw e;
}
finally { session.close(); }
Implementacja walidacji transakcji
Do walidacji poprawnoci wykonania wspóbienych
transakcji mog by uywane róne mechanizmy :
` Znaczniki czasowe/numery wersji – struktura wszystkich
danych jest rozszerzona o dodatkowy atrybut systemowy
do skadowania czasu modyfikacji lub numeru wersji
danej zmienianego przez kad modyfikacj. Wad jest
konieczno stosowania tego rozwizania przez
wszystkie transakcje.
` Weryfikacja wartoci danych – polegajca na porównaniu
wartoci danych z fazy odczytu z wartociami danych w
fazie zapisu. Moe dotyczy wszystkich pól obiektu, lub
tylko tych które zostay zmienione przez dan transakcj.
Obiektowe jzyki zapyta
`
`
W platformach O/RM stosuje si jzyki zapyta
wzorowane na jzyku SQL. S one ubosze od
obiektowo relacyjnego jzyka SQL, np. o polecenia
modyfikacji danych lub niemono wywoywania
metod.
Przykadowe jzyki wzorowane na SQL:
`
`
`
H SQL,
EJB SQL,
Linq
EJB SQL – selekcja obiektów
`
EJB SQL pozwala na selekcj obiektów w bazie
danych:
select osoba from Osoba as osoba
where osoba.nazwisko = 'Tarzan'
Warunki selekcji mog si odwoywa jedynie do cech
strukturalnych, a nie do metod, ze wzgldu na to, e
zapytania s w EJB SQL s zamieniane na zapytania
SQL w relacyjnej bazie danych, a te nie maj dostpu
do metod skadowanych po stronie aplikacji.
EJB SQL – wyraenia ciekowe
`
W klauzuli WHERE moliwe jest stosowanie wyrae
ciekowych nawigujcych wzdu powiza midzy
obiektami i w gb atrybutów zoonych.
select o from Osoba as o
where o.szef.adres.miasto.nazwa = 'Pozna'
`
Powysze zapytanie zostanie zmienione na zbiór
zapyta SQL na relacyjnej bazie danych
EJB SQL – poczenia strukturalne
`
Dostpne s poczenia strukturalne, wewntrzne i
zewntrzne (jedynie lewostronne), które zwracaj
kolekcj tablic obiektów.
select zespó, pracownik, dzieci
from Zespó as zespó inner join
Pracownik as pracownik left join fetch
Dzieci as dzieci
` Opcja poczenia fetch powoduj, e dostp do
obiektów poczonych zwizkiem typu 1:N albo
dostp do obiektów lub wartoci skadowanych w
atrybucie wielowartociowym jest realizowane za
pomoc pojedynczego zapytania w bazie danych.
EJB SQL – poczenia dynamiczne
`
Dostpne s równie poczenia dynamiczne
konstruowane na podstawie wyrae logicznych
odwoujcych si do prostych wartoci obiektów lub
do ich tosamoci.
select pracownik, szef
from Pracownik as pracownik inner join
Pracownik as szef
where pracownik.etat = 'Referent'
// równo wartoci
and pracownik.szef = szef
// tosamo obiektów
EJB SQL – odwoanie do OID
`
W warunkach selekcji moliwe jest odwoywanie si
do identyfikatora obiektów:
select pracownik
from Pracownik as pracownik
where pracownik.etat = 'Referent' and
pracownik.szef = 11432
EJB SQL – zapytania polimorficzne
`
W EJB SQL umoliwia wykonywanie zapyta
polimorficznych na wystpieniach klas tworzcych
hierarchi dziedziczenia. Nie ma moliwoci
korzystania z dynamicznego wizania.
select osoba
from Osoba as osoba
// wynik zapytania obejmuje wystpienia wszystkich
// specjalizacji klasy Osoba
select osoba
from Osoba as osoba.class = Student
// wynik zapytania obejmuje wystpienia jedynie
// tych osób, które s studentami
Podzapytania, sortowanie, grupowanie
`
Grupowanie – wynikiem zapyta zawierajcych
operacje projekcji lub grupowania dla wyznaczania
danych statystycznych s wartoci lub obiekty nie
tworzce logicznego modelu danych. Jednak
moliwo przetwarzania duych zbiorów danych po
stronie systemu bazy danych zwiksza radykalnie
wydajno przetwarzania.
select avg(s.rednia), max(s.rednia), count(s)
from Student s
group by s.rok_studiów
Strojenie wydajnoci
`
`
`
Strojenie przez wybór wydajnego mapowanie
struktur obiektowych na relacyjne: wybór strategii
odwzorowania hierarchii dziedziczenia, zwizków i
cech klas
Opónione/natychmiastowe czytanie: dla duych
obiektów danie dostpu do obiektu moe by
realizowane jako odczyt jedynie podzbioru danych
skadajcych si na obiekt. Pozostae czci obiektu
bd doczytane w momencie wystpienia dania
dostpu do nich
Autofetch – inteligentny wybór momentu odczytu
powizanych danych
Oferta platform OR/M
`
O/RM dla jzyka Java
•
•
•
•
•
JDO – Java Data Object
Enterprise Java Bean
Java Persistance API – JPA
Hibernate
Top Link Oracle
`
O/RM dla platformy .NET
•
•
•
•
ADO.NET Entity Framework
Linq
Nhibernate
SODA
Obiektowebazydanych
Wykad prowadzi:
Tomasz Koszlajda
Przykadsystemu
obiektowejbazydanych db4o
•
•
•
•
Projekt Open Source
Uproszczenie architektury systemu bazy danych
Dostpne róne architektury aplikacji
Róne jzyki dostpu: QBE, SODA, Native Query
Language
• Skalowalno
• Wielo–platformowo – Java, .Net, VBA
• Wydajno – dla zapyta specyficznych dla
obiektowych baz danych
Nowaarchitekturaprzetwarzania
ORDB
OODB,O/RM
Aplikacja
Przetworzone
dane
Aplikacja
Przetwarzanie
obiektów
DBMS
Wybrane
obiekty
DBMS
Prostotabudowyaplikacji
// zdefiniowanie klasy
public class Pracownik {
public Pracownik(String nazwisko, String etat,
float placa)
...}
// otworzenie prywatnej bazy danych
ObjectContainer db = Db4o.openFile("BazaDanych");
Pracownik p=new Pracownik("Tarzan","Prezes",25000);
// skadowanie obiektu w bazie danych
db.store(p);
// zamknicie bazy danych
db.close();
Klasa:ObjectContainer
•
•
•
•
•
Klasaobject Container reprezentujesystembazy
danych
Obsugujeonadostpdolokalnego,prywatnegoplikudanych
Wspieratransakcyjneprzetwarzaniedanych
Zarzdzareferencjamidoobiektówprzechowywanychw
baziedanych
Zapewniawydajneprzetwarzaniedanychwbaziedanych,
przezuywanieindeksów
Schematbazydanych
Definicje klas w aplikacji = schemat bazy danych
// zdefiniowanie klasy
public class Pracownik {
public Pracownik(String nazwisko, String etat,
float placa)}
...
Pracownik p=new Pracownik("Tarzan","Prezes",25000);
// Jeeli jest to pierwszy obiekt klasy Pracownik
// skadowany w bazie danych, do schematu bazy danych
// dodawana jest definicja klasy Pracownik
db.store(p);
Hierarchiarozszerze
klas
Wystpienia podklas tworz podzbiór wystpienia
nadklas
class Kierownik extends Pracownik {...}
Kierownik k = new Kierownik("Kowalski",4500.00);
db.store(k);
...
/* Obiektkbdzieosigalnyzarównojakoelementzbioru
KierownikówijakiPracowników*/
// Kowalskiznajdziesiwwynikuzapytania
ObjectSet wynik = db.get(Pracownik.class);
Jzykizapyta
wdb4o
System bazy danych db4o oferuje trzy róne jzyki
zapyta:
• QBE – Query By Example
•
SODA – Simple Object Database Access
•
NativeQuery
Preferowane wasnoci jzyków zapyta:
1. Jzyki do masowego przetwarzania danych
2. Czyste jzyki obiektowe
3. Statyczna weryfikacja typów danych
4. Jednorodno z jzykiem aplikacji
5. Systemowa optymalizacja zapyta
Jzykzapyta
QBE
Prosty jzyk zapyta QBE – Query by Example
Wymaga utworzenia obiektu, który bdzie wzorcem dla
zapytania
// wyszukiwanie obiektów - QBE
Pracownik p=new Pracownik(null,"Prezes",0.0f);
// nie mona pyta o wartoci: null, 0, ””
ObjectSet wynik = db.get(p);
// obiektem wzorcowym moe by klasa
wynik = db.get(Pracownik.class);
Nie umoliwia definiowania zoonych warunków zapyta:
AND, OR, NOT. Konstruktor obiektu musi umoliwi
tworzenie obiektu bez zainicjowanych atrybutów : null, "".
Jzykzapyta
SODA–
SimpleObjectDatabaseAccess
Jzyk SODA umoliwia definiowanie zoonych zapyta w
postaci drzew, których wzami s warunki selekcji.
Funkcjonalno jzyka zapyta jest zaimplementowana w
dwóch podstawowych klasach: Constraint i Query
Ichfunkcjonalnoobejmujenastpujceoperacje:
Query:
• descend
• constrain
• sortBy
• Execute
• orderAscending
Constraint:
• and (Constraint)
• contains
• equal
• greater
• identity
• like
• not
• or (Constraint)
• smaller
Jzykzapyta
SODA–
SimpleObjectDatabaseAccess
Query query=db.query();
// okrelenie klasy zapytania
query.constrain(Pracownik.class);
// okrelenie warunku prostego
Constraint warunek =
query.descend("placa").constrain(5000).greater();
// okrelenie drugiego warunku prostego
// i zoenie warunków
query.descend("etat").constrain("Prezes").or(warunek);
// wykonanie zapytania
ObjectSet wynik=query.execute();
System.out.println(wynik.size());
while(wynik.hasNext()) {
Pracownik znaleziony = (Pracownik) wynik.next();
System.out.println(znaleziony); }
Jzykzapyta
SODA– drzewozapytania
Query query=db.query();
query.constrain(Pracownik.class);
query.descend ("placa").constrain(5000).greater().or
(descend("etat").constrain("Prezes"))
Klasa: Pracownik.class
OR
"paca"
"etat"
greater: 5000
"Prezes"
Jzykizapytawobiektowychbazachdanych
OQL
String oql =
"select * from o in Osoby where p.wiek < 20";
OQLQuery query = new OQLQuery(oql);
Object osoba = query.execute();
Zapytania jako tekst
JDOQL
Query query =
persistenceManager.newQuery(Osoba.class, "wiek < 20");
Collection osoby = (Collection)query.execute();
db4o SODA – C#
Query query = database.Query();
query.Constrain(typeof(Osoba));
query.Descend("wiek").Constrain(20).Smaller();
IList osoby = query.Execute();
Sabocijzykówzapytawbazachdanych
• Braksyntaktycznejisemantycznejweryfikacji
zapyta
wtrakciekompilacjiaplikacji
• Brakwsparciadlarefaktoryzacji
• Brakwsparciadlawielokrotnegouytku:
wywoywaniametod,polimorfizmu,redefinicji
• Nieodpornonaatakitypu„wstrzykiwaniekodu”
• Wymaganydostpdoprywatnychatrybutówklas
• Braksystemowejoptymalizacjizapyta
dladuych
zbiorówdanych
• Brakskalowalnoci
Konstrukcjajzykazapyta
NativeQuery
Warunki logiczne suce do selekcji obiektów s wyraane w obiektowym
jzyku programowania:
prac.Placa() > min
Zoone wyraenia logiczne zapytania s tworzone w caoci w obiektowym
jzyku programowania:
prac.Etat().equals("Prezes") ||
(prac.Placa() > min && prac.Placa() < max)
Mechanizm przesyania obiektów do zapyta:
// pseudo kod
(Pracownik prac){
return prac.Etat().equals("Prezes") ||
(prac.Placa() > min && prac.Placa() < max)}
Jzykzapyta
NativeQuery
GenerycznaklasasystemowaPredicate zabstrakcyjn
metodmatch zwracajcwartocilogiczne.
public abstract class Predicate <ExtentType> {
public <ExtentType> Predicate (){}
public abstract boolean match(ExtentType candidate);}
ObjectSet sp=db.query(new Predicate<Pracownik>()
// redefinicja metody match
{ public boolean match(Pracownik prac) {
return prac.wezNazwisko().equals("Tarzan")
|| (prac.Placa() > 4500
&& prac.Placa() < 10000);};
}
Definicjaanonimowejklasydziedziczcej
);
poklasiePredicate
Jzykzapyta
NativeQuery
WyraeniaciekowewNativeQuery
ObjectSet sp=db.query(new Predicate<Pracownik>()
// dziedziczenie i redefinicja metody match
{ public boolean match(Pracownik prac) {
return
prac.Zespol().nazwa().equals(„Zarzd");
}
);
Jzykzapyta
NativeQuery – C#
Zastosowanietypudanychdelegate
ObjectSet sp=db.query<Pracownik> (
delegate Pracownik p)
// definicjaoperacjiuruchamianejjakodelegate p
{
return
prac.wezNazwisko().equals("Tarzan")
|| (prac.Placa() > 4500
&& prac.Placa() < 10000);
}
);
Usuwanieimodyfikacjaobiektów
Pracownik p=new Pracownik(null,null,10000.00);
ObjectSet wynik = db.get(p);
while(wynik.hasNext()) {
Pracownik prac=(Pracownik)wynik.next();
// usunicie
db.delete(prac); }
...
kopiaobiektu
while(wynik.hasNext()) {
Pracownik prac=(Pracownik)wynik.next();
// modyfikacja obiektu na podstawie jego OID
prac.podniesPlace(1500);
db.store(prac); // uspójnieniekopiizoryginaem
}
Powizaniamidzydanymi
System db4o respektuje zwizki midzy obiektami
zdefiniowanymi w aplikacji
public class Pracownik {
...
private Pracownik szef;
private Set<Pracownik> podwladni;
public Pracownik(String nazwisko,String etat){
this.podwladni= new HashSet<Pracownik>();
}
public void dodajPodwladnego(Pracownik pod) {
this.podwladni.add(pod);
}
}
Skadowaniezoonychobiektów
Metoda set gwarantuje niejawne zapisanie do bazy
danych wszystkich powizanych obiektów
Pracownik p = new Pracownik(
"Tarzan","Prezes",25000);
Pracownik pp1 = new Pracownik(
"Nowak","Sekretarka",2500);
Pracownik pp2 = new Pracownik(
"Kula","Kierwoca",3000);
// Przypisanie szefowi podwadnych
p.dodajPodwladnego(pp1);
p.dodajPodwladnego(pp2);
// Skadowanie obiektów w bazie danych
db.store(p);
// W bazie danych znajd si wszystkie powizane obiekty
Odczytpowizanychobiektów
Zaadowaniedopamicioperacyjnej
obiektujakowynikuzapytaniamoe
wymagadostpudokolejnych
powizanychobiektów.Stosowanes
dwiestrategie:
1. Natychmiastowezaadowanie
wszystkichpowizanychobiektów(caa
bazadanych).
2. Leniwe adowanieobiektównadanie.
Wdb4o moliwejestelastyczne
dopasowaniezbioruadowanychobiektów
zapomocparametruActivationDepth
(domylnawarto=5).
Kaskadoweusuwanie
obiektówzoonych
• Usuniciezbazydanychobiektu,którymapowizania
zinnymiobiektamimoewymagausuniciatych
obiektów– semantykazwizkukompozycji
• Wtymcelu,naleywykonanaklasieobiektu
zoonegometodcascadeOnDelete()
• Gbokokaskadowegousuwaniamoeby
konfigurowanazapomocmetody:set(object,depth)
Indeksywdb4o
• Systemdb4oumoliwiazakadanieindeksówna
wybranychatrybutachobiektówskadowanychw
baziedanych.
• Indeksmusibyutworzonyprzedotwarciem
obiektuObjectContainer/ObjectServer:
// w bazie danych skadowane s obiekty klasy Pracownik
class Pracownik {
String nazwisko;
…
}
Db4o.configure().objectClass(Pracownik.class).
objectField("nazwisko").indexed(true);
Ewolucjaschematubazydanych
• Wdb4oschemattworzdefinicjeklasiichwzajemne
zalenoci:referencjeidziedziczenie.Schematbazydanych
musinadazazmianamiwklasachdefiniowanychw
aplikacjach:dodawanieiusuwanieklas,zmianawasnoci
klas,zmianasiecipowiza
midzyklasami.
• Zmianywschemaciewisirówniezrefaktoryzacjkodu
programów.Wczystoobiektowychbazachdanych
refaktoryzacjajestprostszaniwbazachORiO/RMze
wzgldunajedenspójnyschematbazydanychidefinicjeklas
waplikacjach.
Transakcyjnodb4o
•
•
•
Przetwarzaniedanychwdb4omacharaktertransakcyjny.Niejawnym
rozpoczciemtransakcjijestotwarciebazydanych.Niejawnym
zako
czeniemjestzamkniciabazydanych.
Funkcjonalnobazydanychobejmujejawnezatwierdzanieiwycofywanie
transakcji.
Synchronizacjatransakcjiniejesttransparentnadlaprogramisty.Abyj
zapewninaleyjawniewywoywadodatkowefunkcjesystemowe.
Systemowozapewnionajestwasnoreadcommitted.
String bd = "BazaDanych";
ObjectContainer db = Db4o.openFile(bd);
Pracownik p=new Pracownik("Tarzan","Prezes",25000);
// skadowanie obiektu w bazie danych
db.store(p);
// zatwierdzenie transakcji
db.commit();
Synchronizacjawspóbienychtransakcji
Unikanie anomalii lost update, bdcej konsekwencj optymistycznego
zarzdzania wspóbienoci, moe by realizowane z zastosowaniem
metody systemowej peekPersisted klasy ExtObjectContainer . Metoda
tworzy kopi wartoci wskazanego obiektu, do okrelonego poziomu
zagniedenia, nie powizanej z obiektem w bazie danych. Kopia ta moe
zosta wykorzystana do weryfikacji aktualnego stanu obiektu przed jego
modyfikacj w bazie danych.
Nowak = (Pracownik)result[0]; // odczyt obiektu z bazy danych
Nowak_przed_modyf = Nowak.clone(); // kopia obiektu
... // przetwarzanie obiektu Nowak
Pracownik akt_kopia = oc.ext().peekPersisted(Nowak, 7, true);
// porównaj wartoci, w przypadku rónicy wycofaj transakcj
if (akt_kopia.paca() == Nowak_przed_modyf.paca()) musiby
atomowe
{
oc.commit(); }
else {
oc.rollback(); }
Synchronizacjawspóbienychtransakcji
• Systemdb4oumoliwiasynchronizacjwspóbienychtransakcji
przezjawnezakadanieblokad nacaysystem.
• Blokadysudosynchronizacjidostpudosekcjikrytycznych.
• Blokadysglobalne,alerozrónialneprzeznazwy
czas czekania na
ObjectContainer oc = Db4o.openClient(...);
zwolnienie blokady [ms]
...
if (oc.ext().setSemaphore("LOCK_"+oc.ext().getID(obj),1000)) {
// wejd do sekcji krytycznej
blokada na obiekcie obj
...
// zwolnij blokad (semafor) po zakoczeniu sekcji krytycznej
co.ext().releaseSemaphore("LOCK_"+oc.ext().getID(obj));
}
Architekturasystemudb4o
Architekturaaplikacjidb4o
Pojedyncza aplikacja zintegrowana z plikiem danych
Aplikacja
db4o
Plik danych
// otworzenie bazy danych
String bd = "BazaDanych";
ObjectContainer db = Db4o.openFile(bd);
Pracownik p=new Pracownik("Tarzan","Prezes");
// niejawne zdefiniowanie schematu i
// skadowanie obiektu w bazie danych
db.store(p);
// zamknicie bazy danych
db.close();
Architekturaaplikacjidb4o
Lokalny serwer bazy danych
Aplikacja
Serwer
db4o
db4o
Baza danych
String bd = "BazaDanych";
ObjectServer server = Db4o.openServer(db,0);
// port=0,serwerlokalny
try { // otwarcieklienta
ObjectContainer client=server.openClient();
...
client.close();
}
finally {
server.close();
}
Architekturaaplikacjidb4o
Architektura klient - serwer
Aplikacja
db4o
sie
Serwer
db4o
Baza danych
String bd = "BazaDanych";
// port <> 0, serwer zdalny
ObjectServer server=Db4o.openServer(db,1521);
server.grantAccess("user","password");
// otwarcie klienta
ObjectContainer client = server.openClient(
"localhost",port,user,password );
...
client.close();
server.close();
Wydajno
• BenchmarkOO7
• BenchmarkPolePosition
Barcelona circuit
• 100 zapyta na 30 000 obiektów o 5 poziomach
dziedziczenia
Producenci OODBS
•
•
•
•
•
•
db4objects
Objectivity/DB
ProgressObjectStore Enterprise
Versant ObjectDatabase,FastObject.Net
GemStone/S,GemstoneFacets
EyeDB – GNUOpenSource
Odwzorowanie
obiektowo-relacyjne
Wykad opracowa:
Tomasz Koszlajda
Odwzorowanie obiektowo-relacyjne
`
Odwzorowanie obiektowej architektury systemu
informatycznego w relacyjne struktury danych bazy danych
Aplikacja obiektowa
O/RM Middleware
OQL (HSQL, Linq)
NativeQuery
Wielokt
#typFigury string
#liczbaWierzch integer
+Powierzchnia() : Float
+Przesu(Float, Float)
+DodajWierzch(Punkt)
Logicznymodeldanych
– logikabiznesowa
select *
from Wielokty
insert into wielokty
values (w.typFigury, …)
OdwzorowanieO/R
Relacyjna baza
danych
Wielokty
idWielokta number(9) PK
typFigury varchar(15)
LiczbaWierzch number(3)
wBazieDanych boolean
Fizycznymodeldanych
Architektura przetwarzania O/RM
O-R DB
OO DB
O/RM
Aplikacja
OQL
dane
DBMS
Przetwarzanie
obiektów
Aplikacja
Aplikacja
Przetwarzanie
obiektów
Przetwarzanie
obiektów
QBE
SODA obiekty
NQuery
DBMS
OQL
dane
obiekty
DBMS
Przetwarzanie
danych
Rozwizania O/RM
`
Odwzorowanie modelu obiektowego w relacyjny
`
`
`
`
`
`
`
Odwzorowanie prostych atrybutów
Odwzorowanie OID
Odwzorowanie sieci dziedziczenia klas
Odwzorowanie zwizków midzy klasami
Odwzorowanie atrybutów klas
Zarzdzanie transakcjami
Zarzdzanie obiektami
Dodatkowe atrybuty implementacyjne
`
Oprócz odwzorowania atrybutów informacyjnych w O/RM niezbdne
jest utrzymywanie dodatkowych atrybutów implementacyjnych
Punkt
Wielokt
#typFigury string
#liczbaWierzchoków integer
+Powierzchnia() : Float
+Przesu(Float, Float)
+DodajWierzchoek(Punkt)
#X : Float
[2]
jestWierzchokiem #Y : Float
[3..*] +Kt() : Float
[1]
+Odlego() : Float
+Przesu(Float, Float)
tworzKrawdZ
Wielokty
idWielokta number(9) PK
typFigury varchar(15)
LiczbaWierzchoków number(3)
wBazieDanych boolean
`
Klucze podstawowe i obce
`
Zapewnienie trwaoci danych
`
Znaczniki czasowe
[2]
Punkty
idPunktu number(10) PK
idWielokta number(9) FK
X number(5,2)
Y number(5,2)
wBazieDanych boolean
Fizyczny model danych
Dodatkowe atrybuty implementacyjne
`
Narzdzia O/RM wspieraj korzystanie z atrybutów
implementacyjnych. Na przykad w JPA przewidziano np.
definiowane identyfikatorów obiektów, wersji obiektów lub
atrybutów informujcych o klasie obiektu:
@Entity
public class Osoba implements Serializable {
...
@Version
@Column(name="OPTIMISTIC_LOCK")
public Integer getVersion() { ... }
@Id
@Column(name="id_osoby")
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="SEQ_STORE")
}
Przykadowa definicja klas
`
Dany model klas przetwarzanych przez aplikacje
bazy danych
Osoba
Samochód
+imi : String
[0..*]
+nazwisko : String [1]
+wiek : integer
posiada
+pe : Pe
+nr_rejestracyjny : String
+producent : String
+model : String
+moc : Integer
{non complete, overlapping}
Pracownik
+etat: String
+paca: float
+firma: Sring
Student
+Uczelnia: String
+Kierunek: String
+rokStudiów: integer
Odwzorowanie prostych atrybutów
Przykad odwzorowania klas w schemat relacyjnej bazy
danych za pomoc adnotacji jzyka Java w O/RM EJB3/JPA.
@Entity
@Table(name="t_Osoby")
public class Osoba implements Serializable {
public String imi;
@Column(name="t_imi", nullable = false, length = 25);
public String nazwisko;
@Column(name="t_nazwisko");
...
}
Odwzorowanie OID
W JPA moliwe okrelanie OID obiektów (@id) oraz sposobu generowania
jego wartoci @GeneratedValue. Dostpne s nastpujce sposoby
generowania wartoci OID:
`
`
`
`
TABLE - relacja dedykowana do generowania OID
IDENTITY – atrybut relacji przechowujcej obiekty
SEQUENCE – systemowy sekwenser
AUTO – automatycznie jedno z powyszych
@Entity
@Table(name="t_Osoby")
public class Osoba implements Serializable {
private Long id;
@Id
@Column(name="id_osoby")
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="SEQ_STORE")
public Integer getId() { ... }
Cecha Id nie posiada wszystkich cech OID.
Odwzorowanie zwizków
W JAP moliwe jest odwzorowanie zwizków typu:
` 1:1 - @OneToOne,
` 1:N - @ManyToOne, @OneToMany,
` M:N - @ManyToMany,
Jako zwizków jedno lub dwukierunkowych.
Do okrelenia siy powizania suy opcja Cascade:
` CascadeType.PERSIST – oznacza, e utrwalenie danego obiektu
pociga za sob automatyczne utrwalenie obiektu powizanego.
` CascadeType.MERGE – oznacza, e dla odczonego od bazy
danych obiektu, modyfikacje obiektu powizanego bd
synchronizowane metod MERGE razem z obiektem gównym.
` CascadeType.REMOVE – oznacza, e usunicie danego obiektu
pocignie za sob usunicie obiektu powizanego.
` CascadeType.ALL – wszystkie powysze.
Trwae zwizki s implementowane za pomoc wspódzielonych kluczy
podstawowych (1:1), pary klucz podstawowy, klucz obcy lub za pomoc
relacji poczeniowych.
Odwzorowanie zwizków
Przykad implementacji zwizku 1:N w JPA
@Entity
public class Samochód implements Serializable
{
@ManyToOne(cascade = {CascadeType.REMOVE} )
@JoinColumn(name="id_waciciela")
public Waciciel GetWaciciel() {
return waciciel;
}
...
}
Atrybuty wielowartociowe
Adnotacja @OneToMany suy do implementacji
atrybutów wielowartociowych modelowanych w
aplikacji jako: Collection, List, Set.
@Entity public class Miasto {
...
@OneToMany(mappedBy="miasto")
@OrderBy("Ulica")
public List<Ulica> getUlice() {
...
@Entity public class Ulica {
@ManyToOne
@JoinColumn(name="Id_miasta",nullable=false)
public Miasto getMiasto() { ...
Odwzorowanie sieci dziedziczenia
Znane s nastpujce metody odwzorowania:
`
Osoba
+imi : String
+nazwisko : String
+wiek : integer
+pe : Pe
`
{non complete, overlapping}
Pracownik
+etat: String
+paca: float
+firma: Sring
Student
`
+Uczelnia: String
+Kierunek: String
+rokStudiów: integer
`
Odwzorowanie
hierarchii klas w
pojedyncz tablic
Odwzorowanie
konkretnych klas w
osobne tabele
Odwzorowanie kadej
klasy w osobn tabel
Odwzorowanie klas w
uniwersaln struktur
tabel
Odwzorowanie hierarchii klas w pojedyncz tabel
Osoby
Imi
Nazwisko
Pe
Etat
Paca
Firma
Uczelnia
Kierunek
RokStudiów
jestStudentem
jestPracownikiem
Wasnoci:
• Tabela bdzie przechowywaa duo wartoci
pustych
• Tabela bdzie zajmowa wiksz powierzchni
na dysku
• atwo przetwarzania polimorficznego –
wszystkie dane w jednej tabeli
• Dua wydajno dla przetwarzania
polimorficznego
• Maa wydajno dla przetwarzania
homogenicznego – tabela zawiera
niepotrzebne dane
• Maa wydajno dla modyfikacji struktury
pojedynczych klas
• Trudne utrzymywanie przynalenoci do typów
Dobre dla prostych i paskich hierarchii klas
Odwzorowanie hierarchii klas w pojedyncz tabel
JPA wspiera odwzorowanie klas w jedn tabel. Dla
rozcznych i kompletnych podzbiorów – proste warunki
weryfikacji klasy.
@Entity
@Table(name=„t_Osoby")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn( name="t_pe")
public class Osoby{ ... }
@Entity
@DiscriminatorValue("K")
public class Kobieta extends Osoba { ... }
@DiscriminatorValue("M")
public class Mczyzna extends Osoba { ... }
// transformacja zapyta
select k from Kobieta k ->
select ... from t_Osoby where t_pe='K'
select o from Osoba o ->
select ... from t_Osoby
Odwzorowanie hierarchii klas w pojedyncz tabel
Dla nierozcznych podzbiorów niezbdne jest stosowanie zoonych
warunków weryfikacji klasy.
@Entity
@Table(name=„t_Osoby")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="jestStudentem")
@DiscriminatorColumn(name="jestPracownikiem")
@DiscriminatorFormula(
"case when jestStudentem=True then 0
when jestPracownikiem=True then 1 end")
public class Osoby{ ... }
@Entity
@DiscriminatorValue(0)
public class Student extends Osoba { ... }
@DiscriminatorValue(1)
public class Pracownik extends Osoba { ... }
Odwzorowanie konkretnych klas
w osobne tabele
Wasnoci:
• Jeeli klasa Osoba jest klas
abstrakcyjn
• Zaleno midzy podzbiorami
danych typu complete
Pracownicy
idPracownika
Imi
Nazwisko
Pe
Etat
Paca
Firma
Studenci
idStudenta
Imi
Nazwisko
Pe
Uczelnia
Kierunek
RokStudiów
•
•
•
•
Trudna implementacja
overlapping - konieczno
implementacji wspólnej
dziedziny dla kluczy relacji
Maa wydajno dla
przetwarzania polimorficznego –
dane w rónych tabelach
Dua wydajno dla
przetwarzania homogenicznego
Modyfikacja klasy z podklasami
wymaga modyfikacji schematów
wielu tabel
Dobre dla rozcznych podzbiorów rozszerze klas
Odwzorowanie konkretnych klas
JPA wspiera odwzorowanie konkretnych klas w tabele za pomoc strategii
„Table per class” (Hibernate – „Union class”).
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Osoby{ ... }
@Entity
@Table(name="t_Kobiety")
public class Kobieta extends Osoba { ... }
@Table(name="t_Mczyni")
public class Mczyzna extends Osoba { ... }
// transformacja zapyta
select o from Kobieta k ->
select * from t_Kobiety
select o from Osoba o ->
select ... from t_Kobiety
union
select ... from t_Mczyni
Odwzorowanie kadej klasy w osobn tabel
Wasnoci:
Osoby
idOsoby
Imi
Nazwisko
Pe
Proste odwzorowanie 1:1
• atwo przetwarzania
polimorficznego
• atwe utrzymywanie dla
modyfikacji nadklas i dodawania
podklas
Pracownicy
Studenci
idOsoby FK
idOsoby FK
• Rozmiar struktur proporcjonalny
Etat
Uczelnia
do liczby danych
Paca
Kierunek
• Dua liczba tablic
Firma
RokStudiów
• Maa wydajno przetwarzania
homogenicznego – konieczno
czenia tabel
Dobre dla pokrywajcych si podzbiorów rozszerze
klas i czsto zmieniajcych si definicji klas
•
Odwzorowanie kadej klasy w osobn tabel
JPA wspiera odwzorowanie klasy w osobn tabel za pomoc
strategii „Joined subclass”.
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="t_Osoby")
public class Osoby{ ... }
@Entity
@Table(name="t_Kobiety")
@PrimaryKeyJoinColumn(name="id_osoby")
public class Kobieta extends Osoba { ... }
// transformacja zapyta
select o from Kobieta k ->
select o.*, k.*
from t_Osoby o JOIN t_Kobiety k
ON o.id_osoby = k.id_osoby
Odwzorowanie klas
w uniwersaln struktur tabel
Wasnoci:
` atwo utrzymania dla zmian schematu
` Trudne i mao wydajne przetwarzanie
Dobre dla zoonych aplikacji przetwarzajcych
niezbyt due zbiory danych
Odwzorowanie cech klas
Osoby
+imi : String
+nazwisko : String
+pe : Pe
+liczbaOsób : Integer
+procentKobiet: Integer
`
Moliwe strategie:
`
`
`
Osoby_LiczbaOsób
LiczbOs
Osoby
LiczbaOsób ProcentKobiet
`
Jednokolumnowa i jednowierszowa
tabela dla kadej cechy
Wielokolumnowe i jednowierszowe
tabele dla kadej z klas
Wielokolumnowa i jednowierszowa
tabela wspólna dla wszystkich klas
Wielowierszowa tabela o
generycznym schemacie wspólna
dla wszystkich klas
ZmienneKlasowe
Os_LiczbaOsób Os_ProcentKobiet
…
Optymistyczna synchronizacja transakcji
`
W wikszoci protokoów gwarantujcych poprawno wspóbienego
przetwarzania transakcji implementowane jest pesymistyczne podejcie
do synchronizacji, polegajce na modyfikacji historii konfliktowych
transakcji przez czasowe zawieszenie dziaania jednej z nich.
`
Optymistyczne protokoy synchronizacji transakcji przesuwaj
wykrywanie potencjalnych konfliktów do czasu akceptacji transakcji.
Wykryte konflikty s obsugiwane przez wycofanie jednej z
konfliktowych transakcji.
przepustowo
transakcji
protokó
pesymistyczny
protokó
optymistyczny
liczba
konfliktów
Optymistyczna synchronizacja transakcji
`
Schemat protokou optymistycznej synchronizacji
wspóbienoci zakada przeprowadzenie kadej transakcji
przez trzy kolejne fazy:
`
`
`
`
`
Faza odczytów i lokalnych modyfikacji – potencjalnie duga i
obejmujca interakcje z uytkownikiem transakcji.
Faza walidacji, która zaczyna si w punkcie akceptacji transakcji i
suy do weryfikacji moliwo poprawnego zakoczenia transakcji.
Synchronizowana transakcyjnie faza zapisu danych buforowanych
w PAO do bazy danych.
Zaletami optymistycznej synchronizacji transakcji s:
niewystpowanie w tym protokole zakleszcze transakcji
oraz mniejsze obcienie zasobów DBMS (brak blokad).
Optymistyczna synchronizacja transakcji nie gwarantuje
penej uszeregowalnoci – nie obsuguje anomalii fantomów.
Optymistyczna synchronizacja transakcji
Algorytm fazy walidacji jest nastpujcy [H.T.Kung, J.T.Robinson – 1981]:
Validation (Tj)
<valid := true;
// pocztek sekcji krytycznej
for TNRi from TNRstart+1 to TNRfinish do
if RSj ˆ WSi z ‡ then valid:=false;
if valid then
begin
(write);
TNRj := TNC;
TNC := TNC+1
end> // koniec sekcji krytycznej
if not valid then (rollback);
gdzie:
TNRstart jest najwikszym znacznikiem transakcji w momencie startu
transakcji Tj, TNRfinish jest najwikszym znacznikiem transakcji w
momencie rozpoczcia fazy walidacji, a RS i WS s zbiorami czytanych
i modyfikowanych danych.
Dziaanie algorytmu
Przykad synchronizacji dwóch transakcji T1 i T2.
zapis lokalny
T1
r1[x]
lw1[x]
T2
r1[y]
lw1[y]
zapis do bazy danych
c'1 val1 w1[x] w1[y] c1
r2[x]
TNR(T1) = 10
Walidacja transakcji T2:
` TNRstart+1 = 10, TNRfinish=10
` RS(T2) = {x}, WS(T1) = {x, y},
` skd: RS(T2) ˆ WS(T1) = {x} z ‡
Transakcja T2 musi zosta wycofana.
lw2[x]
c'2 val2
a2
Ulepszona wersja algorytmu
`
T1
Pomijanie nieistotnych konfliktów
r1[x]
lw1[x]
T2
r1[y]
lw1[y]
r2[x]
c'1 val1 w1[x] w1[y] c1
lw2[x]
c'2 val2
a2
r3[x] lw3[x] c‚3 val3
T3
a3
`
Transakcja T3 zostanie wycofana, mimo e dysponuje zatwierdzon
wartoci danej x. Wykryty konflikt jest nieistotny dla poprawnoci
przetwarzania, ale jest przyczyn wycofania transakcji.
`
Modyfikacja protokou OC o rozszerzenie zbioru danych czytanych przez
transakcj o znaczniki koców wspóbienych transakcji. Dla transakcji T3,
zbiór czytanych danych RS3={EOT1, x}.
`
Weryfikowany w fazie walidacji warunek zostanie zmodyfikowany do
postaci: RSij ˆ Wi z ‡, gdzie RSij jest podzbiorem tylko tych danych, które
zostay odczytane po zakoczeniu transakcji Ti. RS13 = ‡, co znaczy, e w
zmodyfikowanym protokole transakcja T3 nie zostanie wycofana.
Zarzdzanie wspóbienoci transakcji
`
W rodowiskach O/RM zalecanym sposobem synchronizacji transakcji s
protokoy zarzdzania wspóbienymi transakcjami wzorowane na
podejciu optymistycznym. Modyfikacje obiektów s wykonywane lokalnie.
Ich zapis do bazy danych, realizowany przez systemow operacj flush,
jest przesuwany na koniec transakcji. W zwizku z tym blokady do zapisu
s utrzymywane krótkoterminowo, tylko na czas walidacji transakcji.
`
Dodatkowe rozwizania majce na celu zwikszenie skalowalnoci
wspóbienego dostpu zakadaj, e transakcje systemu bazy danych nie
obejmuj czasu interakcji z uytkownikiem aplikacji bazy danych. W efekcie
równie blokady do odczytu zakadane przez system bazy danych s
krótkoterminowe. Logiczna transakcja (biznesowa) skada si z kilku
transakcji systemu bazy danych.
Transakcja biznesowa ACID
Transakcja
bazy danych
Blokada do odczytu
interakcja
Transakcja
bazy danych
interakcja
Transakcja
bazy danych
Blokada do zapisu
Zarzdzanie wersjami obiektów
`
`
`
W rodowiskach O/RM do implementacji protokoów
optymistycznej synchronizacji transakcji stosuje si
rozproszony algorytm zarzdzania. Transakcje
biznesowe synchronizuj si ze sob poprzez
weryfikacj w fazie walidacji stanu bazy danych.
Walidacja transakcji odbywa si poprzez kontrol wersji
modyfikowanych danych. Kontrola wersji moe by
realizowana rcznie przez aplikacj lub wspierana
systemowo.
Weryfikacja wersji obiektów odbywa si przez kontrol:
znaczników czasowych, identyfikatora wersji obiektu lub
przez porównanie wartoci obiektu zapamitanych z fazy
odczytu z wartoci odczytan w fazie walidacji.
Synchronizacja transakcji przez aplikacj
Kada interakcja z baz danych jest osobn sesj. Aplikacj musi
zaadowa/przeadowa z bazy danych wszystkie obiekty przetwarzane w
ramach danej interakcji oraz kontrolowa wersje modyfikowanych danych
dla uniknicia anomalii lost update.
// o1 jest wersj obiektu zaadowanego przez poprzedni sesj
session = factory.openSession(); // poczenie z baz danych
Transaction t = session.beginTransaction();
int oldVersion = o1.getVersion(); // zapamitaj numer wersji
session.load(o1, o1.getKey() ); // aduj aktualn wersj
if ( oldVersion != o1.getVersion() ) // sprawd zgodno
throw new StaleObjectStateException();
o1.setProperty("J23");
t.commit(); // wykonanie metody flush – zapis o1 do bazy danych
session.close(); //zamknicie poczenia z baz danych
// cig dalszy transakcji biznesowej
Synchronizacja transakcji przez aplikacj
Rozwizanie charakteryzuje si w ogólnoci niskim poziomem izolacji.
Transakcje biznesowe uzewntrzniaj przed zakoczeniem wprowadzone
modyfikacje danych. Nie wyklucza anomalii: brudny odczyt, brudny zapis,
rozmyty odczyt, skrony zapis i fantomów. Ponadto transakcji biznesowa
zarzdzana przez logik aplikacji nie jest jednostk odtwarzania – nie jest
atomowa.
Dodatkowo rozwizanie to charakteryzuje si duym obcieniem systemu
bazy danych operacjami otwierania i zamykania sesji. W praktyce powinno
by stosowane jedynie dla pojedynczej interakcji z uytkownikiem - jednej
transakcji odczytujcej i jednej modyfikujcej stan bazy danych.
Transakcja biznesowa
r[x]
r[y]
f c
Sesja
Transakcja
bazy danych R/W
lw[y]
interakcja
r[z] f c
Sesja
zapis do
bazy danych
lw[z]
interakcja
Transakcja
f – flush
bazy danych R/W c - commit
f c
Sesja
Transakcja
bazy danych R/W
Systemowa synchronizacja z kontrol wersji
Aplikacja biznesowa jest implementowana przez pojedyncz tzw.
rozszerzon sesj (extended session). Kada interakcja z baz danych jest
osobn transakcj. Ostatnia transakcja sesji jest odpowiedzialna za
zapisanie wszystkich modyfikacji sesji. Kontrola poprawnoci wersji
obiektów jest realizowana automatycznie.
// o1 jest wersj obiektu zaadowanego przez poprzedni transakcj
// w tej samej sesji, w ramach innego poczenia z baz danych
Transaction t = session.beginTransaction();
// uzyskaj nowe poczenie z baz danych z puli aktywnych pocze
o1.setProperty("J23");
t.commit(); // oddanie poczenia z baz danych
// interakcja z uytkownikiem
t = session.beginTransaction(); // ostatnia transakcja w sesji
o2.setProperty("007");
session.flush(); // zrzucenie do bazy danych zapisów z caej sesji
t.commit();
session.close();
Systemowa synchronizacja z kontrol wersji
Rozwizanie charakteryzuje si niekompletnym poziomem izolacji. Nie
wyklucza anomalii: rozmyty odczyt, skrony zapis i fantomów. Jednak
transakcja biznesowa jest atomowa.
Rozwizanie to charakteryzuje si du skalowalnoci w dostpie do
systemu bazy danych. W danym momencie aktywna jest staa i znacznie
mniejsza od liczby wspóbienych uytkowników aplikacji liczba pocze
z baz danych *.
Transakcja biznesowa
zapis do
r[x]
r[y]
c
lw[y]
interakcja
Transakcja
bazy danych RO
r[z] c
Sesja
lw[z]
bazy danych
f c
interakcja
Transakcja
f – flush
bazy danych RO c - commit
*) W DBMS Oracle maksymalnie 4*109 wspóbienych transakcji
Transakcja
bazy danych R/W
RO – read only
RW – read/write
Wasnoci optymistycznej synchronizacji
Adaptacja optymistycznego protokou zarzdzania wspóbienoci
transakcji w platformach O/RM zawiera pewne uproszczenia:
`
Zaimplementowany mechanizm synchronizacji zbudowany jest w
oparciu o pesymistyczne mechanizmy systemów baz danych. Std
przebieg transakcji biznesowych wie si z zakadaniem blokad do
odczytu i zapisu. Blokady do zapisu su do zapewnienia poprawnej
realizacji faz walidacji (dziaania operacji flush) wspóbienych transakcji.
Czas utrzymywania blokad jest znacznie krótszy ni w pesymistycznych
protokoach synchronizacji. Dziki temu, ewentualne zawieszenia
przetwarzania trwa krócej, a prawdopodobiestwo zakleszczenia jest
mniejsze.
`
Kontrola modyfikowanych wersji obiektów ma bardziej ograniczony
zasig ni w protokole Kunga i Robinsona. Warunek weryfikujcy
mono zatwierdzenia transakcji jest zredukowany do sprawdzenia
zbioru modyfikowanych, a nie do wszystkich odczytywanych danych:
zamiast RSj ˆ WSi z ‡, weryfikowany jest warunek WSj ˆ WSi z ‡.
Moliwa jest rczna weryfikacja niemodyfikowanych danych: Session.lock()
Anomalie wspóbienego wykonania
`
Bdne wyniki przetwarzania wartoci odczytanych z bazy danych w
dwóch rónych transakcjach.
r[x]
c
r[y]
c
interakcja Transakcja
Transakcja
bazy danych RO
bazy danych RO
`
c
interakcja
Bdny stan bazy danych bdcy konsekwencj braku atomowoci
pary operacji odczytu i zapisu.
r[x]
c
Transakcja
bazy danych RO
`
wywietl: x + y
if(x>0) then w[y] else w[z]
x=10
interakcja
lw[y]
x=0
f c
Transakcja
bazy danych R/W
Skrony zapis, fantomy
Wycofanie transakcji
`
W wypadku konfliktów wykrytych w fazie walidacji dla
uniknicia anomalii lost update transakcja biznesowa
musi zosta wycofana.
try {
Transaction t = session.beginTransaction();
// przetwarzanie danych
...
session.flush();
t.commit();
session.close();
}
catch (RuntimeException e) {
t.rollback();
throw e;
}
finally { session.close(); }
Implementacja walidacji transakcji
Do walidacji poprawnoci wykonania wspóbienych
transakcji mog by uywane róne mechanizmy :
` Znaczniki czasowe/numery wersji – struktura wszystkich
danych jest rozszerzona o dodatkowy atrybut systemowy
do skadowania czasu modyfikacji lub numeru wersji
danej zmienianego przez kad modyfikacj. Wad jest
konieczno stosowania tego rozwizania przez
wszystkie transakcje.
` Weryfikacja wartoci danych – polegajca na porównaniu
wartoci danych z fazy odczytu z wartociami danych w
fazie zapisu. Moe dotyczy wszystkich pól obiektu, lub
tylko tych które zostay zmienione przez dan transakcj.
Obiektowe jzyki zapyta
`
`
W platformach O/RM stosuje si jzyki zapyta
wzorowane na jzyku SQL. S one ubosze od
obiektowo relacyjnego jzyka SQL, np. o polecenia
modyfikacji danych lub niemono wywoywania
metod.
Przykadowe jzyki wzorowane na SQL:
`
`
`
H SQL,
EJB SQL,
Linq
EJB SQL – selekcja obiektów
`
EJB SQL pozwala na selekcj obiektów w bazie
danych:
select osoba from Osoba as osoba
where osoba.nazwisko = 'Tarzan'
Warunki selekcji mog si odwoywa jedynie do cech
strukturalnych, a nie do metod, ze wzgldu na to, e
zapytania s w EJB SQL s zamieniane na zapytania
SQL w relacyjnej bazie danych, a te nie maj dostpu
do metod skadowanych po stronie aplikacji.
EJB SQL – wyraenia ciekowe
`
W klauzuli WHERE moliwe jest stosowanie wyrae
ciekowych nawigujcych wzdu powiza midzy
obiektami i w gb atrybutów zoonych.
select o from Osoba as o
where o.szef.adres.miasto.nazwa = 'Pozna'
`
Powysze zapytanie zostanie zmienione na zbiór
zapyta SQL na relacyjnej bazie danych
EJB SQL – poczenia strukturalne
`
Dostpne s poczenia strukturalne, wewntrzne i
zewntrzne (jedynie lewostronne), które zwracaj
kolekcj tablic obiektów.
select zespó, pracownik, dzieci
from Zespó as zespó inner join
Pracownik as pracownik left join fetch
Dzieci as dzieci
` Opcja poczenia fetch powoduj, e dostp do
obiektów poczonych zwizkiem typu 1:N albo
dostp do obiektów lub wartoci skadowanych w
atrybucie wielowartociowym jest realizowane za
pomoc pojedynczego zapytania w bazie danych.
EJB SQL – poczenia dynamiczne
`
Dostpne s równie poczenia dynamiczne
konstruowane na podstawie wyrae logicznych
odwoujcych si do prostych wartoci obiektów lub
do ich tosamoci.
select pracownik, szef
from Pracownik as pracownik inner join
Pracownik as szef
where pracownik.etat = 'Referent'
// równo wartoci
and pracownik.szef = szef
// tosamo obiektów
EJB SQL – odwoanie do OID
`
W warunkach selekcji moliwe jest odwoywanie si
do identyfikatora obiektów:
select pracownik
from Pracownik as pracownik
where pracownik.etat = 'Referent' and
pracownik.szef = 11432
EJB SQL – zapytania polimorficzne
`
W EJB SQL umoliwia wykonywanie zapyta
polimorficznych na wystpieniach klas tworzcych
hierarchi dziedziczenia. Nie ma moliwoci
korzystania z dynamicznego wizania.
select osoba
from Osoba as osoba
// wynik zapytania obejmuje wystpienia wszystkich
// specjalizacji klasy Osoba
select osoba
from Osoba as osoba.class = Student
// wynik zapytania obejmuje wystpienia jedynie
// tych osób, które s studentami
Podzapytania, sortowanie, grupowanie
`
Grupowanie – wynikiem zapyta zawierajcych
operacje projekcji lub grupowania dla wyznaczania
danych statystycznych s wartoci lub obiekty nie
tworzce logicznego modelu danych. Jednak
moliwo przetwarzania duych zbiorów danych po
stronie systemu bazy danych zwiksza radykalnie
wydajno przetwarzania.
select avg(s.rednia), max(s.rednia), count(s)
from Student s
group by s.rok_studiów
Strojenie wydajnoci
`
`
`
Strojenie przez wybór wydajnego mapowanie
struktur obiektowych na relacyjne: wybór strategii
odwzorowania hierarchii dziedziczenia, zwizków i
cech klas
Opónione/natychmiastowe czytanie: dla duych
obiektów danie dostpu do obiektu moe by
realizowane jako odczyt jedynie podzbioru danych
skadajcych si na obiekt. Pozostae czci obiektu
bd doczytane w momencie wystpienia dania
dostpu do nich
Autofetch – inteligentny wybór momentu odczytu
powizanych danych
Oferta platform OR/M
`
O/RM dla jzyka Java
•
•
•
•
•
JDO – Java Data Object
Enterprise Java Bean
Java Persistance API – JPA
Hibernate
Top Link Oracle
`
O/RM dla platformy .NET
•
•
•
•
ADO.NET Entity Framework
Linq
Nhibernate
SODA