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

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

Objektové databáze a OQL Jakub Kotrla Ondřej Kmoch Vlastimil Menčík.

Podobné prezentace


Prezentace na téma: "Objektové databáze a OQL Jakub Kotrla Ondřej Kmoch Vlastimil Menčík."— 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 ODMG 3.0 v roce 2000 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 RozhraníTřídaLiterá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 Object_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 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 { enumLock_Type(read, write, upgrade); voidlock(in Loct>Type mode raises(LockNotGtranted); booleantry_lock(in Lock_Type mode); booleansame_as(in Object anObject); Objectcopy(); voiddelete(); }

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á –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 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 { stringstreet_name; shorthouse_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 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 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 … ) 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 Y inverse Z attribute set Y; void form_Y(in X target) raises (IntegrityError); void drop_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 extents; attribute list keys; relationship Classextender inverse Class::extensions; relationship set extenions inverse Class::extender; }; interface Operation : MetaObject, Scope{ relationship list signature inverse Parameter::operation; relationship Typeresult inverse Type::operations; relationship list 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í 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 Konflikty zámků nastavený zámek na objektu žádnýsharedexclusiveupgrade sharedok X exclusiveokXXX upgradeok XX 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 –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 degrees; relationship Person spouse inverse Person::spouse; relationship set children inverse Person::parents; relationship list parents inverse Person::children; boolean marriage(in string person_name) raises (NoSuchPerson); }; };

49 Příklad ODL extent –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 C++ kompilátor Soubory zdrojového kódu implementace Linker ODMS runtime Spustitelná aplikace Databáze Metadata

55 ODMG a C++ (2.) příklady –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ě ODMGJava objekt atomický literálprimitivy (string, int, …) strukturovaný literálnejsou strukturatří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 –100% použit jazyk Java Java ODL –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 O 2 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 > 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... 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) from e in Globe.employees

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 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 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 from c in TheCompanies where exists e in c.employees : e.age < 23 univerzální select c.name from c in TheCompanies 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 > a metody s parametry: select e from e in Globe.employees 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 Jakub Kotrla Ondřej Kmoch Vlastimil Menčík."

Podobné prezentace


Reklamy Google