Kerättävän ja talletettavan tietomäärän jatkuva, räjähdysmäinen kasvu on
yleisesti tiedostettu ilmiö. Raakatiedon jalostaminen ja siihen automaattisesti
reagoiminen ovat nousseet kynnyskysymyksiksi valtavan tietomäärän hallinnassa.
Yhtenä ratkaisuvaihtoehtona edelläkuvattuun ongelmaan on esitetty aktiivisen
tietokannan käsitettä, jota on intensiivisesti tutkittu jo usean vuosikymmenen
ajan (esim. [WiC96]). Aktiivinen tietokanta mahdollistaa nk. laukaisimien
(trigger) avulla automaattisen reagoimisen ennalta määrättyihin tietokanta- tai
ulkoisiin tapahtumiin. Tämä tarkoittaa sitä, että esimerkiksi tietoalkion
lisääminen tietokantaan voi aiheuttaa tietokannan sisäisen tai ulkoisen
toiminnon automaattisen käynnistämisen.
Olemme VTT Tietotekniikan TEMPO-projektissa laajentaneet aktiivisen
tietokannan keskeistä käsitettä, laukaisinta, sumeaksi laukaisimeksi. Sumea
laukaisin hyödyntää sumean logiikan teoriaa [Zad65], joka mahdollistaa
inhimillistä päättelymekanismia mallintavan päättelyn. Sumeiden
päättelysääntöjen perusteella sumea laukaisin aktivoi tai hylkää siihen
kiinnitetyn toiminnon. Sumean laukaisimen kehittämiseen on myötävaikuttanut
yhteistyö suomalaisen teollisuuden kanssa [PBW96].
Seuraavassa luvussa esitellään aktiivisen tietokannan laukaisimen perusmalli,
ECA-malli. Luvussa 3 käydään läpi kehittämiemme sumeiden laukaisimien
teoreettiset mallit. Luvussa 4 on TEMPO-projektissa kehitetyn aktiivisen
tietokantapalvelimen prototyypin esittely, palvelimessa toteutetun sumean
laukaisimen suorituskykytestin tulokset ja esimerkki sumean laukaisimen
määrittämisestä TEMPO-palvelimessa.
Aktiivinen tietokanta on tietokanta, joka aktiivisesti reagoi määrättyihin
tietokanta- tai ulkoisiin tapahtumiin. Aktiivisuuden käsite muuttaa perinteisen
tietokannan passiivisesta tietovarastosta aktiiviseksi
tiedonhallintajärjestelmän osaksi. Tyypillinen tietokantatapahtuma, johon
tietokanta voidaan määritellä reagoimaan, on esimerkiksi tiedonlisäys (INSERT)
tai päivitys (UPDATE). Tietokannan aktiivisuuden toteutusmekanismi on laukaisin
(trigger).
Laukaisimen teoreettisesta mallista, ECA-mallista (kuva 1), vallitsee
tutkijapiireissä lähes täydellinen konsensus. ECA tulee sanoista
Event-Condition-Action (tapahtuma-ehto-toiminto). ECA-laukaisimen semanttinen
toimintamalli on seuraava: Laukaisimen aktivoivan tapahtuman (E) seurauksena
evaluoi laukaisimen ehto (C) ja jos ehto täyttyy, käynnistä toiminto (A).
Laukaisimen aktivoiva tapahtuma voi olla tietokannan sisäinen tai ulkoinen
tapahtuma. Laukaisimen ehto-osan muodostavat tietokannan hetkittäisen tilan
pohjalta evaluoitavat predikaatit. Laukaisimen käynnistämä toiminto voi olla
tietokantatoiminto tai tietokannan ulkoinen funktio.
Aktiivisia tietokantoja on tutkittu ja kehitetty jo pitkään, mutta niiden
peruskäsitteiden standardointi on vielä kesken. SQL3-standardi tullee
sisältämään tietokannan aktiivisen käyttäytymisen perusrakenteet. Standardien
puutteesta huolimatta kaupallisia toteutuksia tietokannan aktiivisista
piirteistä on ollut markkinoilla jo vuosia.
Sumea laukaisin on uusi käsite aktiivisten tietokantojen teoriassa. Olemme
VTT Tietotekniikan TEMPO-projektin puitteissa kehittäneet kolmen eritasoisen
sumean laukaisimen teoreettiset mallit. Näistä ensimmäisen, C-sumean laukaisimen
[BoW96a] prototyyppi on toteutettu TEMPO -tietokantapalvelimessa. CA-sumean ja
ECA-sumean laukaisimen [BoW96b] käytännön toteutukset ovat suunnitteilla.
Seuraavissa aliluvuissa esitetään kunkin laukaisimen teoreettinen perusta.
C-sumea laukaisin on kolmesta esitetystä laukaisinmallista yksinkertaisin.
Kirjain C viittaa ECA-mallin keskimmäiseen komponenttiin (Condition). C-sumeassa
laukaisimessa tavallisen ECA-laukaisimen klassisen logiikan mukaista ehto-osaa
laajennetaan siten, että se voi sisältää myös sumeaa logiikkaa. Tällöin ehtoon
voi sisältyä täsmällisten lukuarvojen lisäksi myös sumean sääntöjoukkofunktion
(SSF) kutsuja, joiden palauttamia arvoja voidaan käyttää vertailuoperaattoreiden
operandeina. Sääntöjoukkofunktion kutsussa sumealle päättelymekanismille
välitetään säännöissä käytettävien sumeiden operandien täsmälliset arvot
reaalilukuina. Sääntöjoukon käsittelyä varten täsmälliset arvot sumeutetaan ja
päättelyn sumea tulos edelleen täsmällistetään palautettavaksi
sääntöjoukkofunktion kutsujalle. Täsmällistämiseen on olemassa useita eri
menetelmiä, joista yleisimmin käytetty lienee ns. painopistementelmä (center of
gravity). Alla on esimerkki C-sumean laukaisimen ehto-osasta, jossa on
yhdistetty klassista ja sumeaa logiikkaa:
arvo1 > 0 AND SSF(arvo2) < 2
Tässä arvo1 ja arvo2 ovat reaalilukuarvoisia muuttujia (esim.
tietokantataulun sarakkeita) ja SSF on sääntöjoukkofunktion kutsu. Luvussa 4.3
on täydellinen esimerkki C-sumean laukaisimen määrittelemisestä
TEMPO-palvelimessa.
CA-sumea laukaisin laajentaa C-sumean laukaisimen mallia sumeuttamalla
laukaisimen suorittaman toiminnon valinnan. C-sumeassa laukaisimessa ehto-osan
täyttyessä laukaisin käynnistää tietyn ennaltamäärätyn toiminnon. CA-sumeassa
laukaisimessa käynnistettäviä toimintoja saattaa olla useita ja käynnistettävien
toimintojen valinta tapahtuu vasta ajonaikaisesti, soveltamalla sumeaa logiikkaa
suoritettavien toimintojen valinnassa.
ECA-sumea laukaisin kehittää ECA-malliin pohjautuvaa sumeaa laukaisinta
edelleen tuomalla mukaan sumean tapahtuman käsitteen. Tapahtuman sumeus
ilmaistaan kiinnittämällä tapahtumalle sen merkitsevyysaste. Mitä
merkittävämmästä tapahtumasta laukaisimen kannalta on kyse, sitä suurempi on
tapahtuman merkitsevyysaste. Tapahtuman merkitsevyysaste otetaan huomioon
laukaisimen käynnistämiä toimintoja valittaessa. Tämä edellyttää sitä, että
toiminnot on järjestetty merkitsevyytensä mukaiseen järjestykseen.
TEMPO-palvelin on C-sumean laukaisimen mekanismilla varustettu aktiivisen
tietokantapalvelimen prototyyppi. Se on VTT Tietotekniikassa RAPID-projektin
puitteissa kehitetyn RapidBase-palvelimen [WKP96] laajennos. RapidBase on
aktiivinen, keskusmuistipohjainen tietokantapalvelin, joka on kehitetty
erityisesti prosessiteollisuuden mittaustietojen aikasarjojen talletukseen.
RapidBase-palvelimen kyselykieli RQL (RAPID Query Language) on kehitetty SQL:n
pohjalta. TEMPO-palvelimen laajennettua toiminnallisuutta varten RQL -kieltä on
edelleen kehitetty RQL/F -kieleksi (RAPID Query Language / Fuzzy).
TEMPO-palvelin on toteutettu C++ -kielellä ja sen toteutusalustoina ovat Unix
(HP-UX) ja Windows NT. Sumean päättelykoneen toteutuksessa on hyödynnetty
CFlie-kirjaston rutiineja. (CFlie on alunperin kehitetty Robotiikan
Instituutissa Zurichissä, Sveitsissä. Sittemmin se on konvertoitu C-kielelle
Hawthornin teknillisessä korkekoulussa Australiassa). Demonstraatio-ohjelmisto
(Windows NT ja 95) on ladattavissa VTT Tietotekniikan Internet-sivuilta
(http://www.vtt.fi/tte/projects/tempo/).
Kuvassa 2 on esitetty TEMPO-palvelimen keskeiset komponentit ja niiden
välinen vuorovaikutus. Kuvan komponentit muodostavat palvelimen
käyttöjärjestelmätasoisen prosessin. Palvelinprosessi ylläpitää verkkoyhteyksiä
RQL/F -pyyntöjä esittäviin asiakasprosesseihin sekä toimintopalvelimiin, joille
palvelin lähettää laukaisimien toimintopyynnöt.
Seuraavassa luettelossa on kuvassa 2 esiintyvien komponenttien lyhyet kuvaukset:
Kuvan 2 nuolet kuvaavat laukaisimen ajonaikaista käsittelyä. Asiakas lähettää
verkon välityksellä palvelimelle tiedon päivityspyynnön RQL/F -komennon
muodossa. Komento välitetään RQL/F -kielen tulkille (A), joka lähettää tiedon
päivityspyynnön tietokantamoottorille (B).
Laukaisin aktivoituu sille määrätyn tapahtuman seurauksena.
Tietokantamoottori rekisteröi ja välittää eteenpäin tiedon yksinkertaisista
tietokantatapahtumista, kuten tiedon lisäyksestä, päivityksestä tai poistosta
(1a). Ajastintapahtumat generoi erityinen Ajastinkäsittelijä (Timer Manager)
(1b). Mikäli aktivoituneelle laukaisimelle on määritelty ehto-osa, sen
evaluoimiseen käytetään predikaattijärjestelmän palveluja (2).
Predikaattijärjestelmä käyttää tietokantamoottorin palveluja predikaattien
laskennassa tarvittavien, tietokantaan talletettujen arvojen hakuun (3). Jos
kyseessä on sumea predikaatti, sumea päättelykone johtaa predikaatin sumean
operandin täsmällisen arvon (4). Kun predikaattien totuusarvot on laskettu,
predikaattijärjestelmä palauttaa totuusarvot laukaisinkäsittelijälle, joka
puolestaan lähettää toimintopyynnön (5), mikäli laukaisimen ehto-osa täyttyy
[Bou97].
Sumean laukaisimen suorituskyky mitattiin testillä, jossa tietokantatauluun
lisättiin sumean laukaisimen aktivoivia rivejä täydellä kuormalla. Laukaisin
määriteltiin siten, että sen aktivoinnit eivät johtaneet toimintopyyntöihin.
Laukaisimen suorituskyky eristettiin palvelimen muusta toiminnasta aiheutuvasta
viiveestä ajamalla testi kahteen kertaan; ensin yhdellä laukaisimella ja
toisessa testissä kahdella identtisellä laukaisimella. Laukaisimen suorituskyky
saatiin jakamalla testien suoritusaikaero tietokantaan lisättyjen rivien
lukumäärällä. Vertailun vuoksi testi suoritettiin myös normaalilla
laukaisimella, ilman sumeaa päättelyä. Testissä käytetty tietokonelaitteisto oli
133 MHz Pentium PC, jossa oli 32 MB keskusmuistia ja Windows NT
käyttöjärjestelmä. Tietokannan koko säädetiin sellaiseksi, että
käyttöjärjestelmässä ei tapahtunut sivutusta.
Testissä käytettyjen sääntöjoukkojen säännöt koostuivat kahdesta ehdosta ja
yhdestä johtopäätöksestä, eli ne olivat muotoa IF ehto1 AND ehto2 THEN
johtopäätös. Testissä käytettyjen laukaisimien ehto-osat olivat
yksinkertaisia, eli niissä käytettiin vain yhtä predikaattia.
Sumean laukaisimen ehto-osan evaluoimiseen kului kahdeksan säännön
sääntöjoukolla noin 0,45 ms. 64 säännön sääntöjoukolla ehdon evaluoiminen kesti
noin 0,55 ms. Normaalilla laukaisimella, ilman sumeaa päättelyä, vastaava aika
oli noin 0,1 ms (ks. Kuva 3).
Sumeasta päättelystä aiheutuva suorituskyvyn lasku on selvästi nähtävissä.
Suorituskykyero normaalin ja sumean laukaisimen välillä on seurausta sumean
päättelyprosessin auheuttamasta lisälaskennasta. On kuitenkin huomattavaa, että
sääntöjoukon koon kasvattaminen aiheuttaa vain logaritmisen kasvun sumeaan
päättelyyn kuluvaan aikaan.
C-sumean laukaisimen määrityksessä on kolme vaihetta: i) lingvististen
tyyppien määritys, ii) sääntöjoukon muodostus ja iii) laukaisimen määritys.
Seuraavassa käydään esimerkinomaisesti läpi sähkömoottorin
lämpötilakäyttäytymistä tarkkailevan laukaisimen määrittäminen
TEMPO-palvelimessa.
Lingvistinen tyyppi on sumean logiikan keskeisin käsite. Sen arvojoukko
koostuu lukuarvojen sijaan sanoista, lingvistisistä termeistä. Kukin termi
määritellään jäsenyysfunktion (membership function) avulla. Esimerkkilaukaisinta
varten tarvitsemme lingvistiset tyypit 'Lämpötila', 'Nopeus' ja 'HälytysTaso'.
Tyyppien arvojoukot (termijoukot) ovat seuraavat: A(Lämpöila) = {matala,
normaali, korkea}, A(Nopeus) = {pieni, normaali, suuri} ja A(HälytysTaso) =
{neutraali, matala, keskitaso, korkea}. Tyypin 'Lämpötila' arvojoukon määritys
voidaan esittää graafisesti kuvan 4 esittämällä tavalla.
x-akselille asetetulle täsmälliselle arvolle voidaan laskea kunkin termin
jäsenyysaste (= täsmällisen arvon sumeutus). Esimerkiksi arvon 90 C jäsenyysaste
termeille 'matala' ja 'normaali' on 0.5 ja termille 'korkea' jäsenyysaste on
nolla. RQL/F -kielellä lingvistisen tyypin 'Lämpötila' määritys annetaan
seuraavasti:
CREATE LINGUISTIC TYPE Lämpötila float
matala TRAPEZOIDAL (0,
0, 80, 100),
normaali TRAPEZOIDAL (80, 100, 140, 160),
korkea TRAPEZOIDAL (140, 160, 200, 200)
)
Sumean logiikan sääntö on muotoa IF X IS A THEN Y IS B, jossa X ja Y
ovat lingvistisiä muuttujia ja A ja B ovat näiden muuttujien arvoja,
lingvistisiä termejä. Sääntöjoukko on kokoelma edellisen kaltaisia sääntöjä.
TEMPO-palvelimessa sääntöjoukko on toteutettu sääntöjoukkofunktiona, jota
kutsumalla sumea päättely käynnistyy. Päättelyn aluksi funktiokutsussa välitetyt
sääntöjen ehtomuuttujien täsmälliset arvot sumeutetaan, jonka jälkeen päättely
sumeiden sääntöjen avulla voidaan suorittaa. Päättelyn tuloksena saatu sumea
johtopäätös täsmällistetään ja palautetaan funktion kutsujalle. Sähkömoottorin
lämpötilakäyttäytymistä tarkkailevaa laukaisinta varten määrittelemme
sääntöjoukon LämpöHälytys RQL/F -kielellä seuraavasti:
CREATE RULE SET LämpöHälytys (lämpötila Lämpötila, nopeus
Nopeus)
Sääntöjoukon määritelmässä esiintyvä termi HälytysTaso on sumean
päättelyn lingvistinen tulostyyppi. DEFAULT avainsanan jälkeen oleva termi
'neutraali' on kyseistä tyyppiä oleva päättelyn sumea johtopäätös, mikäli
yksikään sääntöjoukon säännöistä ei laukea.
HälytysTaso DEFAULT neutraali (
IF Lämpötila
IS normaali AND Nopeus IS suuri THEN matala,
IF Lämpötila IS
korkea AND Nopeus IS suuri THEN keskitaso,
…
)
C-sumea laukaisin käyttää sääntöjoukkofunktion palauttamaa sumean päättelyn
tulosta laukaisimen ehto-osassa olevan predikaatin evaluointiin. Esimerkkimme
sähkömoottorin lämpötilakäyttäytymisen seurannasta päättyy itse laukaisimen
määrittämiseen RQL/F -kielellä. Määrittelemme laukaisimen siten, että sen
ehto-osa toteutuu ja siten toimintopyyntö generoidaan, jos sääntöjoukkofunktio
palauttaa suuremman arvon kuin kaksi. Oletuksena on, että moottorin
lämpötila-arvot talletetaan TEMPO-palvelimen 'MoottorinLämpö' tietokantataulun
'AsteMäärä' sarakkeeseen ja moottorin nopeus saman taulun 'PyörimisNopeus'
sarakkeeseen.
CREATE TRIGGER MoottorinLämpöHälytin
INSERT ON
MoottorinLämpö
WHEN ( LämpöHälytys(AsteMäärä, PyörimisNopeus) > 2
)
(LämpöHälytys@MoottoriHälytykset)
Jos laukaisimen ehto-osa toteutuu, palvelin lähettää toimintopyynnön
erillisenä prosessina olevalle MoottoriHälytykset toimintopalvelimelle.
Toimintopalvelin suorittaa toimintopyynnössä identifioidun funktion
LämpöHälytys.
Kerättävän raakatiedon määrä kasvaa kiihtyvällä vauhdilla. Valtava
raakatiedon määrä vaatii uusia menetelmiä tietomäärän hallitsemiseksi. Olemme
VTT Tietotekniikassa tutkineet sumean logiikan ja aktiivisen tietokannan
teorioiden yhdistämistä prosessitiedon hallintamenetelmän kehittämiseksi ja
olemme päätyneet uuteen, humaania päättelyä mallintavaan teknologiaan, sumeaan
laukaisimeen. Olemme myös toteuttaneet aktiivisen tietokantapalvelimen
prototyypin, jossa perinteisten ECA-mallisten laukaisimien lisäksi voidaan
määrittää sumeita laukaisimia.
Bou97 Bouaziz, T., Karvonen, J., Pesonen, A. ja Wolski, A. Design and
Implementation of TEMPO Fuzzy Triggers. Proc. 8th International
Conference and Workshop on Database and Expert Systems Applications (DEXA'97),
September 1 - 5, 1997, Toulouse, France.
(ftp://ftp.vtt.fi/pub/projects/rapid/tempo-design.ps).
BoW96a Bouaziz, T. ja Wolski, A. Incorporating fuzzy inference into
database triggers. Research Report No TTE1-2-96, VTT Information Technology,
Espoo, Finland, November 1996.
(ftp://ftp.vtt.fi/pub/projects/rapid/f-infer-triggers.ps).
BoW96b Bouaziz, T. ja Wolski, A. Applying Fuzzy Events to Approximate
Reasoning in Active Databases. Proc. IEEE International Conference on Fuzzy
Systems, July 1 - 5, 1997.
(ftp://ftp.vtt.fi/pub/projects/rapid/f-event-triggers.ps).
PBW96 Pesonen, A., Bouaziz, T. ja Wolski, A. Case Study: Applying Fuzzy
Triggers to a Drive Control System. Research Report No. J-6/96, VTT
Information Technology, Espoo, Finland, August 1996.
WKP96 Wolski, A., Karvonen, J. ja Puolakka, A. The RAPID Case Study:
Requirements for and the Design of a Fast-Response Database System. Proc.
First Workshop on Real-Time Databases (RTDB'96), March 7-8, Newport Beach, CA,
USA, s. 32-39. (ftp://ftp.vtt.fi/pub/projects/rapid/case.ps).
WiC96 Widom, J. ja Ceri S. (Eds.) Active Database Systems: Triggers and
Rules For Advanced Database Processing. Morgan Kaufman, 1996.
Zad65 Zadeh, L. A. Fuzzy Sets. Information Control, Vol. 8(3), June 1965, s. 338-353.