Typ, princip a stručná historie Objectivity/DB Vypracoval Radek Rejfíř pro předmět Y36DBA 2008/09
1. Úvod S rostoucím zájmem o objektově orientované paradigma v programování postupně roste i zájem o objektově orientované databáze (dále jen OODB). OODB poskytují jednoduchou a přímou možnost ukládání informací (objektů) programů napsaných v objektově orientovaných programovacích jazycích. V současné době nejvíce používány relační datový model je pro tyto jazyky nevhodný vzhledem ke své struktuře a jednoduchosti. Jedním z databázových systému řešících danou situaci je právě Objectivity/DB společnosti Objectivity Inc, vyznačující se skvělou škálovatelností čehož je důkazem experiment pří kterém byla vytvořena největší databáze na světě (informace viz dále.)
2. Objektově orientované databáze Princip objektově orientovaných databází (OODB) je stejný jako u OO programovacích jazyků. Vzhledem k velké sémantické propasti mezi skutečným světem a jeho počítačovou reprezentací je objektová orientace snahou zmírnit tuto propast. Základním kamenem OODB je tedy objekt modelující realitu. Každý objekt má přiřazený svůj OID (object identifier, tedy jednoznačný identifikátor objektu) a vlastnosti ve formě atributů a metod. OODB se netěší příliš velké oblibě, ať již z důvodů dlouholeté tradice relačních modelů jako de facto standartu pro databázové systémy, nebo také z důvodů pohledu na objektově orientované databázové systémy jako na určitou módní vlnu a systémy které nedosahují výkonů jako relační databáze. (Skutečností však je že OODB dosahují porovnatelných výkonů jako ty relační a vzhledem k jejich struktuře a využití ukazatelů je navigace v tomto modelu rychlejší než v relačním.) Právě z těchto důvodů výše zmíněných vznikly dva přístupy a to krom vzniku „čistokrevných“ OODB také adaptace relačního datového modelu (RDM) ve formě objektově relačního datového modelu. Ten je obohacením RDB o prácí s objekty, dědičností a dalšího.
3. Objectivity/DB 3.1.Seznámení s Objectivity/DB Objectivity je komerční ODBMS (object-oriented database managment system) vyvíjený společností Objectivity inc. Umožňující přímí přechod mezi reprezentací dat v programovacím jazyce a reprezentací dat v databázi. Poskytuje rozhraní pro přístup pro programovací jazyky Java, C++, SmallTalk, Python a pro SQL/ODBC a XML. Základní vlastnosti Objectivity/DB: • • •
Škálovatelnost – výkon lze předvídat i pro vzrůstající množství dat a klientů Interoperabilita – Podpora téměř všech známých platforem. Distributivnost – data mohou být distribuována na více souborových serverů a replikována pro zvýšení ochrany proti chybám
3.2.Škálovatelnost Objectivit je jedná z databází s téměř neomezenou kapacitou, toho je důkazem použití této databáze v The SLAC Bar projektu, kde byla tato databáze použita jako úložiště výsledků vysoko energetických fyzikálních experimentů. Datový přísun byl přibližně jeden terabyte za den. Bylo zpracováno přibližně jeden petabyte dat a do databáze bylo zkomprimováno přibližně 895 terrabytů což je jedna z největších databází na světě.
3.3.Dostupnost Objectivity je dostupná pro téměř všechny současné platformy, dle internetových stránek výrobce (verze 9.4): • • • • • • • • • •
Windows Server 2008 / Server 2003 / 2000 / XP / Vista / x64 UNIX & Linux operating systems Hewlett-Packard 11i V2 Itanium / PA-Risc IBM AIX Intel RHEL and SUSE Silicon Graphics Altix Sun Microsystems Solaris AMD Opteron RHEL / Solaris Linux for zSeries Motorola LynxOS
3.4.Historie Objectivity/DB Společnost Objectivity inc. se sídlem v Sunyvale v Kalifornii byla založena v roce 1988. • • • • • • • • • • •
Květen 1990: Release 1 – Distribuovaná ODBMS, schopná pracovat na třech Unixových platformách, podpora pouze pro C++, omezené dotazování a migrace schémat. 1992: Release 2 – Smalltalk, SQL++ a ODBC, další UNIX platformy, indexování a predicate queries. 1994: Release 3 – Vysoká dostupnost (tolerance proti chybám a replikace databáze). 1996: Release 4 – Windows NT a short transaction výkonostní vylepšení. 1998: Release 5 – Java and Active Schema (dynamické delkarace a migrace schema definic a instancí objektů). 1999: Release 6 – Škálovatelnost (transparentní podpora pro mass storage) a security hooks. 2001: Release 7 – XML a Usability (další nástroje a jednotné APIs přez všechny jazyky) 2003: Release 8 – Python a zvýšená produktivita (Eclipse IDE)a podpora 64-bit. 2005: Release 9 – VLDB vylepšení, Web Based výuka a Parallel Query Engine 2006: Release 9.3 – Další 64-bit platform a podpora JCA pro vice palikační serverů. 2008: Release 9.4 – Podrobnosti o této verzi viz další kapitola.
(Převzato z [2], přeloženo a upraveny chyby a doplněno o současnou verzi.)
3.5.Vlastnosti Objectivity/DB verze 9.4 Nove vlastnosti oproti verzi 9.3 Rozšířená podpora pro Python 2.5, JCA podpora Grid enabled Websphare 6.1. Podpora nových platforem (Windows Vista, Red Hat EL4 on 64bit Intel EM64T Xeon, Linux Suse Version 10.0, Red Hat EL5, AIX 5L Version 5.3 on Power 5+.
Některé další vlastnosti od verze 9.0 • Rozšíření API vysoké dostupnosti - Rozšíření API pro vylepšení správy replikovaných databází. • Výukové materiály a ukázky • Nový databázový katalog a katalog kontejnerů – Nová struktura katalogu vylepšuje svoje operace pomocí zjednodušení vnitřní struktury dat entit a redukuje počet lock volání a četní z disku. • Podpora 64-Bit paměťových adres – Pro podporované platformy (S podporou 64-bit kompilátorů a knihoven) • XML export a import – podpora exportu objektu C++, Java a SmallTalk
3.6.Objectivity/DB Podrobněji Objectivity poskytuje podobné vlastnosti jako kterýkoliv jiný systém řízení báze dat (SŘBD, neboli data base managment system – DBMS) tedy concurrency, transactions, recovery managment a query. Tato databáze je však založena na objektovém modelu dat. Data jsou uchovávána ve formátu, tak jak jsou vytvořena programem, konkrétněji ve formátu velmi podobném reprezentaci dat v paměti. Jednotlivé objekty jsou propojeny pomocí referencí a vztahů. Pro usnadnění vyhledávání je možné vytvořit pomocné objekty jako indexy, stromy a kolekce. Návrh SŘBD je oproti klasickému návrhu mírně netypický. Krom správy souběžnosti (lock server), dotazování a vzdáleného přenosu dat běžících jako samostatné procesy, většina zbylých služeb databáze funguje jako zásuvná knihovna, kterou je možné umístit přímo do aplikace. Data jsou obvykle v Objectivity rozdělena do více menších databází které jsou spravovány pod jedním celkem nazývaným federated database (také nazývané federation, nejlépe přeloženo jako svazek). Tento celek poté spravuje umístění jednotlivých databází patřících do svazku na síti (a discích) a udržuje jejich katalog. Svazek tak poskytuje jednotný přístup ke všech těmto datům. Objectivity ukládá objekty pomocí kontejnerů. Jeden kontejner může obsahovat více objektů. (Toto je mírně zjednodušený pohled). Tyto kontejnery jsou uloženy v databázi a zaznamenány ve svazku. Veškeré dotazování je prováděno na straně klienta, oproti klasickým relačním systémům řízení dat, kde je dotazování prováděno na straně serveru. Tento přístup je také označován jako „client centric implementation“. „ V databázi založené na kontejnerech, musí být všechny objekty z databázového serveru tykající se dotazu identifikovány pomocí databáze/kontejneru, který obsahuje všechny potenciální indexy a musí být nahrány do procesu klienta pro vykonání dotazu.“[zdroj 4, str 11, odstavec 2]. Container
Klient
Server Zámky Disk
NFS Request NFS Pages
[Obrázek 1: Kontejnerová architektura]
Klient
Jak již bylo zmíněno každý objekt má přidělen svůj 64bitový OID (tedy object identifier), tedy jedinečné označení. To zaručuje přístup pro přibližně až 10,000,000 Terabytu dat. Pro 32 bitový operační systém platí však omezení pouze na maximálně cca 100 Terabytu dat. Díky použití OID odpadá potřeba pro jednoznačný identifikátor, který je součástí dat. Data tak nejsou určenou pouze svojí hodnotou. Každý OID je rozdělen na dvě části a to: 1. 2. 3. 4.
1-16 bit – Logický identifikátor databáze 17-32 bit – Logický identifikátor kontejneru 33-48 bit – Logická stránka v kontejneru 49-64 bit – Logický slot ve stránce
Objectivity/DB umožňuje vícenásobný současný přístup k databázi s udržením konzistence dat ve svazku. Mezi funkce k tomu sloužící patří například: • Multiple readers, one writer (MROW) – Tedy je povoleno vícenásobně čtení objektů, které jsou zamčené pro změny jinou transakcí. • Active deadlock detection across databases – Varování před nechtěnými deadlocky, kdy různé transakce čekají na zámek, který nikdy nebude uvolněn. • Downgrade locks on checkpoints - Umožňuje aplikaci snížit všechny zámky (z práva aktualizace na právo číst) poté co transakce prošla kontrolním bodem. Některé další vlastností Objectivity/DB: Object clustering Objekty uvnitř databáze je možné seskupovat a to právě do kontejnerů. Pomocí kontejnerů je možné zrychlit přístup k datům. Pomocí sdružení objektů s podobným přístupovým vzorcem zaručíme že dané objekty jsou umístěny v jedné databázi na jednom konkrétním místě a urychlíme tak přístup k nim. Object-level versioning Objectivity umožňuje pro aplikace napsané v C++ a Smalltalk vytvořit více verzí stejného objektu. Umožňuje tak sledovat vývoj a změny objektu po danou dobu, usnadňuje tak změny a rekonfigurace složitějších systémů. Uživatel má právo OID daného objektu nastavit na kteroukoliv verzi daného objektu, zároveň existuje generický objekt, ukazující na celek všech verzí pro jednotný přístup v dalších částech databáze.
3.7.Použití Objectivity/DB s programovacím jazykem JAVA Proces tvorby Java aplikace spolupracující s Objectivity/DB se téměř neliší od normálního procesu vývoje. Je nutné vytvořit svazek a v programu definovat třídy, které v databázi mají být uložené jako Persistent-Capable. Aplikace poté musí provést operaci označovanou jako clustering, aby daným objektům bylo vyhrazeno místo v databázi. Třídy mohou být vytvořeny jako perzistentní buď implementací perzistentního rozhraní, nebo odvozením z perzistentní třídy. Objectivity obsahuje několik před-definovaných perzistentních tříd jako kolekce, indexy a podobné. Objectivity podporuje také neperzistentní třídy (například String), které však mohou být uloženy ve svazku pokud jsou obsaženy jako atribut perzistentní třídy. Získání perzistentního objektu z databáze
Nejdříve je nutné vytvořit lokální reprezentaci objektu, veškeré operace pak probíhají skrze tuto reprezentaci. Dále je nutné získat zámek k objektu (existuje zámek pro čtení a zámek pro zápis). Pokud objekt obsahuje perzistentní data, je nutné tyto data do lokální reprezentace objektu nakopírovat (označováno jako fetching). To se uskutečňuje pomocí odlišných mechanizmů v závislosti na typu objektu.
4. Závěr Objektový systém řízení báze dat Objectivity/DB společnosti Objectivity Inc. je funkčním databázovým systémem založeným na objektovém modelu dat, spolupracující s C++, Javou, Smalltalkem a Pythonem. Nasazení této databáze je vhodné pro všechny aplikace používající objektové paradigma. V praxi nachází uplatnění hlavně ve vědeckých experimentech, kde dochází k ukládání extrémně velkých objemů dat. Pro získání podrobnějších informací o této databázi je vhodné navštívit stránky výrobce obsahující obsáhlé množství informací a tutoriálů.
5. Použitá literatura 1. Merunka , Vojtěch. Datové modelování. Praha: Alfa Publishing, 2006. ISBN 80-86851-54-0 2. Wikipedia : Objectivity/DB [online]. Duben 2008, [cit. 28.12.2008].
3. Objectivity inc. : Objectivity/DB, Object Data Base Solutions [online]. [cit. 28.12.2008]. 4. Blaha, Michael. Huth , Bill. Cheung, Peter. Object-Oriented Design of Database Stored Procedures [online]. Poslední revize 22.10.2008 [cit. 28.12.2008]. Dostupné z