MTS ja ADO

22.11.1998

Antti Sillanpää

Ti

Teknillinen Korkeakoulu

asillanp@cc.hut.fi

 

Tiivistelmä

Halusimmepa sitä tai emme, Microsoft jatkaa voittokulkuaan markkinoilla. Yhä useammin tietokanta- ja tapahtumankäsittelyratkaisuiksi valitaan Microsoftin Active Data Objects (ADO) ja Microsoft Transaction Server (MTS). ADO tarjoaa yksinkertaisen rajapinnan, jota käytetään erityisesti tietokantojen käsittelyyn, vaikka ADO ei olekaan rajattu vain tietokantakäyttöön.

MTS on palvelinohjelma, jolla Microsoft pyrkii helpottamaan hajautettujen järjestelmien toteuttamista ja tapahtumankäsittelyä. Kun näitä kahta käytetään yhdessä, saadaan huomattavasti aikaisempaa vaivattomammin hajautettuja tiedonhallintaratkaisuja, jotka kykenevät palvelemaan suuria määriä asiakaspyyntöjä. Samalla tämä parantanee entisestään NT-palvelimien asemaa markkinoilla, kun ainoa mahdollinen palvelimeen sopiva järjestelmä ei enää ole Unix.

1. Johdanto

Tapahtumankäsittely on perinteisesti ollut haastava laji, jonka hallitsevat vain asiantuntijat. Hajautettuihin järjestelmiin on täytynyt toteuttaa monimutkaisia varmistuksia, jotta esimerkiksi tietokantojen data pysyisi yhtenäisenä. Toisaalta järjestelmän on oltava riittävän nopea palvelemaan suurta määrää tapahtumapyyntöjä. Järjestelmien toteuttamisen yksinkertaistamiseksi on kehitelty tapahtumankäsittelyyn ja hajautukseen soveltuvia palvelimia, jotka tekevät tämän "likaisen työn" ohjelmoijien puolesta. Microsoft tarjoaakin Windows-järjestelmälle tarkoitetun Microsoft Transaction Serverin tähän tarkoitukseen.

Tietokantayhteydet voivat myös tuottaa päänvaivaa ohjelmoijalle, jos käytettävä rajapinta ei ole helppokäyttöinen ja riittävän nopea. Microsoft tarjoaa tähän ratkaisuksi rajapintaa nimeltä ActiveX™ Data Objects. Sen tarkoituksena on tehdä tietokannan käytöstä niin helppoa, että ohjelmoijat voivat keskittyä muihin ongelmiin kuin alhaisen tason kannankäsittelyä koskeviin. ADO on kuitenkin varsin uutta teknologiaa ja ainakaan omat kokemukseni siitä eivät ole toistaiseksi olleet kovin positiivisia. Ongelmana on muunmuassa se, että vaikka aihetta koskevaa dokumentaatiota on olemassa, ei sieltä aina tahdo löytää etsimiään vastauksia. Myös yhteistoiminta MTS:n kanssa tuntui olevan hiukan hankalaa, mahdollisesti myöskin puutteellisen dokumentaation takia. Tällä hetkellä uusin versio ADO:sta on 2.0.

2. ADO

ActiveX Data Objects (ADO) mahdollistaa ohjelmien yhteyden tietokantapalvelimeen OLE DB-rajapinnan avulla. ADO:n tärkeimmät päämäärät ovat suuri nopeus, helppokäyttöisyys, vähäinen muistinkäyttö ja vähäinen levynkäyttö [4]. Helppokäyttöisyyteen pyritään tarjoamalla ADO:n käyttäjille kokoelma objekteja, joiden rajapintojen funktioiden avulla luodaan yhteys tietokantaan, luetaan tietoa ja käsitellään sitä.

Yksi näistä objekteista on Connection Object, joka nimensä mukaan edustaa kantayhteyttä. Sillä voidaan myös suoraan suorittaa komentoja tietokannan käsittelemiseksi tai lukemiseksi. [2]

Parempi tapa suorittaa komentoja on kuitenkin Command Objectin avulla. Se edustaa myös nimensä mukaisesti komentoa, esimerkiksi kyselyä. Se voi saada parametrejä ja se voi palauttaa Recordset Objectin, jos komento on kysely. [2]

Recordset Object edustaa kyselyn tuloksena saatavaa dataa. Siinä on kaikki kursorien toiminnallisuus. Toisin sanoen sitä voi selata kuin taulukkoa. Tyypillisesti se edustaa tietokantakyselyn tuloksena saatavaa taulua. [2]

Parameter Objectit edustavat Command Objectille annettavia parametrejä. Field Object edustaa Recordsetin yhtä kenttää, siis tavallisesti relaatiotaulun yhden rivin yhtä parametriä. Error Object edustaa datan lähteen mahdollisesti antamaa virheilmoitusta. [2]

ADO:sta on olemassa kaksi kirjastoa: ADODB ja ADOR, joista ensin mainittu sisältää kaikki yllä luetellut objektit ja soveltuu näin palvelinkoneella käytettäväksi. ADOR taas sisältää vain palvelimelta haetun Recordset Objectin käsittelyyn tarvittavat objectit ilman Connection Objectia, Command Objectia ym. Siksi ADOR soveltuu käytettäväksi asiakaskoneella, jossa vain käsitellään haettua dataa, mutta ei oteta suoria yhteyksiä tietokantaan. [4]

Näitä objekteja käytetään luomalla niitä omassa ohjelmakoodissa tarpeen mukaan ja kutsumalla sitten niiden rajapinnoissa olevia funktioita. Esimerkiksi yksinkertainen tietokantakysely tapahtuu seuraavasti:

Ensin luodaan Connection Object ja annetaan sille parametreiksi tietokannan nimi, käyttäjätunnus ja salasana. Sitten yhteys avataan toisella funktiolla. Luodaan Command Object ja annetaan sille parametriksi suoritettava komento, kuten SQL-kysely merkkijonona. Sitten asetetaan käyttämämme Connection Object Command Objectimme aktiiviseksi yhteydeksi. Seuraavaksi luodaan Recordset Object, jonka on tarkoitus vastaanottaa hausta saatava data. Tämän jälkeen suoritetaan itse kysely. Tässä vaiheessa kantayhteys voidaan haluttaessa jopa sulkea ja Recordset Objectia voidaan käsitellä kuten kursoria perinteisissä kantahauissa. Jos kaikki meni hyvin, data on tallentuneena Recordset Objectin Field Objecteihin, siis yksittäisiin kenttiin. Kaikki tämä tapahtui yksinkertaisia funktioita käyttämällä. Lähteessä [5] kohdassa "Implementing ADO with Various Development Languages" kerrotaan varsin yksityiskohtaisesti, kuinka ADO:a käytetään eri ohjelmointikielillä.

ADO-objektit ovat Component Object Model (COM) -teknologian mukaisia. Hiukan enemmän näistä objekteista kerrotaan muunmuassa lähteessä [2]. ADO:sta on vaikea saada täysin puolueetonta tietoa ainakaan Internetitse, sillä lähes kaikki ADO:sta kirjoitettu on Microsoftin omaa dokumentaatiota. Kirjoja ADO:sta on alkanut ilmestyä vasta aivan hiljattain.

3. UDA

ADO on osa Microsoftin laajempaa suunnitelmaa nimeltä Universal Data Access. UDA on uusi Microsoftin arkkitehtuuri, joka tarjoaa nopean yhteyden monenlaiseen dataan, sekä relaatiomuotoiseen että ei-relationaaliseen monenlaisissa ympäristöissä kaikkialla verkossa [6]. Toisin sanoen ADO ei ole pelkästään uusi rajapinta tietokantojen käyttöön, vaan mitä tahansa dataa voidaan manipuloida ADO:n avulla. UDA selkeyttää ja yksinkertaistaa Microsoftin tiedonhallintastrategiaa yhdistämällä ADO:n, OLE DB:n ja ODBC:n.

Kaksi viimeksi mainittua ovat vanhempia rajapintoja, joihin ADO pohjautuu. Ohjelmoija voi itse päättää, käyttääkö hän suoraan ODBC:tä, joka on kaikkein alimman tason rajapinta näistä kolmesta, vai käyttääkö hän sen sijaan OLE DB:tä tai ADO:a. ADO on näistä korkeimman tason rajapinta, joka käyttää OLE DB:n tarjoamia palveluja, mutta tekee asiat yksinkertaisemmiksi ohjelmoijalle. Lähteessä [5] on hyvä kaavakuva sekä tarkempaa selostusta tästä aiheesta kohdassa "Universal Data Access: It's Not Your Father's Data Anymore".

4. MTS

Microsoft Transaction Server on Distributed COM (DCOM) -teknologiaan perustuva palvelinohjelma, joka huolehtii automaattisesti tapahtumien aloittamisesta ja lopettamisesta. Lähteen [7] mukaan tapahtumankäsittely ei kuitenkaan ole MTS:n ainoa eikä ehkä edes tärkein tehtävä. Sen mukaan myös entistä yksinkertaisempi palvelimien ohjelmointi, hajautettujen järjestelmien ohjelmoinnin helpottaminen ja komponenttien tehokas käyttö ovat MTS:n tuomia etuja. Siksi se oikeastaan on hajautettujen sovellusten palvelin.

MTS toimii Windows NT 4.0-ympäristössä. Sillä voidaan luoda helposti kolmitaso- tai vaikka n-tasoarkkitehtuureja. Toisin sanoen asiakasohjelma voi pyöriä omassa koneessaan palvelimen ollessa eri koneella (johon MTS on asennettu) ja vaikkapa tietokanta vielä kolmannella koneella. MTS huolehtii tällöin siitä, että asiakkaan kutsuessa keskitason (middle tier) palvelimen jotakin palvelua se todella toteutuu ja toimii oikein. Jos asiakkaita on satoja, on olemassa riski, että kaksi tai useampia asiakkaita yrittää samanaikaisesti suorittaa esimerkiksi päivityksen saman tietokannan samaan dataan, jolloin täytyy jotenkin varmistaa, että nämä kaksi päivitystä eivät sotke toisiaan. Toisin sanoen täytyy huolehtia siitä, että päivitysten jälkeen näyttää siltä kuin ne olisi tehty peräkkäin, vaikka itse asiassa palvelupyynnöt olisivat tulleet samanaikaisesti. MTS huolehtii tämänkaltaisista asioista automaattisesti ilman, että palvelimen ohjelmoijan täytyisi itse liata käsiään erilaisten lukkojen ja varmistusten ohjelmointiin.

MTS:iin kuuluu MTS Explorer-niminen ohjelma, jolla voidaan monitoroida ja ylläpitää palvelinprosesseja sekä asentaa uusia palvelinkomponentteja palvelinkoneelle. Näitä komponentteja on helppo kierrättää uudelleenkäytettäviksi ja niitä on helppo saada, koska palvelimet rakennetaan ActiveX-komponenteista. Näin voidaan hyödyntää nykyisellään yli miljardin markan suuruisia valmiiden ActiveX-komponenttien markkinoita. [3]

Käytännössä tosin ActiveX-teknoligiakaan ei ole tainnut onnistua täydellisesti toteuttamaan ohjelmoijien ikiaikaista unelmaa koodin kierrätettävyydestä, johon jo olio-ohjelmoinnilla ja funktiokirjastoilla pyrittiin.

Oman kokemukseni pohjalta MTS:iä hyväksi käyttäviä palvelimia on melko helppo tehdä, käyttää ja ylläpitää, vaikka joitakin ongelmia olenkin kohdannut. Mutta kun kolmitasoarkkitehtuurin mukaiseen keskitason palvelimeen ympätään mukaan ADO:a käyttävää koodia, alkaa ohjelmointi muuttua jo vaikeaksi. Mistään ei tahdo löytyä kunnon dokumentaatiota saatikka esimerkkiohjelmaa siitä, miten näitä kahta (MTS ja ADO) käytetään yhdessä. Joitakin dokumentteja aiheesta jo on, mutta ne käsittelevät poikkeuksetta Active Server Pages (ASP) -koodia, jolla tietyt asiat ovat paljon yksinkertaisemmin tehtävissä kuin esimerkiksi C++:lla.

Miksi sitten pitäisi tehdä kolmitaso- tai peräti n-tasoarkkitehtuureja? Mikä vika vanhassa client/server-mallissa oli? Kun ajatellaan tilannetta, jossa tietokannalla on jopa tuhansia käyttäjiä samanaikaisesti, ei vanha malli toimi riittävän tehokkaasti [1]. Jos jokainen asiakas loisi oman yhteyden tietokantaan, suorittaisi joitain operaatioita ja katkaisisi yhteyden, tietokantapalvelin tukkeutuisi täysin. Tietokantayhteyden avaaminen on nimittäin varsin raskas operaatio.

Mutta kun otetaan kolmitasoarkkitehtuuri käyttöön, palvelinprosessit pyörivät omassa koneessaan tietokannan ollessa omassaan. Kun keskitasolla on jatkuvasti useita palvelinprosesseja toiminnassa ja niillä jokaisella on jo valmiiksi avattu yhteys tietokantaan, ei uutta tietokantayhteyttä tarvitse avata jokaista asiakasta varten erikseen [1]. Asiakas ottaa yhteyden johonkin vapaana olevista palvelinprosesseista (MTS päättää minkä palvelinprosessin se antaa millekin asiakkaalle) ja suorittaa haluamiaan operaatioita käyttäen valmiiksi auki olevaa tietokantayhteyttä [1]. Jos yhtään palvelinprosessia ei ole vapaana, MTS luo uuden ja avaa sille yhteyden tietokantaan, mutta ei tuhoa sitä heti asiakkaan lopetettua. Lisäksi joskus monimutkainenkin businesslogiikka on palvelimella, mikä tekee asiakassovellukset kevyemmiksi.

Microsoftin dokumenteissa tyypillinen MTS-sovellus on Internet-palvelin, jossa palvelin on toteutettu ASP:lla. Käyttäjä täyttää jonkin WWW-lomakkeen ja palvelin hakee tietokannasta kysyttyjä tietoja tai lisää sinne annetun datan. Täysin puolueetonta tietoa ei MTS:stäkään tahdo löytyä. Kuten lähdeluettelostakin huomaa, lähes kaikki aiheeseen liittyvä tieto on Microsoftin julkaisemaa.

5. MTS:n ja ADO:n vaikutukset

Aikoinaan ei ollut epäilystäkään siitä, mikä valitaan palvelinkoneen käyttöjärjestelmäksi: Unix. Mutta nykyään mikrotietokoneiden tehot ovat kasvaneet hurjasti samalla, kun Microsoft on kehitellyt NT-käyttöjärjestelmäänsä ja sille tarkoitettuja palvelinsovelluksia (joista MTS on vain yksi). Siksi yhä useammin palvelimeksi valitaankin PC (oman käsitykseni mukaan), jossa pyörii NT-Server. Tämä luonnollisesti kasvattaa mikromarkkinoita entisestään ja lisää Windowsin, erityisesti NT:n, suosiota. Monet eivät varmasti pidä tällaisesta kehityksestä, sillä se lisää entisestään Microsoftin ylivoimaa softamarkkinoilla. Toisaalta tämä saattaa tehdä joidenkin elämän helpommaksi: Ainakin tavallisen käyttäjän on helpompi käyttää Windowsia kuin Unixia. En silti usko, että mikään horjuttaisi Unixin asemaa pahasti ainakaan lähitulevaisuudessa. Sen verran vannoutunut käyttäjäkuntansa sillä on. Lisäksi lienee yhä alueita, joissa NT-palvelin ei pääse lähellekään Unix-palvelimen suorituskykyä. Mutta Microsoftkin kehittää jatkuvasti sekä MTS:iä että ADO:a, joten odotan innolla uusia (ja toivottavasti entistä toimivampia ja yksinkertaisempia) versioita.

6. Lähteet

[1] Chris Dellinger: Employing Microsoft Transaction Server in Multitier Applications, 8.8.1997 [viitattu 27.9.1998] <http://www.microsoft.com/mind/0797/viper.htm>

[2] Microsoft: ADO Programming Model, 11.8.1997 [viitattu 27.9.1998] <http://www.microsoft.com/data/ado/prodinfo/progmod.htm>

[3] Microsoft / Finland: MTS, Helpoin tapa luoda ja käyttää jaettuja sovelluksia Windows NT Serverin avulla, 7.8.1997 [viitattu 27.9.1998] <http://www.microsoft.com/finland/products/transaction/transaction.htm>

[4] MSDN: ADO Overview, 13.8.1998, [viitattu 27.9.1998] <http://msdn.microsoft.com/developer/sdk/inetsdk/help/ado/idx01.htm?RLD=68>

[5] MSDN: How to Access Your Data Anywhere, 23.9.1998 [viitattu 27.9.1998] <http://msdn.microsoft.com/developer/news/feature/datajul98/default.htm>

[6] Aaron Skonnard: Say UDA for All Your Data Access Needs, 11.3.1998 [viitattu 27.9.1998] <http://www.microsoft.com/mind/0498/uda/uda.htm>

[7] David Vaskevitch: Microsoft Transaction Server—Why Care? 3.12.1996 [viitattu 27.9.1998] <http://204.203.124.10/pdc/html/davidv.htm>

7. Lisätietoja

David Chappell: How Microsoft Transaction Server Changes the COM Programming Model. Yksityiskohtaisia ohjeita siitä, miten palvelinohjelmien ohjelmointia täytyy muuttaa perinteisestä COM-mallista käytettäessä MTS:iä.

David Chappell: Transactions MeetComponents. Lisää teknistä kilkettä. Aloitetaan COM:ista ja DCOM:ista. Sitten siirrytään MTS:iin ja siihen, miten se liittyy COM:iin.

Dina Fleet: Teach Yourself Active Web Database Programming in 21 Days. Yksi luku kirjasta. Käsittelee Internet-palvelimien rakentamista ja ADO:n käyttöä Visual Basicilla ja ASP:lla.

LRTechnologies: Product Overview. MTS:n lyhyt esittely myyntimiehen näkökulmasta.

Russ Marcil / Whatis.com: Microsoft Transaction Server (MTS). Lyhyt määritelmä siitä, mikä MTS on.

Microsoft: ADO Frequently Asked Questions. FAQ koskien ADO:a.

Microsoft: DCOM. Asiaa DCOM:sta, johon MTS perustuu.

Microsoft: Important Information About the Microsoft Data Access Software Development Kit (SDK) and the Microsoft Data Access Components Version 2.0. Asiaa koko Data Access SDK:sta, josta ADO on osa. Täältä linkki download-sivulle.

Microsoft: Microsoft Data Access Components. Microsoft Data Access Components Version 2.0:n dokumentaatio online-muodossa.

Microsoft: Microsoft Transaction Server Databases and Transactions FAQ. FAQ koskien MTS:iä.

Microsoft: Universal Data Access. UDA:ia koskeva sivu, joka sisältää uutisia aiheesta.

MSDN: Technologies For Integrating Data. Kertoo, kuinka päästä käsiksi monenlaisiin datalähteisiin käyttäen samaa Windows-palvelinta.