Computerkracht alleen lijkt niet voldoende om de explosief groeiende behoefte aan nog meer verwerkingssnelheid te kunnen bevredigen. Nieuwe systemen zullen ten minste aan twee voorwaarden moeten voldoen. Ze zullen moeten beschikken over ‘uitdrukkingskracht’ en ‘hoge verwerkingssnelheid’. K, een revolutionaire programmeertaal die bij toonaangevende bedrijven elders in de wereld reeds menig verwerkingsprobleem heeft helpen oplossen, geniet in Nederland geen of nauwelijks bekendheid. Hoe komt dat en wat is dat voor een wonder-platform?
Amusement en handel via Internet – de commercie – eisen de huidige computerkracht voor het overgrote deel voor zich op. Op het moment dat we de ogen uitwrijven blijkt er ook nog het een en ander gerekend en gesubtotaliseerd te moeten worden, daar was de computer tenslotte voor uitgevonden: computation.
De grote bedrijvigheid mondt uit in fusies: schaalvergroting, wereldwijd presteren om te overleven. Als gevolg van deze globalisering zal meer geëist worden van de beschikbare computerkracht dan voor browsen en winkelen nodig is. Er zal vraag ontstaan naar systemen die moeiteloos de door de globalisering ontstane grotere aantallen transacties moeten kunnen verwerken.
Herhaalde malen is gebleken dat de klassieke (relationele) database-systemen niet altijd voldoen.
Figuur 1. Toekenningen. |
Het inzetten van steeds krachtiger servers blijkt hierin vaak alleen een doekje voor het bloeden, omdat de behoefte aan ‘instant’ informatie sneller stijgt dan de mogelijkheden die deze oplossing biedt. In complexe systemen vergt het bijwerken van een enkele mutatie soms een tiende tot een hele seconde; daar hoeft men dus niet te denken aan het bijwerken van tienduizenden mutaties. Waar door de globalisering de aantallen transacties tot in de honderdduizenden per dag kunnen oplopen, zullen deze systemen dus niet langer toereikend zijn. De nieuwe systemen zullen ten minste aan twee voorwaarden moeten voldoen. Ze zullen moeten beschikken over uitdrukkingskracht (expressiveness) en hoge verwerkingssnelheid (high performance).
Vectorrepresentatie
Nu kan SQL (structured query language) uitdrukkingskracht niet worden ontzegd. Maar de wijze waarop de gegevens als gevolg van de gekozen opslagmethode gezocht en verwerkt moeten worden kan voor erg veel vertraging zorgen. Meer efficiënte, wellicht onconventionele gegevensmodellen zouden hier het antwoord kunnen zijn. Bijvoorbeeld ‘vectorrepresentatie’. Een moderne PC schrijft en leest moeiteloos binnen een fractie van een seconde een miljoen gegevens als deze gegevens zijn ondergebracht in een vector. Ook is het mogelijk dat in een dergelijke vector bepaalde elementen als beschrijving van de overige elementen opgenomen zijn; dan is er sprake van een zelfbeschrijvende vector. Een eenvoudig voorbeeld kan dit verduidelijken.
Figuur 2. Operatoren: + en * zijn binaire atomische functies,/ en ‘ zijn parallelle operatoren. |
De vector 2 160 50 3 65 1025 120 0 5 40 60 20 120 10 bevat de code voor achtereenvolgens 2, 3, 0 en 5 transacties, bijvoorbeeld van bepaalde beursfondsen. Je weet dus aan de waarde van het eerste element dat het vierde element gegevens bevat over het vervolg van de gegevensstroom. Op zijn beurt verwijst het vierde element naar het achtste, enzovoort. De gegevensstroom kan op deze wijze behalve de aantallen – als in het voorbeeld – eenvoudig nog meer informatie bevatten, bijvoorbeeld de hoogste bieding, de laagste bieding, de gedane bieding, of voor wiens rekening gekocht en verkocht is. Met andere woorden de elementen in de vector kunnen op zichzelf weer vectoren zijn. Er is in deze wijze van gegevensrepresentatie, behalve van nesting, sprake van ‘recurrente’ betrekkingen. Voor de meeste thans beschikbare systemen is dit lastig, zo niet onmogelijk te verwerken. Het systeem moet namelijk ‘onthouden’ wat er vanaf het begin gaande was totdat de laatste codering aan de beurt is. Als de gegevensstroom een groot aantal korte rijtjes bevat dan kan dat onoverkomelijke problemen met zich meebrengen. Parallelle verwerking is dan de oplossing.
Er zal dus geïnvesteerd moeten worden in systemen die dit type gegevensrepresentatie kunnen ‘scannen‘ als betrof het rechtlijnige vectoren. Dergelijke verwerkingssystemen bestaan. Ze worden gekenmerkt door ‘uitdrukkingskracht’ en ‘hoge verwerkingssnelheid’. Ze werken goed samen met de moderne grafische interfaces en draaien op praktisch elk denkbaar platform, maar bijzonder goed op Risc-machines (zie hieronder bij ‘Techniek van het platform’). Vooralsnog worden ze uitsluitend gebruikt bij een beperkt aantal firma’s op Wall Street alsmede door een klein aantal internationale bank- en verzekeringsinstellingen. In de kern van deze systemen bevinden zich de programmeertalen respectievelijk A+ en K. Tot voor kort was de licentie van de laatste zelfs exclusief in handen van één (Zwitserse) bank. De ontwerpers hebben inmiddels een begin gemaakt met het op de markt brengen van hun product.
Toepassingsgebieden van K
Dankzij Arthur Whitney’s ruime ervaring met talen als Fortran, C, APL en Lisp, alsmede met object-georiënteerde systemen, kon het programmeerplatform K ontstaan. Hij zelf zegt: "I am convinced that the best possible programming environment, at least for finance, is one that is based on high-performance list processing with APL-like primitives". Morgan Stanley verhandelt en analyseert voor Wall Street elke dag voor 100 miljoen dollar (1995) aan aandelen.
Figuur 3. ‘Indexing’. |
Tot de grote klanten van K behoren Zürich Insurance, UBS, Lehman Brothers en een softwarebedrijf KZS dat – uitsluitend in K – applicaties bouwt voor grote verzekeraars. Onder de belangrijkste toepassingen scharen zich een hypothekenverkoopsysteem met risico-analyse en real time resultatenrapportage; een applicatie die voor het hoofdkantoor van een bank ‘real time’ honderd handelaren in vastrentende waarden verbindt en de verkopen controleert; de registratie van een mega-pool van handelaren in vastrentende waarden; een grootboek query tool, dat de rapportagetijd terugbrengt van 50 minuten tot 5 seconden.
Verder een risk-managementsysteem voor bedrijfseenheden, dat in staat is naar gegevens te kijken zoals dat voordien nooit mogelijk was. Op die manier zijn de risico’s afdoende te consolideren.
De toepassingen spelen zich voor een groot deel af in de financiële industrie en een lijstje bevat alle in die bedrijfstak bekende activiteiten, als beurs-tradingsystemen, waarderingssystemen voor vastrentende waarden, securities-analyse, risk-management systemen, analyse van aandelenportefeuilles, schattingssystemen, verkoopordersystemen, spreadsheets, koers/winst-berekeningen, trading-simuleringssystemen, kostenbewakingssystemen, termijnhandel- en optiesystemen, hypotheeksystemen, database-servers, Olap-systemen (online analytical processing), intranet-webservers, beslissingsondersteunende hulpmiddelen en gegevenspakhuizen.
Techniek van het platform
Wat nu volgt is gedeeltelijk een samenvattende vrije vertaling van een artikel in Vector (juli 1993) van de hand van Arthur Whitney, de ontwerper van het K-platform. Sommige termen zijn ter wille van de oorspronkelijkheid onvertaald gelaten, ze zijn dan cursief gedrukt. Het is overgenomen met toestemming van de auteur en van de betreffende uitgever.Figuur 4. De functie ‘where’ (&) |
De programmeertaal K is de notatie in het hart van een programmeerplatform dat een hoge verwerkingssnelheid vereist. Deze taal is ontworpen voor het analyseren van massale aantallen ‘real time’ en historische gegevens – ideaal voor financiële modellering. K is snel, bondig, toegankelijk en produktief. Hij verkrijgt zijn snelheid door een incremental compiler en goed ontworpen geheugenbeheer, gegevenstypen en primitieve functies. Hij is universeel doordat hij gemakkelijk te combineren is met andere producten; hij heeft een ingebouwd spreadsheet, grafisch interface en database-management.
Deze taal beschikt over een klein maar krachtig vocabulaire. Elke primitieve functie is een enkel Ascii-teken. De basisbestanddelen, atoms genoemd, zijn lettertekens, getallen en ‘lambda’-uitdrukkingen. Lists worden samengesteld uit items. Elk item is een list of een atom. Een table is een list van lists van gelijke lengte. De overeenkomstige benamingen voor atom, list en table in de wiskunde zijn ‘scalair’, ‘vector’ en ‘matrix’ (figuren 1 en 2).
De lists behoeven niet ‘rechthoekig’ te zijn. Functie-compositie vindt plaats door het naast elkaar plaatsen van functies, waarbij voor de functies f en g ((F G)X) = F G X.
Een andere belangrijke generalisatie is het definiëren van uitdrukkingen tot eerste-klas gegevensobjecten, waarbij elk aantal argumenten is toegestaan (lambda-expressions).
In plaats van een functie als een uitdrukking op te slaan kan de actuele mapping zelf worden opgeslagen. Het opvragen bij wijze van indexing gebruikt dezelfde notatie als het aanroepen van de functie. Dit kan zeer efficiënt zijn.
Semantiek en syntax
De programmeertaal K maakt voor de primitieve functies en voor de operators uitsluitend gebruik van een enkel Ascii-teken. Afhankelijk van de context kan een teken verschillend uitwerken. Met name hangt dit af van het teken dat links van een bepaald teken wordt gebruikt. Bijvoorbeeld: in de uitdrukking a – b, is het minteken gebruikt als ‘verminder a met b’, terwijl in * – 3, eerst 3 negatief wordt gemaakt en vervolgens wordt gebruikt om wat er vóór staat hiermee te vermenigvuldigen.
Figuur 5. Functie-creatie en aanroepen door middel van ‘atomic’ lambda-uitdrukking. |
Verder heeft K een zogenaamde long right scope, dat wil zeggen dat elke functie aan de gang gaat met het resultaat dat onmiddellijk rechts van dat teken ontstaat. Een voorbeeld: in de wiskundige uitdrukking 1 + 2x + x2 wordt ‘x kwadraat’ geëvalueerd, daarna ‘2 maal x’ en tenslotte worden de optellingen van links naar rechts uitgevoerd. In K moet deze uitdrukking worden genoteerd als 1 + (2*x) + x^2 om dezelfde uitkomst te krijgen. Er bestaat dus geen uitvoering van een bepaalde functie met voorrang boven een andere.
Een andere krachtige functie in K is de ‘indexing’-functie. ‘Indexing’ kent cross-sectional en scatter toegang. Een aantal voorbeelden kan dit verduidelijken (figuur 3). Hier lijkt het programmeren zich los te maken van de Von Neumann-stijl.
Verder kan elk element van x vervangen worden door elk willekeurig ‘item’ (zie boven), dus ook door een ‘list’ of door een ‘list of lists’. Een ander voorbeeld van een combinatie van een primitieve functie en ‘indexing’ is de zogenaamde functie ‘where’ (&) (figuur 4).
Tot slot laten we hier zien hoe een functie wordt gedefinieerd. Voor het aanroepen van een functie en indexering gebruiken we dezelfde notatie. Het is tegelijkertijd een voorbeeld van een atomic lambda-uitdrukking (figuur 5).
Kort samengevat
K staat voor ‘Keys to the kingdom’.
De sleutels tot uitdrukkingskracht (expressiveness) zijn:
- eenvoudige en algemene atom en list gegevenstypen;
- eenvoudige en algemene atomic en list primitieve functies;
- een enkel Ascii-symbool voor alle functies;
- identificatie van list index met functie-aanroep;
- symbolische index-mogelijkheid;
- lambda-uitdrukkingen met elk aantal argumenten;
- functie-compositie.
- constante tijd toegang, met name indexing;
- constante tijd zoeken, met name hashing;
- constante tijd append, met name slim geheugenbeheer;
- lineaire tijd sorteren;
- parallelle functies en operatoren;
- incremental compiler.
Sinds kort beschikt het systeem over een interface naar Java. Voor dit jaar staat tevens een eigen database-systeem (Kdb) gepland en een krachtiger SQL (KSQL), die de bestaande SQL92 moet vervangen en die queries toestaat, zoals die tot nu tot niet mogelijk waren.
Jan Karman,
onafhankelijk IT-consultant
Almere
Notoire data-krakers
Nederland heeft een hoog-ontwikkelde financiële en dienstverlenende industrie, die in toenemende mate hogere concentraties vertoont. Door de schaalvergroting groeit het aantal te verwerken transacties navenant. Ook in Nederland zou het K-platform dus in de behoefte aan krachtiger gereedschap kunnen voorzien.
Gedacht kan worden aan de banken, het beursbedrijf, de levens- en schadeverzekeraars, de ziekenfondsen, de grote pensioenfondsen, het groot-winkelbedrijf, de overheid, maar ook de milieubewakingsinstellingen, de meteorologische diensten, de telecommunicatie, de (bio-) chemische industrie, enzovoorts. Kortom alle notoire krakers van massa-gegevens.
Licenties voor K waren tot 1 januari 1998 exclusief in handen van UBS. Sinds die datum hebben twee succesvolle promotie-activiteiten plaatsgevonden, één in New York en één in Toronto. Voor deze zomer (waarschijnlijk de derde week van juli) staat een reis naar Europa gepland. Een nadere locatie is nog niet aangegeven. Maar Amsterdam zou voor dit nieuwe platform zeker het Europese centrum kunnen worden.
Bronnen
Whitney, Arthur: K. Vector Vol.10 No.1, juli 1993.
King, Dan: Where is K? (backgrounder) ACM SIG, lezing naar aanleiding van het juli-nummer van Derivatives Engineering & Technology uit 1994.
K-lite. Voor serieuze geïnteresseerden is er een gratis versie verkrijgbaar met gelimiteerde functionaliteit en duur (60 dagen). Deze versie bevat de taal K, het gui-interface en Ascii-I/O mogelijkheid. Overigens behoren ook de volledige gebruikers- en referentie-handleidingen in PDF-formaat tot deze ingekorte versie.
K-Communiqué (voor relaties) No.1, mei 15, 1998.
Website: http://www.kx.com