|
OODBS sa dnes dá charakterizova? ako absencia univerzálneho dátového modelu. V sú?asnosti sa implementácia tohto modelu iba h?adá a táto cesta nie je jednoduchá.
Referát z predmetu objektovo orientované databázové systémy Základná myšlienka OODBS OODBS sa dnes dá charakterizova? ako absencia univerzálneho dátového modelu. V sú?asnosti sa implementácia tohto modelu iba h?adá a táto cesta nie je jednoduchá. Základnou myšlienkou objektovo orientovaných databáz je priblíenie dát blišie k programátorovi. V rela?nom databázovom systéme sa prístup k dátam realizuje prostredníctvom ur?itého rozhrania, teda napr. JDBC, SQL.. Naopak, OODBS nám umo?uje pouíva? vlastné štruktúry a objekty v programe a jednoducho ich spravi? perzistentnými. K takto vytvoreným objektom môme následne kedyko?vek pristupova? a nahra? ich z uloeného stavu do beiaceho programu. Programátorovi je blišie pracova? s dátami, ktoré majú hierarchickú štruktúru. Táto štruktúra vernejšie opisuje obraz reálneho sveta. Manifest Objektovo-Orientovaných databáz O základných vlastnostiach, ktoré by takýto systém mal sp??a? pojednáva tzv. Manifest Objektovo-Orientovaných databáz. Má za úlohu definova? takýto systém a popisuje jeho hlavné znaky a charakteristiky, ktoré musí sp??a? aby bol plnohodnotným objektovo-orientovaným databázovým systémom. Sú rozdelené do týchto troch skupín: povinné, volite?né a otvorené. Medzi povinné patria: OODBS má podporova? komplexné objekty(mnoina, záznam, zoznam), z ktorých môu by? následne odvodené ?alšie ešte komplexnejšie typy. OODBS má podporova? identitu objektov? ?ie rozdiel medzi identickos?ou (dva objekty sú rovnaké, ?o sa týka dát) a rovnos?ou (sú rovnakým objektom). V tomto systéme je moné to, e jeden objekt zdie?a spolo?ný komponent ostatných objektov. Ak máme napr. ?lenov rodiny majúcich rovnakého potomka, tento objekt nemusí fyzicky existova? dvakrát. V OODBS sa majú da? zapuzdrova? objekty? myšlienka modularity ? je potrebná na štruktúrovanie zloitých aplikácií. V sú?asnosti predstavuje trend, ktorý prispieva k vyššej efektivite práce a škálovate?nosti daného projektu. Táto zapúzdrenos? tie zabezpe?uje logickú nezávislos? dát ? zmena implementácie si nevyaduje zmenu programov pracujúcich s týmto typom.Objekt sa musí sklada? z dvoch ?astí: interface a implementácia. Implementácia z dátovej a procedurálnej ?asti. Triedy alebo typy v OODBS majú dedi? vlastnosti svojich predkov? táto metóda má výhodu pri modelovaní, pretoe dovo?uje dos? verne popísa? vonkajší svet a tie umo?uje vyvíja? zdie?ané špecifikácie a implementácie. Pouívané hlavne pri aplikáciách zaloených na komponentoch. Existujú štyri typy dedi?nosti ? substitution, inclusion, constraint, a specialization. OODBS má podporova? prekrývanie, pre?aovanie a oneskorené pridávanie operácií. Prekrývanie(overriding) znamená, e implementácia je zadefinovaná viackrát v závislosti od typu parametrov. Pre?aovanie (overloading) znamená, e jej meno potom odkazuje na viac metód s rovnakým názvom.Oneskorené priradenie (late binding) ? znamená, e systém nemôe priradi? mená operácii ich kódom po?as prekladu, ale a za behu programu. OODBS má by? výpo?tovo úplný? znamená to to?ko, e sa ?ubovo?ná vypo?ítate?ná funkcia sa dá popísa? pouitím DML (Data Manipulation Language). DML sa pouíva na vkladanie, update a mazanie dát v existujúcej dátovej schéme. Je ur?ený na neprocedurálne získavanie ?asti dát spadajúcich pod podmienky vyh?adávania pouívate?a. DML program je konštruovaný zoznamom sekcií, z ktorej kadá hovorí programu, ?o bude vykonáva?. Príklad DML: section ::= INCREMENTAL DATA TESTING SECTION ENDSECTION | LOOP TRANSFORMATION SECTION ENDSECTION | CODE GENERATION SECTION ENDSECTION OODBS majú vedie? spravova? ve?mi ve?ké databázy? zah??a správu indexov, clustrovanie, buffer-ovanie, výber prístupových ciest a optimalizáciu dotazov.Tieto mechanizmy sú pouívate?ovi transparentné ? nemusí sa týmito mechanizmami priamo zapodieva?. Medzi volite?né vlastnosti o ktorých pojednáva manifest patria: Kontrola typov a odvodené typy? úrove? kontroly nie je jednozna?ne daná, no ?ím bude vä?šia, tým lepšie, pretoe tým menej môe nasta? chýb po?as behu programu. Otvorené vo?by: Uniformnos? ? táto vlastnos? je ve?mi diskutovaná ? ide o to, aký stupe? uniformnosti sa má o?akáva? od takýchto systémov. Spor ?i je typ, metóda uniformný objekt, alebo sú to rozdielne veci. Tento problém má tri poh?ady na danú problematiku ? poh?ad z implementa?nej úrovne, problém z h?adiska programovacieho jazyka a problém z h?adiska interface-u. Na implementovanie OODBS potrebujeme komplexný dátový sklad, cache mechanizmus, spracovanie objektovo orientovaného jazyka a metódy na kontrolu celého procesu programátorom. Výhody OODBS Vysoká výkonnos?. Udáva sa 10-1000 násobné zrýchlenie tranzakcií. Je to predovšetkým docielené tým, e systém nemusí robi? preklad medzi dátovými modelmi ? mapovaním tabuliek na objekty a naopak, cache-ovaním a rýchlos?ou navigácie v databáze. Komplexnos? dát ? umo?uje existenciu zmiešaných objektov (zoznamov, hierarchických stromových štruktúr, objektovo orientovaného dátového modelu, dynamickú ve?kos? bez limitu, a vysokú škálovate?nos?). Objekty v OODBMS môu obsahova? nespo?etné mnostvo primitívnych typov ako aj iných objektov. Je tie moné uchováva? ve?kú triedu, obsahujúcu mnoho stredne ve?kých tried, obsahujúcich triedy malé, a takto a do nekone?na. Napriek tomu v rela?ných DB, by to muselo by? uskuto?nené existenciou obrovskej tabu?ky s mnostvom NULL polí alebo mnostvom menších, normalizovaných tabuliek ktoré sú poprepájané pomocou foreign k?ú?ov. Ma? viac malých tabuliek je problém, pretoe zakadým, ako chceme robi? nejaký dotaz, musí sa vykona? JOIN. Zníené náklady a ?as vývoja aplikácií? operácie sú transparentné ? programátor sa nemusí zaobera? ako má systém uloené dáta, jednovrstvový dátový model, at?.. Umo?uje mu koncentrova? sa na podstatnejšie veci. Rýchlos? - monitorovanie web prístupov ukázalo, e 1/3 ?asu bola pouitá na komunikáciu s prehliada?om, ?alšia tretina na spustenie java programu, a posledná tretina na komunikáciu s databázou. OODB vie eliminova? dve z spomenutých oneskorení, ?o predstavuje faktor zrýchlenia 3. V praxi je to však nejakých 1.5 krát. Ve?kos? tohto zrýchlenia predovšetkým pochádza z cache-ovania. Je taktie moné pridanie cache-ovania do rela?nej databázy, no problém je vyrovna? sa s implemenáciou cacheovania tranzakcií. Nevýhody OODBS Udriava poh?ad na dáta z komplexnej strany? bení ?udia sa k nim môu dosta? len prostredníctvom programátora, ktorý pozná ako sa k daným uloeným objektom dosta?. Málo ?astá monos? výpisu dát vo forme tabuliek štýlu Excel, Access.. at?. ?alšie alternatívy: Jednou z alternatív je pridanie OO vlastností do rela?nej databázy (Oracle) ? zahr?uje to predovšetkým podporu ukladania objektov, ich identifikátorov a odkazov, hierarchické dotazy a viac komplexné dáta ako sú napr. polia. Najpouívanejšie OODBMS: Komer?né databázy: ?objektovo/rela?ná, riadená pomocou správ, pamä?ovo-rezidentná, perzistentný databázový systém s atraktívnou klient-server architektúrou a 4GL objektovo orientovaným grafickým klientom. Je multiplatformová a zvláda bezchybný chod distribuovaných aplikácií v reálnom ?ase na heterogénnej po?íta?ovej sieti. Poet, Gemstone, EyeDB ? OODBMS, - Komer?ná DB pouitá v satelitnom telekomunika?nom systéme Iridium. - objektová databáza na pouitie v Java aplikáciách. Medzi ?alšie patria: Jasmine, Itasca, MetaKit, ConteXt, XDb, Fresher,ObjectStore, Versant, POET/FastObjects, Kodo, Prismtech/OpenFusion.. Vo?ne dostupné objektovo orientované databázy: ozone je objektovo orientovaný databázový systém kompletne implementovaný v jazyku Java. Podporuje tranzakcie, metódy prístupu a práv k objektom, RMI, multipouívate?ský prístup, multivláknovos? atd. Kninica jazyka Java malá 60KByteov ponúkajúca rozhranie dovo?ujúca pripoji? Java triedy k dátovým štruktúram ktoré môu by? uchované na disku. Zope je Objektovo orientovaný databázový systém, ktorý poskytuje perzistenciu a manament týchto objektov. Má komer?ný komponent s názvom Z Enterprise Objects ? klient-server balík, ktorý s Zope pracuje a pomocou neho môe by? databáza pouitá na rôznych Zope clientoch, ktoré sú jeho inštanciami. Komunikujú prostredníctvom TCP/IP. Coldstore je sada C++ kniníc umo?ujúcich pripojenie C++ objektov k perzistetným databázam. Základnou myšlienkou je serializácia dát do súborov. Všetko ?o potrebujeme, sú funkcie read a write. Goods je plne distribuovaný multiplatformovýOODBMS zaloený na modelovi klienta s jazykovo nezávislým rozhraním. Databázový server je implementovaný pomocou viacvláknového jadra a poskytuje ve?mi dobrú odozvu na klientské poiadavky. Dostupné sú rozhrania k jazykom C++ a Java.
Funguje na princípe ukladania textových dát a metadát, ktoré sú potom dotazované pomocou query-language.
?alšie z databáz sú: StoredObjects, Lincks, Texas Persistent Store Library, MinneStore version2, IronDOC, MetaKit, RubyGOODS, MNESIA, goodmis.org, e4graph, OOFile, Cog ..at?
Príklady pouitia OODBS Na demonštrovanie som pouil technolódiu JDO (Java Data Objects), kede ide o jednu z ?astých pouívaných alternatív umo?ujúcich rýchly vývoj aplikácií. JDO Java Data Objects (JDO) API je štandard, vyvinutý Java Komunitou a firmou Sun Microsystems, ako reakcia na ?Java specification request ?íslo 12?, ktorý obsahuje poiadavku na existenciu objektovo-orientovanej databázovej špecifikácie. JDO špecifikácia poskytuje definíciu rozhraní dátových skladov a tranzakcií, vo?bu a transformáciu perzistentných dát do natívnych objektov jazyka Java. Aplikácie napísané v JDO API sú prenosite?né, platformovo nezávislé od rela?nej databázy nad ktorou beia. Vytvorenie inštancie PersistentManager-a Tento manager je základný objekt, ktorý poskytuje manaovanie perzistencie spracovaných dát. Pre jeho vytvorenie je nutné vytvori? inštanciu PersistenceManagerFactory. PersistenceManagerFactory pmf = ...; PersistenceManager pm = pmf.getPersistenceManager(); ... p.close();
!!! Nikdy nesmieme zabudnú na zatvorenie tohto manaéra.
Properties p = new Properties(); p.load(new FileInputStream("speedo.properties")); PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(p);
Inštancia objektu PersistenceManagerFactory by mala osta? globálnou premennou v celom rozsahu perzistentnej aplikácie. Ako urobi? objekt perzistentným? Musíme vola? metódu makePersistent na inštancii objektu PersistenceManager.
PersistenceManager pm = pmf.getPersistenceManager(); Address addr = new Address("Seb", "myStreet", "myZip", "myTown", "France"); ... pm.makePersistent(addr); ... pm.close();
Vymazanie objektu - metóda deletePersistent
PersistenceManager pm = pmf.getPersistenceManager(); Address addr = ...; pm.deletePersistent(addr); ... pm.close(); Príklad spravenia výberu pomocou jeho identifikátora: PersistenceManager pm = pmf.getPersistenceManager();Object oid = pm.objectIdInstance(Invoice.class, new Integer(54321)); Invoice i = (Invoice) pm.getObjectById(oid, false); ... //use of the 'i' variable pm.close(); Príklad dotazu na iný objekt.. PersistenceManager pm = pmf.getPersistenceManager() Object oid = pm.objectIdInstance(Address.class, new AddressID("Seb", "myStreet", "myTown")) Address a = (Address) pm.getObjectById(oid, false) ... //use of the 'a' variable pm.close();
Aby náš dotaz vyhovoval ur?itým kritériám, je pouitá metóda setFilter
PersistenceManager pm = pmf.getPersistenceManager(); Query query = pm.getQuery(Address.class); query.setFilter("(name == myParam)"); query.declareParameters("String myParam"); Collection col = (Collection) query.execute("Seb"); Iterator it = col.iterator(); if (it.hasNext()) { //there is a result while(it.hasNext()) { Address a = (Address) it.next(); ... } } else { //no persistent object found ... } query.closeAll(); ... pm.close(); Filter definuje rovnos? medzi polí?kom meno a parametrom myParam. Výsledkom tejto operácie je java.util.Collection z ktorej následnou iteráciou získame poadovaný element. Je potrebné vdy zatvorenie query pomocou closeAll() metódy.
Získanie rozsahu objektov
PersistenceManager pm = pmf.getPersistenceManager(); Extent extent = pm.getExtent(Address.class, false); Iterator it = extent.iterator(); while(it.hasNext()) { Address a = (Address) it.next(); ... } extent.closeAll(); ... pm.close(); Je potrebné vdy zatvorenie query pomocou closeAll() metódy.
Enterprise Java Beans Query Language Enterprise JavaBeans (EJB) technológia je komponentová architektúra na strane servera pre Java2EE platformu. EJB ponúka rýchly a zjednodušený vývoj distribuovaných, tranzak?ných, bezpe?ných a prenosite?ných aplikácií na báze Java technológie.
Pre ukladanie a perzistenciu EJB beansov je pouitá perzistencia na strane kontajnera (Container Managed Persistence), kde celý tento bean môe by? perzistentný ako v objektovej, tak v rela?nej databáze. Spomínam ho preto, lebo jeho jazyk ? EJB QL umo?uje ve?mi dobrú a efektívnu prácu s perzistentnými objektmi.
Jednoduché príklady EJB-QL dotazov: SELECT OBJECT(p) FROM Player p Prijaté dáta: Zoznam všetkých hrá?ov
SELECT DISTINCT OBJECT(p) FROM Player p WHERE p.position = ?1 Prijaté dáta: hrá?i sp??ajúci podmienku vo finder metóde
SELECT DISTINCT OBJECT(p) FROM Player p WHERE p.position = ?1 AND p.name = ?2 Prijaté dáta: Hrá?i s danou pozíciou a daným menom
EJB QL výraz vie prechádza? cez pridruené triedy, ako v tomto prípade trieda teams:
SELECT DISTINCT OBJECT(p) FROM Player p, IN (p.teams) AS t WHERE t.city = ?1
Pouitie rozsahu na výber objektov:
SELECT DISTINCT OBJECT(p) FROM Player p WHERE p.salary BETWEEN ?1 AND ?2
SELECT DISTINCT OBJECT(p1) FROM Player p1, Player p2 WHERE p1.salary > p2.salary AND p2.name = ?1 SELECT DISTINCT t.league FROM Player p, IN (p.teams) AS t WHERE p = ?1
Záver Dozvedeli sme sa o pouití, výhodách a nevýhodách Objektovo orientovaných databázových systémov. Je však len na nás, ?i sa prikloníme k ich pouívaniu alebo zostaneme pri zauívaných rela?ných databázach. Dá sa však poveda?, e OODBS majú va?šie mnostvo výhod oproti rela?ným databázam, a preto ich pouitie by som odporu?il hlavne pri rozsiahlejších projektoch. Zdroje: http://www.25hoursaday.com/WhyArentYouUsingAnOODBMS.html http://speedo.objectweb.org/doc/jdotutorial.html http://www.idi.ntnu.no/grupper/su/courses/dif8901/presentation2003/d3.ppt http://cbbrowne.com/info/oodbms.html http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/EJBQL4.html#73277
|