De programmeertaal K staat bekend om zijn grote uitdrukkingskracht en hoge verwerkingssnelheid. Inmiddels zijn ook de database Kdb en de vraagtaal Ksql beschikbaar gekomen. Deze producten zijn door gebruikers goed onthaald. Vooral in financiële kringen zijn veel enthousiaste aanhangers van de K-omgeving te vinden.
Onder de titel ‘De Onbekende Krachttaal’ stond in Computable (31 juli 1998) een artikel over de taal K. Deze taal wordt gekenmerkt door zowel een grote uitdrukkingskracht als een hoge verwerkingssnelheid. Een aantal voorbeelden maakte duidelijk hoe K werkt.
De sleutels tot de grote uitdrukkingskracht blijken vooral de eenvoudige, efficiënte datatypen (atom en list) en de krachtige primitieve functies die in staat zijn beide typen data probleemloos te verwerken. De hoge verwerkingssnelheid wordt bereikt door de ingenieuze indexing-faciliteit, die zowel op data als op functies van toepassing is, en de parallelle functies en operatoren, een en ander ondersteund door incremental compiler-technieken.
Op verzoek van veel gebruikers bij financiële instituten en op universiteiten heeft Kx Systems een nieuw product op de markt gebracht: Desktop K. Van dit product is een onverkorte trial version van Internet af te halen (http://www.kx.com). Inmiddels zijn ook de database Kdb en de vraagtaal Ksql beschikbaar. Deze producten werden in het artikel van vorig jaar al aangekondigd.
Sneller dan snel
Van het databasesysteem Kdb eb de bijbehorende vraagtaal Ksql zijn ook in een desktop-versie beschikbaar. Ksql is SQL92-compliant. Iemand met ervaring in een andere standaard-SQL zal dus geen problemen hebben met het gebruik van Ksql. Maar er is meer.
Kdb en Ksql zijn ‘gewone’ K-applicaties. Dit betekent dat ze ook samen met de programmeertaal K kunnen worden gebruikt. Men is dus bij het gebruik van Ksql niet uitsluitend aangewezen op de functies van SQL: de voordelen van de kracht van K kunnen onverkort worden benut. Daardoor is Kdb een zeer snelle oltp-engine (‘on-line transaction processing’) met een minimum aan hardware. Kdb is uiterst snel. Op een gewone PC met 64 MB Ram, een ultra-wide controller en vier schijven draait Kdb op een multi-gigabyte dss-applicatie (decision support system) tien maal sneller dan de snelste database tot nu toe, waarvan de resultaten zijn gepubliceerd. En dat tegen een fractie van de kosten.
De basis-datastructuur van Kdb is de arrable (afgeleid van array-table), een tabel waarvan de volgorde naar believen kan worden bepaald. Arrables zijn bijzondere objecten, waarbij een veld in een record kan bestaan uit een array, zodat bijvoorbeeld een gehele tijdreeks kan worden opgeslagen in een enkel veld.
Zoals bij de meeste moderne SQL’s staat ook Ksql door gebruikers gedefinieerde functies binnen database-statements toe. In tegenstelling tot bij andere SQL’s kunnen bij Ksql eenvoudig de functies over de arrays worden gedefinieerd.
Buiten de gebruikelijke SQL-functies beschikt Ksql over een groot aantal extra functies. Bijvoorbeeld het vinden van de op één na hoogste waarde in een reeks. In Ksql is dit een lineaire tijd operatie, terwijl dat in andere SQL’s een extra self join vereist.
Verder beschikt Ksql over functies als het vinden van de n hoogste, de n laagste waarden, voortschrijdende sommeringen, voortschrijdende gemiddelden, voortschrijdende producten en differentiaties als delta’s en ratio’s.
Kdb voert queries serieel uit. Daardoor wordt een locking control vermeden. Om die reden kunnen in gedistribueerde applicaties alle operaties aan alle sites worden gestuurd. Dat gebeurt dan in dezelfde volgorde in plaats van in een twee-fasen overdracht. Daarbij wordt de coherentie over de sites garandeert, zonder blokkering.
Uitdrukkingskracht
Uitdrukkingskracht en verwerkingssnelheid zijn twee kenmerken die K en Ksql en Kdb onderscheiden van concurrerende producten.
Een eenvoudige database zou er als volgt uit kunnen zien:
emp: ([] name: (‘rick’,’dave’, ‘rick’, ’tom’, ‘dave’),
salary: (15, 15, 45 45, 50),
starttime: (1,1,6,8,12),
endtime: (2, 3, 9,16, 15))
show’emp’
Als toelichting kan het volgende worden opgemerkt.
"Create table" wordt in Kdb eenvoudig gedaan door middel van de dubbele punt.
Primaire sleutels worden aangegeven door het desbetreffende veld binnen rechte haken te plaatsen. De lege rechte haken in het eerste statement duiden erop dat er geen primaire sleutel is gedefinieerd en dientengevolge in het betreffende veld duplicate values mogen voorkomen.
De Ksql-functie "show" brengt de tabel genoemd tussen de quotes, in een gui-concept op het scherm, waarin tevens onbeperkt met een enkele muisklik kan worden gesorteerd.
Vraagstuk
De opdracht die we ons nu stellen is wat ingewikkelder: vindt de salarisgemiddelden met begintijd en eindtijd en voeg intervals waar mogelijk samen. Ervaren SQL-ers herkennen dit probleem uit de literatuur herkennen als een vraagstuk van Rick Snodgrass van de University of Arizona.
Stap 1: creëer in één tabel salarissen negatief met eindtijd en salarissen positief met begintijd
t:(select t:endtime, x:-salary from emp) union select t:strattime, x:salary from emp
Stap 2: verander t door een voortschrijdend gemiddelde te creëren
t:select last x by t from select t, (sums x)/sums (0 < x)-0 > x from 't'asc t
Stap 3: tenslotte selecteren we alleen die opeenvolgende intervallen die verschillende gemiddelden hebben. Daarbij zorgen we ervoor dat de velden de juiste namen hebben.
t:select -1 drop x, starttime:-1 drop t, endtime:1 drop t from select from t where
Laat het resultaat zien:
show ’t’
Dankzij de extra functies waarover Ksql beschikt wordt dit probleem in slechts drie statements opgelost.
Ksql kan vanuit de K-omgeving worden aangeroepen en bestuurd. Er kan zich een situatie voordoen waarin bewerkingen te gecompliceerd zijn om met een SQL te worden opgelost. De tabellen die door Ksql zijn gecreëerd of geselecteerd, kunnen dan in de K-omgeving verder worden geanalyseerd en bewerkt. De resultaten worden daarna naar de tabel teruggestuurd en opnieuw door Ksql gepresenteerd.
Verwerkingssnelheid
Hier zou ook kunnen staan ‘verwerkingskracht’. De Enterprise Version van Kdb kent namelijk geen limiet op de omvang van een database. De verwerkingssnelheid kan worden geïllustreerd aan de hand van een aantal reële praktijkvoorbeelden.
- Bij Lehman Brothers resulteert een bepaalde query op een database van 11 miljoen records met enkele honderden kolommen (totaal ongeveer 20 gigabytes) in een tabel van 7500 bij 15 in minder dan een seconde;
- Bij Zürich Insurance worden premietabellen tot 300 miljoen records verwerkt;
- Kdb kan op een Pentium II meer dan 40.000 TCP/B transacties per seconde verwerken op een 100 MB database;
- Op de (eerste generatie) Pentium, 160 Mhz, met 64MB Ram van de auteur worden alle queries (aggregatie-functies, groeperingen, selecties etc.) op een gegenereerde database van 500.000 records met 10 velden zonder merkbare responstijd uitgevoerd. Het creëren van de database zelf neemt ongeveer 5 seconden in beslag.
Ipc- en Webondersteuning
Naast de snelheid en uitdrukkingskracht heeft K nog een aantal andere voordelen, zoals ipc- en Web-ondersteuning (Interprocess Communication).
Omdat K ipc ondersteunt, doet Ksql dat ook.
Dit gaat als volgt:
- de server declareert een poort die de client gaat gebruiken;
- de ontvanger van een request in een server is een functie met een gereserveerde naam;
- daarna zendt de client code een request.
De programmeertaal ondersteunt ook het Web. K-programma’s luisteren direct over een voorgedefinieerde poort. Wanneer een signaal op die poort wordt ontvangen wordt het opgevangen door een gereserveerde functie. Deze functie vertaalt de input en roept dan een normale K-functie aan. Deze kan op zijn beurt weer een Ksql-functie aanroepen.
Samenvattend kan worden gezegd dat de belangrijkste eigenschappen van K en Kdb hun uitdrukkingskracht (tijdreeksen, grote databases, wiskundige bewerkingen) en verwerkingssnelheid zijn.
Een andere belangrijke pré is dat er geen noodzaak bestaat om een interface te bouwen naar verschillende andere programmeeromgevingen. Omdat Kdb een library in K is kan deze snel worden geleerd door iedereen die bekend is met standaard-SQL.
K en Kdb kunnen interacteren met klassieke databasesystemen als Sybase en Oracle. Bijvoorbeeld via Odbc of speciale productgerichte interfaces.
Andere programmeeromgevingen, zoals Java, Visual Basic en Web browsers, kunnen K en Kdb aanroepen via interprocess communication.
Kx Systems heeft door middel van de Desktop-versies van K en Kdb deze producten ook voor de individuele commerciële gebruiker (consultants, ontwikkelaars) bereikbaar gemaakt. Voor persoonlijk gebruik zijn er bovendien ongekorte en steeds hernieuwbare probeerversies beschikbaar.
Jan Karman, onafhankelijk consultant