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