1 / 97

Objektové databáze a OQL

Objektové databáze a OQL. Jakub Kotrla Ondřej Kmoch Vlastimil Menčík. Obsah. ODMG objektový model jazyky pro specifikace objektů mapování modelu do programovacích jazyků OQL. Historie ODMG. počátky práce v roce 1991 ODMG 1.0 v roce 1993 ODMG 3.0 v roce 2000

curt
Download Presentation

Objektové databáze a OQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. 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)

  5. 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í

  6. 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

  7. Rozhraní, třída, literál Rozhraní Třída Literál Chování - operace Stav -vlastnosti

  8. 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ů

  9. 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 {…};

  10. EXTEND • dědění stavu i chování objektu • jednoduchá dědičnost mezi dvěma třídami • class Osoba {…};class Zamestnanec : Osoba {…};

  11. 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)

  12. 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í

  13. 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)

  14. Objekty • vytváření pomocí factory interface - new (součást mapování jazyka) • základní rozhraní:interface Object {enumLock_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();}

  15. 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

  16. Ž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

  17. Atomic_object • uživatelem definovaný typ • ODMG nemá žádný vestavěný

  18. 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

  19. 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

  20. Structured_object • implementuje základní rozhraní - Object • Date • Time • Timestamp • Interval • Mnoho konstruktorů a formátovacích metod

  21. 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

  22. 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} Atomic_literal

  23. 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<>

  24. 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;};

  25. 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;};

  26. 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;};

  27. 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

  28. Stav objektu – vztahy (3.) • relationship X Y inverse Zattribute X Y;void form_Y(in X target) raises (IntegrityError); void drop_Y(in X target) raises (IntegrityError); • relationship set<X> Y inverse Zattribute set<X> 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);

  29. 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

  30. 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í

  31. 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

  32. 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)

  33. 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

  34. 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;};

  35. 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

  36. 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

  37. Druhy zámků • sdílený zámek (shared) • exkluzivní zámek (exclusive) • zámek pro změny (upgrade) • zaveden kvůli prevenci uváznutí

  38. Konflikty zámků požadovaný zámek

  39. 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

  40. 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

  41. 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();}

  42. 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)

  43. 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

  44. 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ý

  45. 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)

  46. 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

  47. Příklad ODL module Example1 {classPerson( extentpersons) {exception NoSuchPerson{}; attribute string name;attributestruct Address {string street;unsignedshort number;string city_name} address;attributeset<string> degrees;relationship Person spouseinverse Person::spouse;relationshipset<Person> childreninverse Person::parents;relationshiplist<Person> parentsinverse Person::children;boolean marriage(instring person_name)raises (NoSuchPerson); };};

  48. 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

  49. 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

More Related