KDB+ Datebank: vu Finanzen bis Formel 1

KDB+, Firmeprodukt KX ass eng wäit bekannt a schmuele Kreeser, extrem séier, columnar Datebank entworf fir Zäitreihe an analytesch Berechnungen baséiert op hinnen ze späicheren. Am Ufank war (an ass) et ganz populär an der Finanzindustrie - all Top 10 Investitiounsbanken a vill bekannte Hedgefongen, Austausch an aner Organisatiounen benotzen se. Viru kuerzem huet KX decidéiert seng Clientsbasis auszebauen an elo Léisungen an anere Beräicher ze bidden, wou et eng grouss Quantitéit un Daten gëtt, organiséiert vun Zäit oder soss - Telekom, Bioinformatik, Fabrikatioun, asw. Si goufen och e Partner vum Aston Martin Red Bull Racing Team an der Formel 1, wou se hëllefen Daten aus Autossensoren ze sammelen an ze verarbeiten an d'Windtunnel Tester ze analyséieren. An dësem Artikel wëll ech Iech soen wat d'Features vu KDB+ et super performant maachen, firwat d'Firmen bereet sinn vill Suen drop ze verbréngen, a schliisslech firwat et net wierklech eng Datebank ass.
 
KDB+ Datebank: vu Finanzen bis Formel 1
 
An dësem Artikel probéieren ech Iech am Allgemengen ze soen wat KDB+ ass, wéi eng Fäegkeeten an Aschränkungen et huet, a wat seng Virdeeler fir Firmen sinn déi grouss Quantitéiten un Daten veraarbecht wëllen. Ech ginn net an d'Detailer vun der Ëmsetzung vu KDB+ oder op d'Detailer vu senger Q-Programméierungssprooch an.Béid vun dësen Theme si ganz breet a verdéngen separat Artikelen. Vill Informatioun iwwer dës Themen kann op code.kx.com fonnt ginn, dorënner e Buch iwwer Q - Q Fir Mortals (kuckt de Link hei ënnen).

E puer Begrëffer

  • In-Memory Datebank. Eng Datebank déi Daten am RAM späichert fir méi séier Zougang. D'Virdeeler vun esou enger Datebank sinn kloer, awer d'Nodeeler sinn d'Méiglechkeet vun Datenverloscht an de Besoin fir vill Erënnerung um Server ze hunn.
  • Kolonn Datebank. Eng Datebank wou Daten Kolonn fir Kolonn gespäichert ginn anstatt Rekord fir Rekord. Den Haaptvirdeel vun esou enger Datebank ass datt d'Donnéeën aus enger Kolonn zesummen op der Disk an an der Erënnerung gespäichert sinn, wat den Zougang dozou wesentlech beschleunegt. Et ass net néideg Spalten ze lueden déi net an der Ufro benotzt ginn. Den Haaptnodeel ass datt et schwéier ass records z'änneren an ze läschen.
  • Zäit Serie. Daten mat engem Datum oder Zäit Kolonn. Normalerweis ass d'Zäituerdnung wichteg fir sou Donnéeën, sou datt Dir einfach feststellt wéi eng Rekord virum oder no der aktueller ass, oder Funktiounen z'applizéieren deenen hir Resultater vun der Uerdnung vun den Opzeechnungen ofhänken. Klassesch Datenbanken sinn op engem komplett anere Prinzip gebaut - representéiert eng Sammlung vu Rekorder als Set, wou d'Uerdnung vun den Opzeechnungen am Prinzip net definéiert ass.
  • Vecteure. Am Kontext vu KDB+ ass dëst eng Lëscht vun Elementer vum selwechten Atomart, zum Beispill Zuelen. An anere Wierder, eng Rei vun Elementer. Arrays, am Géigesaz zu Lëschte, kënne kompakt gespäichert a veraarbecht ginn mat Vektorprozessorinstruktiounen.

 

Historeschen Hannergrond

KX gouf 1993 vum Arthur Whitney gegrënnt, dee virdru bei der Morgan Stanley Bank un der A+ Sprooch geschafft huet, den Nofolger vun der APL - eng ganz originell an eng Kéier populär Sprooch an der Finanzwelt. Natierlech, am KX, huet den Arthur am selwechte Geescht weidergefouert an d'vektorfunktionell Sprooch K erstallt, guidéiert vun den Iddie vum radikale Minimalismus. K Programmer ausgesinn wéi e Jumble vu Punktuatioun a speziellen Zeechen, d'Bedeitung vun de Schëlder a Funktiounen hänkt vum Kontext of, an all Operatioun huet vill méi Bedeitung wéi et a konventionelle Programméierungssproochen mécht. Dofir hëlt e K Programm minimal Plaz op - e puer Zeilen kënnen Säiten vum Text an enger verbose Sprooch wéi Java ersetzen - an ass eng superkonzentréiert Ëmsetzung vum Algorithmus.
 
Eng Funktioun am K déi de gréissten Deel vum LL1 Parser Generator implementéiert no enger bestëmmter Grammatik:

1. pp:{q:{(x;p3(),y)};r:$[-11=@x;$x;11=@x;q[`N;$*x];10=abs@@x;q[`N;x]  
2.   ($)~*x;(`P;p3 x 1);(1=#x)&11=@*x;pp[{(1#x;$[2=#x;;,:]1_x)}@*x]  
3.      (?)~*x;(`Q;pp[x 1]);(*)~*x;(`M;pp[x 1]);(+)~*x;(`MP;pp[x 1]);(!)~*x;(`Y;p3 x 1)  
4.      (2=#x)&(@x 1)in 100 101 107 7 -7h;($[(@x 1)in 100 101 107h;`Ff;`Fi];p3 x 1;pp[*x])  
5.      (|)~*x;`S,(pp'1_x);2=#x;`C,{@[@[x;-1+#x;{x,")"}];0;"(",]}({$[".s.C"~4#x;6_-2_x;x]}'pp'x);'`pp];  
6.   $[@r;r;($[1<#r;".s.";""],$*r),$[1<#r;"[",(";"/:1_r),"]";""]]}  

 Den Arthur verkierpert dës Philosophie vun extremer Effizienz mat engem Minimum vu Kierperbewegungen an der KDB+, déi am Joer 2003 opgetaucht ass (ech mengen et ass elo kloer wou de Buschtaf K am Numm hierkënnt) an näischt anescht ass wéi en Dolmetscher vun der véierter Versioun vum K Sprooch. Eng méi userfrëndlech Versioun gouf uewen op K K genannt Q. Q huet och Ënnerstëtzung bäigefüügt fir e spezifeschen Dialekt vu SQL - QSQL, an den Dolmetscher - Ënnerstëtzung fir Dëscher als Systemdatentyp, Tools fir mat Dëscher ze schaffen an Erënnerung an op Disk, etc.
 
Also aus der Perspektiv vun engem Benotzer ass KDB + einfach e Q Sproochen Dolmetscher mat Ënnerstëtzung fir Dëscher a SQL-ähnlech LINQ-Stil Ausdréck vu C #. Dëst ass dee wichtegsten Ënnerscheed tëscht KDB+ an aner Datenbanken a säin Haaptkompetitivvirdeel, deen dacks iwwersinn gëtt. Dëst ass keng Datebank + behënnert Hëllefssprooch, awer eng vollwäerteg mächteg Programméierungssprooch + agebauter Ënnerstëtzung fir Datebankfunktiounen. Dësen Ënnerscheed wäert eng entscheedend Roll spillen fir all d'Virdeeler vu KDB+ opzezielen. Zum Beispill…
 

Gréisst

No modernen Normen ass KDB + einfach mikroskopesch a Gréisst. Et ass wuertwiertlech eng sub-megabyte ausführbar Datei an eng kleng Textdatei mat e puer Systemfunktiounen. An Realitéit - manner wéi ee Megabyte, a fir dëse Programm Firmen bezuelen zéngdausende vun Dollar pro Joer fir ee Prozessor op de Server.

  • Dës Gréisst erlaabt KDB + super op all Hardware ze fillen - vun engem Pi Mikrocomputer bis Server mat Terabytes Erënnerung. Dëst beaflosst op kee Fall d'Funktionalitéit, ausserdeem fänkt de Q direkt un, wat et erlaabt, ënner anerem als Skriptsprooch ze benotzen.
  • Bei dëser Gréisst passt de Q Dolmetscher ganz an de Prozessor Cache, wat d'Ausféierung vum Programm beschleunegt.
  • Mat dëser Gréisst vun der ausführbarer Datei hëlt de Q Prozess negligibel Plaz an der Erënnerung; Dir kënnt Honnerte vun hinnen lafen. Desweideren, wann néideg, Q kann mat Zénger oder honnerte vu Gigabytes Erënnerung bannent engem eenzege Prozess Bedreiwen.

Vielfältigkeit

Q ass super fir eng breet Palette vun Uwendungen. Prozess Q kann als historesch Datebank Akt a gëtt séier Zougang zu Terabytes vun Informatiounen. Zum Beispill hu mir Dosende vun historeschen Datenbanken, an e puer vun deenen en onkompriméierten Dag vun Daten méi wéi 100 Gigabyte ophuelen. Wéi och ëmmer, ënner raisonnabel Restriktiounen, gëtt eng Ufro un d'Datebank an Zénger bis Honnerte vu Millisekonnen ofgeschloss. Am Allgemengen hu mir en universellen Timeout fir Benotzerufroen - 30 Sekonnen - an et funktionnéiert ganz seelen.
 
Q kéint grad esou einfach eng In-Memory Datebank sinn. Nei Donnéeën ginn sou séier un In-Memory Dëscher bäigefüügt datt d'Benotzerfuerderunge de limitéierende Faktor sinn. Daten an Dëscher ginn a Kolonnen gespäichert, dat heescht datt all Operatioun op enger Kolonn de Prozessor Cache mat voller Kapazitéit benotzt. Zousätzlech zu dësem huet KX probéiert all Basisoperatioune wéi Arithmetik duerch Vektorinstruktiounen vum Prozessor ëmzesetzen, hir Geschwindegkeet maximéieren. Q kann och Aufgaben ausféieren, déi net typesch fir Datenbanken sinn - zum Beispill Streamingdaten veraarbecht an an "Echtzäit" berechnen (mat enger Verzögerung vun Zénger vu Millisekonnen op e puer Sekonnen ofhängeg vun der Aufgab) verschidde Aggregatiounsfunktiounen fir Finanzinstrumenter fir verschidden Zäit Intervalle oder bauen e Modell vun der Afloss vun perfekt Transaktiounen op de Maart an duerchgefouert seng profiling bal direkt no hirer Réalisatioun. An esou Aufgaben ass meeschtens d'Haaptzäit Verspéidung net Q, mä de Besoin fir Daten aus verschiddene Quellen ze synchroniséieren. Héich Geschwindegkeet gëtt erreecht wéinst der Tatsaach datt d'Donnéeën an d'Funktiounen déi se veraarbecht an engem Prozess sinn, an d'Veraarbechtung gëtt reduzéiert fir e puer QSQL Ausdréck a Join auszeféieren, déi net interpretéiert ginn, awer duerch binäre Code ausgefouert ginn.
 
Endlech kënnt Dir all Serviceprozesser am Q schreiwen. Zum Beispill, Gateway Prozesser déi automatesch Benotzer Ufro un déi néideg Datenbanken an Serveren verdeelen. De Programméierer huet komplett Fräiheet fir all Algorithmus fir Balance, Prioritéit, Feelertoleranz, Zougangsrechter, Quoten an am Fong alles wat säin Häerz wënscht, ëmzesetzen. Den Haaptproblem hei ass datt Dir dëst alles selwer muss ëmsetzen.
 
Als Beispill wäert ech oplëschten wéi eng Aarte vu Prozesser mir hunn. All vun hinnen sinn aktiv benotzt a schaffen zesummen, Dosende vu verschiddenen Datenbanken an eent kombinéieren, Veraarbechtung Daten aus MÉI Quellen an Déngscht honnerte vu Benotzer an Uwendungen.

  • Connectoren (feedhandler) fir Datenquellen. Dës Prozesser benotzen typesch extern Bibliothéiken déi an Q gelueden sinn. D'C Interface an Q ass extrem einfach an erlaabt Iech einfach Proxy Funktiounen fir all C / C ++ Bibliothéik ze schafen. Q ass séier genuch fir ze handhaben, zum Beispill, eng Iwwerschwemmung vu FIX Messagen vun allen europäesche Boursse gläichzäiteg ze veraarbecht.
  • Datendistributeuren (tickerplant), déi als Zwëschenverbindung tëscht Connectoren a Konsumenten déngen. Zur selwechter Zäit schreiwen se erakommen Donnéeën op e spezielle binäre Logbuch, fir d'Konsumenten Robustheet géint Verbindungsverloscht oder Neistart ze bidden.
  • In-Memory Datebank (rdb). Dës Datenbanken bidden de schnellsten Zougang zu rau, frëschen Donnéeën andeems se se an der Erënnerung späicheren. Typesch sammelen se Daten an Dëscher am Dag a setzen se an der Nuecht zréck.
  • Persist Datebank (pdb). Dës Datenbanken garantéieren datt Daten fir haut an enger historescher Datebank gespäichert ginn. Als Regel, am Géigesaz zu rdb, späichere se keng Daten an der Erënnerung, awer benotzen e spezielle Cache op der Disk während dem Dag a kopéieren d'Donnéeën um Mëtternuecht an d'historesch Datebank.
  • Historesch Datenbanken (hdb). Dës Datenbanken bidden Zougang zu Daten fir virdrun Deeg, Méint a Joeren. Hir Gréisst (an Deeg) ass nëmmen duerch d'Gréisst vun der Festplack limitéiert. Daten kënnen iwwerall lokaliséiert ginn, besonnesch op verschidden Disken fir den Zougang ze beschleunegen. Et ass méiglech Daten mat e puer Algorithmen ze kompriméieren fir ze wielen. D'Struktur vun der Datebank ass gutt dokumentéiert an einfach, d'Donnéeën sinn Kolonn fir Kolonn a reguläre Dateien gespäichert, sou datt se veraarbecht kënne ginn, och mat Hëllef vum Betribssystem.
  • Datenbanken mat aggregéierten Informatioun. Si späicheren verschidde Aggregatiounen, normalerweis mat, gruppéiert no Instrumentnumm an Zäitintervall. In-Memory Datenbanken aktualiséieren hiren Zoustand mat all erakommende Message, an historesch Datenbanken späicheren virberechent Daten fir den Zougang zu historeschen Donnéeën ze beschleunegen.
  • Endlech Gateway ProzesserService Uwendungen a Benotzer. Q erlaabt Iech eng komplett asynchron Veraarbechtung vun erakommen Messagen ëmzesetzen, se iwwer Datenbanken ze verdeelen, Zougangsrechter z'iwwerpréiwen, etc. Bedenkt datt Messagen net limitéiert sinn an meeschtens net SQL Ausdréck sinn, sou wéi et an anere Datenbanken de Fall ass. Meeschtens ass de SQL Ausdrock an enger spezieller Funktioun verstoppt a gëtt op Basis vun de Parameteren, déi vum Benotzer gefrot ginn, konstruéiert - Zäit gëtt ëmgewandelt, gefiltert, Daten ginn normaliséiert (zum Beispill gëtt de Aktiepräis ausgeglach wann Dividenden bezuelt goufen), etc.

Typesch Architektur fir een Datentyp:

KDB+ Datebank: vu Finanzen bis Formel 1

Speed

Och wann Q eng interpretéiert Sprooch ass, ass et och eng Vektorsprooch. Dëst bedeit datt vill agebaute Funktiounen, besonnesch arithmetesch, Argumenter vun iergendenger Form huelen - Zuelen, Vektoren, Matrixen, Lëschten - an de Programméierer gëtt erwaart de Programm als Arrayoperatioun ëmzesetzen. An esou enger Sprooch, wann Dir zwee Vecteure vun enger Millioun Elementer bäidréit, ass et net méi wichteg datt d'Sprooch interpretéiert gëtt; d'Zousatz gëtt duerch eng superoptimiséiert binär Funktioun ausgeführt. Zënter dem Léiw säin Deel vun der Zäit a Q Programmer op Operatiounen mat Dëscher ausginn, déi dës Basisvektoriséierter Funktiounen benotzen, ass d'Ausgab eng ganz anstänneg Operatiounsgeschwindegkeet, wat eis erlaabt eng enorm Quantitéit un Daten och an engem Prozess ze veraarbecht. Dëst ass ähnlech wéi mathematesch Bibliothéiken am Python - obwuel Python selwer eng ganz lues Sprooch ass, huet et vill exzellent Bibliothéike wéi numpy, déi Iech erlaben numeresch Daten mat der Geschwindegkeet vun enger kompiléierter Sprooch ze veraarbecht (iwwregens, numpy ass ideologesch no bei Q ).
 
Zousätzlech huet KX eng ganz virsiichteg Approche fir Dëscher ze designen an d'Aarbecht mat hinnen ze optimiséieren. Als éischt ginn verschidden Aarte vun Indexen ënnerstëtzt, déi duerch agebaute Funktiounen ënnerstëtzt ginn a kënnen net nëmmen op Tabellkolonnen applizéiert ginn, awer och op all Vecteure - Gruppéierung, Sortéierung, Eenzegaartegkeet Attribut a speziell Gruppéierung fir historesch Datenbanken. Den Index gëtt einfach ugewannt a gëtt automatesch ugepasst wann Elementer an d'Kolonn / Vektor bäigefüügt ginn. Indexe kënnen gläich erfollegräich op Tabellkolonnen souwuel am Gedächtnis wéi op der Disk applizéiert ginn. Wann Dir eng QSQL Ufro ausféiert, ginn Indizes automatesch benotzt wa méiglech. Zweetens gëtt d'Aarbecht mat historeschen Donnéeën duerch de Mechanismus gemaach fir OS Dateien ze weisen (Memory Map). Grouss Dëscher ginn ni an d'Erënnerung gelueden; amplaz ginn déi néideg Kolonnen direkt an d'Erënnerung gemappt an nëmmen deen Deel vun hinnen ass tatsächlech gelueden (Indexen hëllefen och hei) déi gebraucht ginn. Et mécht keen Ënnerscheed fir de Programméierer ob d'Donnéeën an der Erënnerung sinn oder net; de Mechanismus fir mat mmap ze schaffen ass komplett an der Tiefe vum Q verstoppt.
 
KDB+ ass keng relational Datebank; Tabelle kënnen arbiträr Daten enthalen, während d'Uerdnung vun de Reihen an der Tabell net ännert wann nei Elementer bäigefüügt ginn a kënnen a solle benotzt ginn wann Dir Ufroen schreift. Dës Fonktioun ass dréngend gebraucht fir mat Zäitreihen ze schaffen (Daten aus Austausch, Telemetrie, Eventprotokoller), well wann d'Donnéeën no Zäit zortéiert sinn, brauch de Benotzer keng SQL Tricks fir déi éischt oder lescht Zeil oder N ze fannen. Zeilen an der Tabell , bestëmmen wéi eng Linn der Nth Linn folgt, etc. Table joins sinn vereinfacht nach weider, Zum Beispill, fannen déi lescht Devis fir 16000 VOD.L (Vodafone) Transaktiounen an engem Dësch vun 500 Milliounen Elementer dauert ongeféier eng Sekonn op Scheif an Zénger vu Millisekonnen an Erënnerung.
 
E Beispill vun enger Zäit matmaachen - d'Zitattabelle gëtt op d'Erënnerung gemappt, sou datt et net néideg ass VOD.L ze spezifizéieren wou, den Index op der Sym Kolonn an d'Tatsaach datt d'Donnéeën no Zäit zortéiert sinn implizit benotzt ginn. Bal all Joint an Q si regulär Funktiounen, net Deel vun engem ausgewielten Ausdrock:

1. aj[`sym`time;select from trade where date=2019.03.26, sym=`VOD.L;select from quote where date=2019.03.26]  

Schlussendlech ass et derwäert ze notéieren datt d'Ingenieuren op KX, ugefaange mam Arthur Whitney selwer, wierklech mat Effizienz obsesséiert sinn a vill Längt maache fir dat Bescht aus de Standardfeatures vum Q ze kréien an déi allgemeng Benotzungsmuster ze optimiséieren.
 

D 'Resultat

KDB+ ass populär bei Geschäfter haaptsächlech wéinst senger aussergewéinlecher Villsäitegkeet - et déngt gläich gutt als In-Memory Datebank, als Datebank fir Terabytes vun historeschen Donnéeën ze späicheren, an als Plattform fir Datenanalyse. Wéinst der Tatsaach, datt d'Donnéeën Veraarbechtung direkt an der Datebank geschitt, héich Vitesse vun Aarbecht a Ressource spueren erreecht. Eng vollwäerteg Programméierungssprooch integréiert mat Datebankfunktiounen erlaabt Iech de ganze Stack vun erfuerderleche Prozesser op enger Plattform ëmzesetzen - vun der Empfang vun Daten bis zur Veraarbechtung vun de Benotzerufroen.
 

Fir méi Informatiounen,

Defiziter

E wesentlechen Nodeel vu KDB +/Q ass déi héich Entréesschwell. D'Sprooch huet eng komesch Syntax, e puer Funktiounen si staark iwwerlaascht (Wäert, zum Beispill, huet ongeféier 11 Benotzungsfäll). Virun allem, et erfuerdert eng radikal aner Approche fir Programmer ze schreiwen. An enger Vektorsprooch musst Dir ëmmer a punkto Array-Transformatiounen denken, all Schleifen duerch verschidde Varianten vun der Kaart ëmsetzen / reduzéieren Funktiounen (déi Adverbs am Q genannt ginn), an ni probéiert Sue ze spueren andeems Dir Vektoroperatiounen duerch atomarer ersetzt. Zum Beispill, fir den Index vun der Nth Optriede vun engem Element an engem Array ze fannen, sollt Dir schreiwen:

1. (where element=vector)[N]  

obwuel dëst schrecklech ineffizient schéngt duerch C / Java Standarden (= schaaft e boolesche Vecteure, wou de richtege Index vun den Elementer an et zréck). Awer dës Notatioun mécht d'Bedeitung vum Ausdrock méi kloer an Dir benotzt séier Vektoroperatiounen anstatt lues atomarer. De konzeptuellen Ënnerscheed tëscht enger Vektorsprooch an anerer ass vergläichbar mam Ënnerscheed tëscht imperativen a funktionnellen Approche fir ze programméieren, an Dir musst dofir virbereet sinn.
 
E puer Benotzer sinn och net zefridden mat QSQL. De Punkt ass datt et nëmmen wéi richteg SQL ausgesäit. A Wierklechkeet ass et just en Dolmetscher vu SQL-ähnlechen Ausdrock déi keng Ufrooptimiséierung ënnerstëtzt. De Benotzer muss optimal Ufroen selwer schreiwen, an am Q, déi vill sinn net prett fir. Op der anerer Säit, natierlech, kënnt Dir ëmmer déi optimal Ufro selwer schreiwen, anstatt op e Black-Box Optimizer ze vertrauen.
 
Als Plus ass e Buch iwwer Q - Q Fir Mortals gratis verfügbar bei Firma Websäit, et gëtt och vill aner nëtzlech Materialien do gesammelt.
 
En anere groussen Nodeel ass d'Käschte vun der Lizenz. Dat sinn Zéngdausende vun Dollar pro Joer pro CPU. Nëmme grouss Entreprisen kënnen esou Ausgaben leeschten. Viru kuerzem huet KX seng Lizenzpolitik méi flexibel gemaach a bitt d'Méiglechkeet nëmme fir d'Zäit vum Gebrauch ze bezuelen oder KDB+ an de Google an Amazon Wolleken ze lounen. KX bitt och fir erofzelueden fräi Versioun fir net-kommerziell Zwecker (32 Bit Versioun oder 64 Bit op Ufro).
 

Konkurrenten

Et gi zimmlech e puer spezialiséiert Datenbanken op ähnleche Prinzipien gebaut - columnar, am Gedächtnis, fokusséiert op ganz grouss Quantitéiten un Daten. De Problem ass datt dëst spezialiséiert Datenbanken sinn. E markant Beispill ass Clickhouse. Dës Datebank huet e ganz ähnleche Prinzip wéi KDB+ fir Daten op Disk ze späicheren an en Index ze bauen; et mécht e puer Ufroe méi séier wéi KDB+, obwuel net bedeitend. Awer och als Datebank ass Clickhouse méi spezialiséiert wéi KDB+ - Webanalytik vs arbiträr Zäitserie (dësen Ënnerscheed ass ganz wichteg - well et, zum Beispill, am Clickhouse ass et net méiglech d'Uerdnung vun de Rekorder ze benotzen). Awer, am wichtegsten, Clickhouse huet net d'Vielsäitegkeet vu KDB+, eng Sprooch déi d'Veraarbechtung vun Daten direkt an der Datebank erlaabt, anstatt se als éischt an eng separat Applikatioun ze lueden, arbiträr SQL Ausdrock opzebauen, arbiträr Funktiounen an enger Ufro applizéieren, Prozesser erstellen. net verbonne mat der Ausféierung vun historeschen Datebankfunktiounen. Dofir ass et schwéier KDB + mat aneren Datenbanken ze vergläichen; si kënne besser a bestëmmte Benotzungsfäll sinn oder einfach besser wann et ëm klassesch Datebank Aufgaben kënnt, awer ech weess net vun engem anere gläich effektiven a versatile Tool fir temporär Daten ze veraarbecht.
 

Python Integratioun

Fir KDB+ méi einfach ze benotzen fir Leit déi net mat der Technologie vertraut sinn, huet KX Bibliothéike erstallt fir enk mat Python an engem eenzege Prozess z'integréieren. Dir kënnt entweder all Python Funktioun aus Q ruffen, oder vice versa - ruffen all Q Funktioun aus Python (besonnesch QSQL Ausdréck). Bibliothéiken konvertéieren, wann néideg (net ëmmer fir d'Effizienz), Daten aus dem Format vun enger Sprooch an d'Format vun enger anerer. Als Resultat liewen Q a Python an esou enger enker Symbios datt d'Grenzen tëscht hinnen verschwonnen sinn. Als Resultat huet de Programméierer, engersäits, vollen Zougang zu villen nëtzlechen Python-Bibliothéiken, op der anerer Säit kritt hien eng séier Basis fir mat groussen Daten integréiert a Python ze schaffen, wat besonnesch nëtzlech ass fir déi, déi am Maschinnléieren involvéiert sinn. oder Modeller.
 
Schafft mat Q am Python:

1. >>> q()  
2.q)trade:([]date:();sym:();qty:())  
3. q)  
4. >>> q.insert('trade', (date(2006,10,6), 'IBM', 200))  
5. k(',0')  
6. >>> q.insert('trade', (date(2006,10,6), 'MSFT', 100))  
7. k(',1')  

Referenze

De Site vun der Firma - https://kx.com/
Websäit fir Entwéckler - https://code.kx.com/v2/
Buch Q Fir Mortals (op Englesch) - https://code.kx.com/q4m3/
Artikelen iwwer KDB+/Q Uwendunge vu kx Mataarbechter - https://code.kx.com/v2/wp/

Source: will.com

Setzt e Commentaire