Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Objektové databáze a OQL
Jakub Kotrla Ondřej Kmoch Vlastimil Menčík
2
Obsah ODMG objektový model jazyky pro specifikace objektů
mapování modelu do programovacích jazyků OQL
3
Historie ODMG počátky práce v roce 1991 ODMG 1.0 v roce 1993
v roce 2001 pracovní skupina rozpuštěna
5
Objektový model ODMG vychází z objektového modelu OMG
definuje, co to jsou objekty, literály, typy, atributy, operace, vztahy apod. designér aplikace používá objektový model ODMG k vytvoření objektového modelu aplikace výsledkem je ODMS schéma pro konkrétní aplikaci (v ODL)
6
Základy objektového modelu
primitiva object, literal jsou nějakého typu objekt (objektový typ), instance typu literál (literálový typ), literál („proměnná“) rozsah stavů objektu – množina vlastností (atributy a vztahy k jiným objektům) stav objektu - hodnoty vlastností chování objektu - množina operací
7
Typy – externí specifikace typu
jen jedna popisuje typ zvenku pro uživatele typu implementačně nezávislá definuje vlastnosti, operace a výjimky, které mohou operace vyhodit definice rozhraní (interface) – operace objektového typu definice třídy (class) – stav a operace objektového typu definice literálu (literal) – stav literálového typu
8
Rozhraní, třída, literál
Chování - operace Stav -vlastnosti
9
Typy – implementace typu
jedna či více reprezentace - mapování vlastností objektu do programovacího jazyka metody - těla/kód funkcí interní metody mapování literálových typů
10
Dědičnost ISA vztah jen chování objektu – předek může být jen rozhraní
vícenásobná polymorfismus interface Prijimac {…}; interface Vysilac {…}; class Vysilacka : Prijimac, Vysilac {…};
11
EXTEND dědění stavu i chování objektu
jednoduchá dědičnost mezi dvěma třídami class Osoba {…}; class Zamestnanec : Osoba {…};
12
Extent typu množina všech instancí daného typu v rámci jednoho ODMS
je udržována volitelně reflektuje dědičnost typů (Extent podtypu je podmnožina extentu typu)
13
Klíče vlastnost jednoznačně určující instanci
analogie z relačního modelu jednoduché (single) - jedna vlastnost složené (compound) – množina více vlastností
14
Hierarchie typů Literal_type
Atomic_literal (short, long long, boolean, char…) Collection_literal (set<>, bag<>, list<>, array<>, dictionary<>) Structured_literal (date, time, timestamp, interval, structure<>) Atomic_object – definovány uživatelem Object_type Collection_object (Set<>, Bag<>, List<>, Array<>, Dictionary<>) Structured_object (date, time, timestamp, interval)
15
Objekty vytváření pomocí factory interface - new (součást mapování jazyka) základní rozhraní: interface Object { enum Lock_Type(read, write, upgrade); void lock(in Loct>Type mode raises(LockNotGtranted); boolean try_lock(in Lock_Type mode); boolean same_as(in Object anObject); Object copy(); void delete(); }
16
Objekty - identifikace
každý objekt má svůj identifikátor, jedinečný v rámci ODMS stálý – během života objektu se nezmění generován ODMS Používán v operaci Object::same_as() objekt může mít i jméno – označení pro programátora/uživatele
17
Životnost objektů Přechodná Trvalá nezávisí na typu objektu
pouze v paměti, zajišťuje runtime programovacího jazyka Trvalá v paměti a trvalém úložišti, zajišťuje ODMS nezávisí na typu objektu
18
Atomic_object uživatelem definovaný typ ODMG nemá žádný vestavěný
19
Collection_object kolekce prvků (atomický typ, jiná kolekce či literálový typ) prvky musí být stejného typu vytváření new, new_of_size procházení iterátorem metody insert_element, remove_element apod. metody query, select apod. pro výběr prvků pomocí OQL
20
Collection_object (2.) set<> - množina
bag<> - umožňuje duplicity list<> - setříděná posloupnost array<> - dynamické pole dictionary<> - množina párů klíč-hodnota
21
Structured_object implementuje základní rozhraní - Object Date Time
Timestamp Interval Mnoho konstruktorů a formátovacích metod
22
Literály nemají jednoznačný identifikátor – vždy předávány hodnotou
operace equal – obdoba same_as u objektů oba atomické a mají stejnou hodnotu oba stejná kolekce a stejné (equal/same_as) prvky se smyslu dané kolekce oba struktura stejného typu, shodná (equal/same_as) ve všech prvcích
23
Atomic_literal jsou součástí OMG IDL
long long long short unsigned long unsigned short float double boolean octet char string enum jsou součástí OMG IDL jsou mapovány do programovacího jazyka jako typ či zvláštní třída enum: attribute enum gender {male,female}
24
Collection_literal obdoba Collection_object ale nemá identifikátor objektu (object idetinfier) prvky mohou být objekty i literály set<>, bag<>, list<>, array<>, dictionary<>
25
Structured_literal struktura, položkou může být objekt i literál
vestavěné: date time timestamp interval struct Address { string street_name; short house_no; };
26
Stav objektu - atributy
objekty nebo literály class Person { attribute short age; attribute enum gender {male, female}; attribute Address home_address; attribute set<Phone_no> phones; };
27
Stav objektu - vztahy pouze binární – mezi dvěma objekty
definovány pomocí traversal path vždy v páru pojmenované class Teacher { relationship set<Course> teaches inverse Course::is_taught_by; }; class Course { relationship Teacher is_taught_by inverse Teacher::teaches; };
28
Stav objektu – vztahy (2.)
kardinalitu určuje typ (… set<Course> … ) atribut objektového typu není vztah (není zaručena integrita) integritu zajišťuje ODMS travesal path není ukazatel jejich implementace je schována do operací: form/drop add/remove
29
Stav objektu – vztahy (3.)
relationship X Y inverse Z attribute X Y; void form_Y(in X target) raises (IntegrityError); void drop_Y(in X target) raises (IntegrityError); relationship set<X> Y inverse Z attribute set<X> Y; void form_Y(in X target) raises (IntegrityError); void add_Y(in X target) raises (IntegrityError); void remove_Y(in X target) raises (IntegrityError);
30
Chování objektu - operace
množina operací jméno jména a typy argumentů (a modifikátory in/out) jméno a typ návratové hodnoty jména výjimek, které může vyhodit operace je definována pro právě jeden typ žádné globální operace žádné operace nad dvěma a více typy
31
Chování objektu – operace (2.)
jméno operace musí být jedinečné v rámci typu různé typy mohou mít stejně pojmenované operace – přetížení jmen výběr použité operace se řídí pouze typem prvního argumentu (single dispatch model) ODMG nedefinuje paralelní běh operací
32
Výjimky operace mohou vyhodit výjimku zpracuje ji exception handler
jako argument dostane objekt exception s podrobnějšími informacemi funguje polymorfismus Runtime uvolní paměť a zruší započaté transakce
33
Metadata informace o trvalých objektech popisují schéma ODMS
struktura úložiště objektů zpřístupňuje trvalé objekty uložena v ODL Schema Repository (obdoba IDL Interface Repository)
34
Metadata (2.) Součástí ODMG je popis rozhraní definujících vnitřní strukturu ODL Schema Repository Scope Visitor MetaObject Module Operation Exception Constant Property (Attribute, Relationship) Type (Interface, Class, Collection, ScopedType, Enumeration, ...) Specifier, Member, UnionCase, Direction Operand
35
Metadata (3.) interface Class : Interface { attribute list<string> extents; attribute list<string> keys; relationship Class extender inverse Class::extensions; relationship set<Class> extenions inverse Class::extender; }; interface Operation : MetaObject, Scope{ relationship list<Parameter> signature inverse Parameter::operation; relationship Type result inverse Type::operations; relationship list<Exception> exceptions inverse Exception::operations; };
36
Obsah druhé části transakce a zámykání jazyky pro specifikace objektů
mapování standardu do programovacích jazyků C++ a Java ODMG a JDO objektově-relační mapování příklad
37
Konkurenční přístup řešeno pomocí zamykání implicitní explicitní
datábázový stroj se sám stará o zamykání čtených a zapisovaných objektů netýká se zámků pro změny explicitní zamknutí lze vynutit pomocí konstrukcí lock a try_lock
38
Druhy zámků sdílený zámek (shared) exkluzivní zámek (exclusive)
zámek pro změny (upgrade) zaveden kvůli prevenci uváznutí
39
nastavený zámek na objektu
Konflikty zámků nastavený zámek na objektu žádný shared exclusive upgrade ok X požadovaný zámek
40
Uvolňování zámků všechny zámky jsou standardně automaticky uvolněny po ukončení transakce (commit nebo abort) tato strategie je v souladu s definicí izolace úroveň 3 podle standardu SQL-92 nemůže dojít k těmto jevům dirty reads nonrepeatable reads phantoms
41
Transakce používají právě zámky
jakákoli operace nad perzistentními daty musí být spojena s aktivní transakcí zaručení ACID mezi transakcemi (ne nutně mezi procesy a vlákny) distribuované transakce převzato ze standardu ISO XA používáno pouze transakčními monitory implementace nemusí podporovat distribuované transakce
42
Rozhraní pro transakce
interface TransactionFactory { Transaction new(); Transaction current(); } interface Transaction { void begin() raises(TransactionInProgress, DatabaseClosed); void commit() raises(TransactionNotInProgress); void abort() raises(TransactionNotInProgress); void checkpoint () raises(TransactionNotInProgress); void join() raises(TransactionNotInProgress); void leave() raises(TransactionNotInProgress); boolean isOpen(); }
43
Práce s transakcemi begin = nová transakce není otevřená, je ji nutno explicitně otevřít checkpoint = jsou uloženy změny, ale transakce zůstává otevřená zámky nejsou uvolněny join = umožňuje připojit proces k cizí aktivní transakci jiného procesu nebo vlákna taková transakce potom nezajišťuje izolaci mezi těmito procesy (vlákny)
44
Jazyky pro specifikace objektů
Object Definition Language (ODL) jazyk pro definice objektů v databázi Object Interchange Format (OIL) specifikace formátu pro výměnu objektů mezi různými databázemi
45
ODL úplně popisuje objektový model ODMG
není to programovací jazyk, jen jazyk pro definice nezávislý na programovacím jazyce vychází z IDL (Interface Definition Lang.) byl navržen jako jednoduše a rychle implementovatelný
46
ODL jako rozšíření IDL IDL ODL syntaxe vychází z C++
vytvořen pro potřeby projektu CORBA popisuje objektový model OMG ODL rozšíření konstruktů, aby pokryl celý objektový model ODMG (viz. dále srovnání objektového modelu ODMG a OMG)
47
Mapování ODL ve standardu je navrženo mapování z jiných jazyků do ODL
například z SQL99 z ODL do jiných jazyků Java, C++, SQL99, Smalltalk ODL
48
Příklad ODL module Example1 { class Person ( extent persons) { exception NoSuchPerson{}; attribute string name; attribute struct Address { string street; unsigned short number; string city_name} address; attribute set<string> degrees; relationship Person spouse inverse Person::spouse; relationship set<Person> children inverse Person::parents; relationship list<Person> parents inverse Person::children; boolean marriage(in string person_name) raises (NoSuchPerson); }; };
49
Příklad ODL extent ODL definuje celé rozhraní objektu
je to množina všech objektů daného typu v databázi (často následně použito v OQL) ODL definuje celé rozhraní objektu třídy, atributy, metody, výjimky definice není závislá na programovacím jazyce
50
OIL byl to pokus, popsat objektová data nezávisle na platformě
vytvořen pro standardní export a import dat databáze dnes asi nejméně používaná věc z celého standardu
51
Příklad OIL Sarah Person{Name “Sarah”, PersonAddress{Street “Willow Road”, City “New York”, Phone {CountryCode 1, AreaCode 415, PersonCode 1234}}}
52
OIL jméno objektu musí být unikátní v celém objektu OIF
cyklické použití jména není dovoleno relace mezi objekty jsou popsány pomocí jmen umožňuje fyzicky seskupovat objekty tzn. aby byly fyzicky uloženy blízko sebe v DB (clustering) nemusí být implementací podporováno
53
Mapování ODMG popisuje použití standardu v různých programovací jazycích C++ Java Smalltalk
54
ODMG a C++ Deklarace v ODL ODL preprocesor
Vygenerované hlavičkové soubory Soubory zdrojového kódu implementace Databáze Metadata C++ kompilátor ODMS runtime Linker Spustitelná aplikace
55
ODMG a C++ (2.) příklady nejpropracovanější mapování v celém standardu
definuje třídy pro kolekce definuje třídu string definuje třídy pro přístup k metadatům (jak zjistit popis o jednotlivých třídách definovaných v DB) nejpropracovanější mapování v celém standardu
56
ODMG a Java „Programátor musí věřit, že existuje pouze jeden jazyk pro programování i pro vyjádření operací nad databází.“
57
ODMG a Java (2.) je použit objektový model z Javy
je plně zahrnuta syntaxe jazyka Java automatické uložení objektu do databáze, pokud se na něj odkazuje jiný perzistentní objekt (perzistence řízená dosahem)
58
ODMG API definováno v balíku org.odmg
každá implementace definuje vlastní objekt Implementation lze používat zároveň více implementací získání implementace by měl být jediný implementačně závislý kód v aplikaci
59
Rozhraní ODMG v Javě Implementation Transaction Database
60
Objektový model ODMG v Javě
Java objekt atomický literál primitivy (string, int, …) strukturovaný literál nejsou struktura třída se stejnými atributy
61
Příklad relace v Javě (1:m)
public class Department { Dcollection employees; } public class Employee { Department dept; }
62
Poznámky rozhraní a abstraktní třídy nelze uložit (nemohou být perzistentní) standard jinak pojmenovává kolekce v podstatě se jedná o kolekce z Javy přidány některé dílčí metody, nebo přejmenovány, aby vyhovovaly standardu objekt extent a klíče nejsou v Javě zatím podporovány nelze se na ně v kódu odkazovat
63
Výjimky standardní mechanismus jazyka Java
výjimky jsou potomky ODMGException
64
Souhrnně Java OML Java ODL 100% použit jazyk Java
standardní definice tříd v jazyce Java (mohou být generovány z ODL souboru jako v C++)
65
Java ODL definuje mapování ODL typů na typový systém Javy
operace v ODL jsou metody v Javě
66
Java OML a perzistence objektů
pro svázání objektů s databází používá property file (soubor vlastností) persistent=capable transient=[true|false] i jednotlivé atributy mohou být transientní objekt je vymazán z databáze automaticky pokud není pojmenován, nebo se na něj neodkazuje jiný perzistentní objekt
67
Perzistence objektů kořenové objekty
jsou to pojmenované objekty explicitně ukládané do databáze od nich začíná perzistence přidružených objektů jméno musí být unikátní v celé databázi
68
Transakce ukládání a mazání objektů z databáze probíhá uvnitř asociované transakce
69
Java OQL OQL je z Javy plně dostupné rozhraní OQLQuery
70
Další vývoj ODMG poslední verze 3.0 z roku 2000
dnes zastaven vývoj tohoto standardu vychází z něj JDO (Java) a mnoho dalších prací na téma „perzistentní objekty“ byl použit jako základ pro objektově-relační mapování (např. OJB)
71
Rozdíly v JDO je těsně spojeno s platformou Java
plně podporuje distribuované transakce plně podporuje EJB nemá OQL obsahuje pouze značně zjednodušený dotazovací jazyk JDOQL, který nepodporuje komplexní dotazy jako OQL jednoduše a rychle implementovatelné!
72
Příklad ObjectRelational Bridge (OJB)
opensource projekt komunity Apache vytváří mezivrstvu, která ukládá objektová data do relační databáze vlastně vytváří dojem objektové databáze kromě JDO plně implementuje ODMG 93 (i s OQL) viz.
73
Příklad uložení objektu
namapujeme třídu Product do tabulky v Oraclu
75
Mapování třídy do tabulky
76
Připojení do databáze
77
Manipulace s objektem
78
Výsledek
79
Generování deskriptorů
80
Generování deskriptorů (2.)
AndroMDA = ucelené integrované řešení s plnou podporou pro OJB
81
Objektově-relační mapování
lze jednoduše využít relační platformy lze v aplikaci použít jak relační přístup (SQL), tak objektový přístup (OQL) nutno generovat mapování (lze automatizovat například z UML) je explicitně vidět, kde jsou objekty uloženy
82
Object Query Language in O2
Vlastimil Menčík
83
Je to další X-SQL? podobná syntax, ve standardu dokonce nadmnožina SQL
dotazy nad jiným typem entit objektově orientovaný, ne objektově relační není to extender obohacující SQL o objekty založen na objektovém modelu ODMG
84
Select … from … where select e from e in Globe.employees
where e.salary > 10000 select: definuje strukturu výsledku dotazu from: seznam kolekcí, na kterých se dotaz vyhodnocuje where: boolský výraz filtrující výsledek
85
... from e in Globe.employees …
Globe.employees je kolekce, ne tabulka proměnná e reprezentuje elementy kolekce a umožňuje přístup k atributům … where e.salary > 10000
86
Spojení select e from e in Globe.employees, c in Globe.clients
where e.name = c.name select ord.what from cl in Globe.clients, ord in cl.order where cl.name = “Smith”
87
Struktura výsledku (1) Výraz za select určuje strukturu a typ výsledku. select e.name, e.position, e.salary from e in Globe.employees je vlastně select struct( name: e.name, position: e.postition salary: e.salary)
88
Struktura výsledku (2) Záznamy lze i vnořovat:
select struct (employee: struct (name: e.name, age: e.age), salary: e.salary) from e in Globe.employees where e.position = “Reporter” and e.age > 22
89
Distinct typ výsledku je set
select distinct e.salary from e in Globe.employees where e.position = “Reporter” typ výsledku je set bez distinct je typ výsledku bag, tedy multimnožina
90
Group by (1) select * from e in Globe.employees group by e.salary
sémantika stejná jako v SQL výsledek je typu: bag (struct (salary: real, partition: bag (struct (e:Employee)))) partition je kolekce odpovídající příslušné třídě rozkladu
91
Group by (2) Na třídy rozkladu lze aplikovat agregační funkce a filtrovat je pomocí klauzule having. select e.salary, number: count (partition) from e in Globe.employees group by e.salary having count (partition) > 1
92
Order by Výsledek je typu list, tedy je to uspořádaná kolekce.
select e from e in Globe.employees order by e.name, e.age Výsledek je typu list, tedy je to uspořádaná kolekce.
93
Množinové operátory na typech bag a set jsou definovány operátory union, intersect a except sémantika stejná jako v SQL dále je definován operátor pick, který z kolekce vybere jeden její prvek (Axiom výběru)
94
Kvantifikace existenční: select c.name univerzální
from c in TheCompanies where exists e in c.employees : e.age < 23 univerzální where forall e in c.employees : e.age < 23
95
Define výsledek dotazu lze pojmenovat
define MyEmployees as select e from e in Global.employees where e.name like “Sp*” lze použít v dotazech na místě kolekce vzdálená podobnost s view
96
Volání metod lze všude, kde typově odpovídá návratová hodnota metody
volání bezparametrické metody: select e from e in Globe.employees where e.salary > 10000 a metody s parametry: where e.salary_by_hours(40) > 2000
97
Shrnutí výsledek každého dotazu je typu, který náleží do modelu ODMG a tedy lze nad ním také pokládat dotazy operátory lze libovolně skládat, pokud jsou dodrženy typy operandů OQL je funkcinonální jazyk OQL není, na rozdíl od dnešního standardu SQL, turingovsky úplný
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.