HØit Nr. 1-97
Previous article Next article TOC: Nr. 1, 1997 Previous Issue Next Issue About HØit

Illustra ORDBMS


Harald Holone

Innledning

Vi produserer stadig mer kompleks informasjon som vi ønsker å ta vare på og presentere i forskjellige sammenhenger. Tidligere har vanlige relasjonsdatabaser (RDBMS) vært løsningen på de fleste databaseproblemer. De siste årene har det kommet endel objektorienterte databasesystemer (OODBMS) for håndering av komplekse data. Svakheten ved disse har vært mangelen på et strukturert (og standard) spørrespråk for å manipulere data i databasen. Derfor er det lagt ned mye arbeid på å kombinere tradisjonelle relasjonsdatabaser og objektorienterte databaser. Resultatet er objektrelasjonsdatabaser (ORDBMS). Illustra er en av dem.

En del ORDBMS baserer seg på en tradisjonell RDBMS-motor med et objektorientert skall på toppen for å gi tilgang til objektrelasjonsteknologien. Dette medfører ofte en svekket ytelse og begrensninger når det gjelder fleksibilitet.

Illustra er skrevet som et ORDBMS, der de to teknologiene er integrert fra bunnen av. Dette gir en god ytelse og store muligheter for utbygging av funksjonalitet.

Jeg har testet Illustra Server en periode for å vurdere et innkjøp av en flerbrukerversjon av programvaren. I denne artikkelen vil jeg skrive litt om mine erfaringer med Illustra og kort om hvilke muligheter jeg ser i denne teknologien sett i sammenheng med våre aktiviteter på avdelingen.

Illustra ORDBMS

Har man noe erfaring med SQL er det å jobbe med Illustra ikke noe problem. I enbrukerversjonen jeg har testet har all kommunikasjon med databasene skjedd via et klientprogram som heter Illustra Query Tool (IQT). Her kan man gjøre det man trenger av administrative oppgaver, i tillegg til manipulering av data i databasene.

Illustra støtter SQL-92, og man kan jobbe med databasene som om det var en tradisjonell relasjonsdatabase. Det vil si at å opprette tabeller, populere disse, hente ut data osv gjøres med SQL som man er vant med fra relasjonsdatabasene. I tillegg til SQL-92 har Illustra definert et sett med funksjoner og kommandoer for å få tilgang til objektrelasjonsdelen av Illustra. Min erfaring er at dette tillegget virker som en naturlig utvidelse av SQL-92.

Objektrelasjonsdelen er kanskje mest tydelig i muligheten til å definere egne datatyper (basert på kjente datatyper eller helt nye datatyper), arv mellom datatyper og arv mellom tabeller.

Her følger et eksempel som viser hvordan man kan definere en sammensatt datatype for en person og hvordan man lager en datatype for en ansatt som arver egenskaper fra typen person.

create type person_t 
( 
  enavn text, 
  fnavn text, 
  adresse text 
); 
 
create type ansatt_t 
( 
  ansattnr integer, 
  tittel   text 
) under person_t; 

På denne måten arver typen ansatt_t egenskapene til person_t og legger til to egne attributter, slik vi er vant til fra arv mellom klasser i f.eks C++.

Nå er datatypene beskrevet, og jeg vil her vise hvordan man lager en tabell av typen person_t og en tabell av typen ansatt_t som arver fra persontabellen.

create table person of type person_t; 
create table ansatt of type ansatt_t under person; 

At tabellen ansatt arver fra tabellen person har noen konsekvenser. F.eks vil man ved en

select * from person;

få ut alle recordene fra person og alle recordene fra ansatt. Man kan også velge ut bare de recordene som ligger i tabellen person ved å skrive

select * from only(person);

Oppretter man tabeller som arver fra ansatt vil det samme prinsippet gjelde for uthenting av data fra tabellen ansatt. Velger man fra en tabell vil man altså få med data fra tabellen og alle tabeller som har arvet fra denne. Dette gir muligheter for en logisk inndeling av data slik at man kan forenkle SQL-spørsmål og få en enklere og logisk oversikt over dataene i databasen.

Funksjoner er også en viktig del av Illustras fleksibilitet. Funksjonene kan skrives i SQL eller eksternt i C++. Funksjonene kan ta parametre som f.eks integer, text og egendefinerte datatyper. Den siste muligheten er spesiellt interessant, fordi den kan brukes i forbindelse med virtuelle felter.

Virtuelle felter er felter i en tabell som er definert med navn, datatype og stikkordet virtual. Navnet på det virtuelle feltet referer til en funksjon som tar den aktuelle datatypen som parameter. Ved uthenting av data fra tabellen vil funksjonen kalles for hver record, og en beregnet verdi presenteres. Et eksempel her kan være beregning av en persons alder basert på fødselsdato.

Datablader

Et datablad i Illustra er en samling av datatyper og funksjoner som er laget for å løse en spesiell oppgave. Som eksempler kan nevnes Web DataBlade som gjør det mulig å håndtere html-dokumenter i databasen med fletting av statiske og dynamiske data fra databasen. Image DataBlade innheholder en datatype for å lagre bilder i databasen og en del funksjoner for å manipulere bildene. Å få tilgang til slike funksjoner i databasen er et stort pluss f.eks i forbindelse med vedlikehold av Web-sider.

I tillegg til at man kan kjøpe ferdige datablader kan man også utvikle egne datablader. Det finnes et DataBlade Developers Toolkit for å gjøre dette på en standarisert måte, men siden et datablad kun er en samling av datatyper og funksjoner kan man oppnå det samme ved å lage disse direkte i databasen.

Web DataBlade

Web DataBlade er en samling med funksjoner og definisjoner av tags. Et program, webdriver.exe, er grensesnittet mellom web-serveren og illustra-databasen. Kort fortalt fungerer det på denne måten:

Html-sider lagres i databasen. Disse kan være helt vanlige html-dokumenter, men de kan også inneholde spesielle tags som beskriver sql-spørsmål, håndtering av variable osv. Sidene hentes ut av Illustra ved hjelp av webdriver.exe. Dersom sidene inneholder spesielle tags vil disse bli tolket og utført før dokumentet når klienten. På denne måten kan man flette statisk informasjon med dynamisk informasjon fra databasen.

Her er et eksempel på en html-fil som benytter den nye tag'en <?misql> som brukes for å definere sql-spørsmål i html-filen:

<html> 
<body> 
 
<h1>Navneliste</h1><br> 

Her kommer en liste med navn: 
 
<ul> 
<?misql sql = "select navn 
               from person 
               order by navn;"> 
<li> $1 
<?/misql> 
</ul> 
 
Slutt på liste. 
 
</body> 
</html>

Her brukes tag'en for å hente ut en liste med navn fra en tabell i databasen. Mellom og beskrives hvordan resultatene skal presenteres. I dette eksemplet blir det for hver rad i resultatet skrevet ut en <li> og verdien av det første feltet i raden (navn).

Med Web DataBlade kan man enkelt legge flere sql-setninger inn i et html-dokument, stille betingelser for når forskjellige sql-setninger skal utføres, hente ut binære objekter (f.eks bilder) osv.

Image DataBlade

Image DataBlade er et datablad som godt illustrerer mulighetene som datablad-teknologien gir. Dette databladet er laget for bildebehandling, det håndterer ca 50 bildeformater i sort/hvitt, gråtoner og farger. Det defineres en ny datatype, image, for å lagre bildene i databasen. Har man en bitmap-fil på disk er det en enkel sak å legge denne inn i databasen. Man lager en tabell (bilder) der et av feltene (bilde) er av typen image, og så kan man bruke en insert-setning for å legge inn bildet i tabellen:

insert into bilder(bilde) 
values ('format(gif):d:/gif/telefon.gif'); 

Her angis bitmapformatet på bildet og hvor det ligger. Nå ligger bildet i databasen, og kan manipuleres og spørres mot. Ønsker man f.eks å vite hvor stort bildet er kan man gjøre slik:

select GetImgSize(bilde) from bilder;

Det finnes også funksjoner for manipulering av bilder. Ønsker man f.eks å populere en annen tabell med krympede utgaver av bildene i den første tabellen kan man gjøre slik:

insert into krymp_bilder 
select scale(bilde, 0.5, 0.5) from bilder; 

Det ville være naturlig å kombinere Web DataBlade med Image DataBlade, og dette skal være mulig. Det ser ut til at det er noe galt med NT-distribusjonen, Informix ser på saken.

Mulige bruksområder for Illustra

Med muligheten for å definere egne datatyper og funksjoner byr Illustra på mange muligheter for vår virksomhet, både i forskning og undervisningssammenheng. Man kan tenke seg å utvikle egne datablader som håndterer nevrale nettverk, fuzzy logikk og numeriske metoder. Også i multimediasammenheng finnes det muligheter, kanskje særlig i WWW-sammenheng.

Det vil også være naturlig å ta med Illustra som en del i databasekurset, i første omgang i forbindelse med prosjektoppgavene som er en sentral del av kurset.

I mars kommer Informix-Universal Server for NT, en databaseprogrampakke som bygger på RDBMS-teknologien fra Informix og ORDBMS-teknologien fra Illustra. Hvis dette ser lovende ut vil det være naturlig å vurdere dette som grunnlaget for databasekurset som helhet, og gå bort fra Oracle som basis.

Oppsummering

Illustra Server er en databasemotor med spennende teknologi og mange muligheter. Gjennom den perioden jeg har testet programvaren har jeg fått et bilde av et produkt som virker stabilt og ikke minst gjennomtenkt. Det er lett å lære og lett å bruke. De svake punktene jeg har funnet ved produktet dreier seg om administrasjon og sikkerhet. Det er tydelig at det er teknologien som står i sentrum. Dette har jeg snakket med Informix om, og de bekrefter dette, de kjøpte Illustra p.g.a. den spennende teknologien. I følge Informix vil lanseringen av Informix-Universal Server rette på de manglene som finnes i Illustra idag, og samtidig utvide funksjonaliteten ytterligere.

Videre lesing

Under testingen av Illustra Server har jeg dokumentert de delene som er testet. For de interesserte kan denne dokumentasjonen finnes på følgende URL: http://eddie.hiof.no/dok/illustra/

Illustras hjemmeside:
http://www.illustra.com

Informix' hjemmeside:
http://www.informix.com

Previous article Next article TOC: Nr. 1, 1997 Previous Issue Next Issue About HØit
HØit Nr. 1-97


Copyright: 1996, Høgskolen i Østfold. Last Update: 28.06.97, Thomas Malt.