Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Objektové databáze a OQL

Podobné prezentace


Prezentace na téma: "Objektové databáze a OQL"— Transkript prezentace:

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

4

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

74

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ý


Stáhnout ppt "Objektové databáze a OQL"

Podobné prezentace


Reklamy Google