KDB+ datu-basea: finantzatik 1 Formulara

KDB+, enpresaren produktua KX Zirkulu estuetan oso ezaguna da, oso azkarra, zutabe datu-basea denbora-serieak eta horietan oinarritutako kalkulu analitikoak gordetzeko diseinatua. Hasieran, oso ezaguna zen (eta da) finantza-industrian - 10 inbertsio-banku nagusi guztiek eta estaldura-funts, truke eta beste erakunde ezagun askok erabiltzen dute. Duela gutxi, KX-k bere bezero-basea zabaltzea erabaki zuen eta orain datu-kopuru handia dagoen beste arlo batzuetan irtenbideak eskaintzea, denboraren arabera edo bestela antolatuta -telekomunikazioak, bioinformatika, fabrikazioa, etab. Aston Martin Red Bull Racing taldearen bazkide ere bihurtu ziren 1 Formulan, non autoen sentsoreen datuak biltzen eta prozesatzen laguntzen baitute eta haize tuneleko probak aztertzen laguntzen dute. Artikulu honetan, esan nahi dizut KDB+-ren zer ezaugarri diren errendimendu handikoa, zergatik dauden enpresak diru asko gastatzeko prest dauden eta, azkenik, zergatik ez den benetan datu-base bat.
 
KDB+ datu-basea: finantzatik 1 Formulara
 
Artikulu honetan saiatuko naiz esaten orokorrean zer den KDB+, zer gaitasun eta muga dituen eta zer onura dituen datu kopuru handiak prozesatu nahi dituzten enpresentzat. Ez naiz sartuko KDB+-ren ezarpenaren xehetasunetan edo bere Q programazio-lengoaiaren xehetasunetan. Bi gai hauek oso zabalak dira eta artikulu bereiziak merezi dituzte. Gai hauei buruzko informazio asko code.kx.com helbidean aurki daiteke, Q - Q For Mortals-i buruzko liburu bat barne (ikus beheko esteka).

Termino batzuk

  • Memoria barneko datu-basea. Datu-base bat RAM-n gordetzen dituen datu-basea azkarrago sartzeko. Datu-base horren abantailak argiak dira, baina desabantailak datuak galtzeko aukera eta zerbitzarian memoria asko eduki beharra dira.
  • Datu-base zutabea. Datu-base bat non datuak zutabez zutabe gordetzen diren erregistroz erregistro baino. Datu-base horren abantaila nagusia da zutabe bateko datuak elkarrekin gordetzen direla diskoan eta memorian, eta horrek nabarmen azkartzen du bertara sartzeko. Ez dago kontsultan erabiltzen ez diren zutabeak kargatu beharrik. Desabantaila nagusia erregistroak aldatzea eta ezabatzea zaila dela da.
  • Denbora seriea. Data edo orduaren zutabea duten datuak. Normalean, denbora ordenatzea garrantzitsua da datu horietarako, eta, beraz, erraz zehaztu dezakezu zein erregistro dagoen aurretik edo jarraitzen duen unekoari, edo haien emaitzak erregistroen ordenaren araberakoak diren funtzioak aplikatzeko. Datu-base klasikoak printzipio guztiz ezberdin baten arabera eraikitzen dira - erregistroen bilduma multzo gisa irudikatzen dute, non erregistroen ordena, printzipioz, definituta ez dagoen.
  • Bektorea. KDB+-ren testuinguruan, mota atomiko bereko elementuen zerrenda bat da, adibidez, zenbakiak. Beste era batera esanda, elementu sorta bat. Matrizeak, zerrendak ez bezala, trinkoki biltegiratu eta prozesatu daitezke prozesadore bektorialaren argibideak erabiliz.

 

Informazio historiko

KX 1993an sortu zen Arthur Whitney-k, lehenago Morgan Stanley Bank-en lan egin zuen A+ hizkuntzan, APLren oinordekoa - finantza-munduko oso hizkuntza originala eta garai batean ezaguna. Jakina, KX-n, Arthur-ek espiritu berean jarraitu zuen eta K hizkuntza bektorial-funtzionala sortu zuen, minimalismo erradikalaren ideiek gidatuta. K programek puntuazio eta karaktere berezien nahasketa bat dirudi, zeinu eta funtzioen esanahia testuinguruaren araberakoa da, eta eragiketa bakoitzak ohiko programazio lengoaietan baino askoz esanahi handiagoa du. Hori dela eta, K programa batek gutxieneko espazioa hartzen du β€”lerro gutxi batzuek testu-orriak ordezka ditzakete Java bezalako hizkuntza zehatz bateanβ€”, eta algoritmoaren inplementazio oso kontzentratua da.
 
K-ko funtzio bat, LL1 analizatzaile-sorgailuaren gehiengoa inplementatzen duen gramatika jakin baten arabera:

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),"]";""]]}  

 Arthurrek 2003an agertu zen KDB+-n gorputz-mugimendu gutxienekin gorpuztu zuen muturreko eraginkortasunaren filosofia hori (uste dut orain argi dagoela izenaren K letra nondik datorren) eta K-ren laugarren bertsioaren interprete bat baino ez da. Q deitzen den K K-ren gainean bertsio atseginagoa gehitu da. Q-k SQL dialekto espezifiko baterako laguntza ere gehitu du - QSQL, eta interpretea - taulak sistemaren datu mota gisa onartzen ditu, taulekin lan egiteko tresnak. memorian eta diskoan, etab.
 
Beraz, erabiltzailearen ikuspuntutik, KDB+ Q hizkuntzako interprete bat besterik ez da, C#-tik taulak eta SQL antzeko LINQ estiloko adierazpenak onartzen dituena. Hau da KDB+ eta beste datu-baseen arteko alderik garrantzitsuena eta bere abantaila lehiakor nagusia, askotan ahaztu egiten dena. Hau ez da datu-base bat + hizkuntza laguntzaile desgaitua, programazio-lengoaia indartsu osoa baizik + datu-basearen funtzioetarako euskarri integratua. Bereizketa honek paper erabakigarria izango du KDB+-ren onura guztiak zerrendatzeko. Adibidez…
 

tamaina

Estandar modernoen arabera, KDB+ tamaina mikroskopikoa besterik ez da. Literalki azpi-megabyte fitxategi exekutagarri bat eta sistemaren funtzio batzuk dituen testu-fitxategi txiki bat da. Egia esan, megabyte bat baino gutxiago, eta programa honetarako enpresek urtean hamarnaka mila dolar ordaintzen dituzte zerbitzarian prozesadore batengatik.

  • Tamaina horri esker, KDB+ edozein hardwaretan ondo senti daiteke - Pi mikroordenagailu batetik hasi eta terabyte-ko memoria duten zerbitzarietaraino. Horrek ez dio funtzionalitateari inola ere eragiten; gainera, Q berehala hasten da, eta horri esker, besteak beste, script-lengoaia gisa erabiltzeko.
  • Tamaina honetan, Q interpretea guztiz sartzen da prozesadorearen cachean, eta horrek programaren exekuzioa bizkortzen du.
  • Fitxategi exekutagarriaren tamaina honekin, Q prozesuak leku gutxi hartzen du memorian; horietako ehunka exekutatu ditzakezu. Gainera, beharrezkoa bada, Q-k hamar edo ehunka gigabyteko memoriarekin funtziona dezake prozesu bakar baten barruan.

aldakortasuna

Q bikaina da aplikazio sorta zabaletarako. Q prozesuak datu-base historiko gisa jardu dezake eta informazio terabyteetarako sarbide azkarra eman dezake. Esaterako, dozenaka datu-base historiko ditugu, eta horietako batzuetan konprimitu gabeko egun batek 100 gigabyte baino gehiago hartzen ditu. Hala ere, arrazoizko murrizketetan, datu-baserako kontsulta bat hamarretatik ehunka milisegundotan osatuko da. Oro har, erabiltzaileen eskaeretarako denbora-muga unibertsala dugu -30 segundo- eta oso gutxitan funtzionatzen du.
 
Q bezain erraz izan liteke memoria barneko datu-base bat. Datu berriak memorian dauden tauletan gehitzen dira hain azkar non erabiltzaileen eskaerak faktore mugatzaileak direla. Tauletako datuak zutabeetan gordetzen dira, hau da, zutabe bateko edozein eragiketak prozesadorearen cachea gaitasun osoan erabiliko du. Honetaz gain, KX oinarrizko eragiketa guztiak, hala nola aritmetika, prozesadorearen instrukzio bektorialen bidez inplementatzen saiatu zen, haien abiadura maximizatzen. Q-k datu-baseetarako ohikoak ez diren zereginak ere egin ditzake; adibidez, streaming datuak prozesatu eta "denbora errealean" kalkulatu (hamarka milisegundotik segundo batzuetara atzerapenarekin zereginaren arabera) finantza-tresnetarako hainbat agregazio-funtzio denbora desberdinetarako. tarteak edo transakzio perfektuek merkatuan duten eraginaren eredua eraiki eta bere profila burutu ondoren ia berehala. Horrelako zereginetan, gehienetan denbora-atzerapen nagusia ez da Q, iturri ezberdinetako datuak sinkronizatu beharra baizik. Abiadura handia lortzen da datuak eta haiek prozesatzen dituzten funtzioak prozesu bakarrean daudelako, eta prozesatzea hainbat QSQL adierazpen eta juntadura exekutatzera murrizten da, interpretatzen ez direnak, kode bitar bidez exekutatzen direnak.
 
Azkenik, Q-n edozein zerbitzu-prozesu idatz ditzakezu. Adibidez, erabiltzaileen eskaerak beharrezko datu-base eta zerbitzarietara automatikoki banatzen dituzten Gateway prozesuak. Programatzaileak askatasun osoa du orekatzeko, lehentasunak, akatsen tolerantzia, sarbide eskubideak, kuotak eta, funtsean, bere bihotzak nahi duen beste edozein algoritmo ezartzeko. Hemen arazo nagusia hau guztia zuk zeuk inplementatu beharko duzula da.
 
Adibide gisa, zer prozesu mota ditugun zerrendatuko dut. Horiek guztiak aktiboki erabiltzen dira eta elkarrekin lan egiten dute, dozenaka datu-base ezberdin konbinatuz, iturri anitzetako datuak prozesatzen dituzte eta ehunka erabiltzaile eta aplikazio zerbitzatzen dituzte.

  • Konektoreak (feedhandler) datu-iturburuetarako. Prozesu hauek normalean Q-n kargatzen diren kanpoko liburutegiak erabiltzen dituzte. Q-en C interfazea oso erraza da eta C/C++ edozein liburutegitarako proxy funtzioak erraz sortzeko aukera ematen du. Q nahikoa azkarra da, adibidez, Europako burtsa guztietako FIX mezu ugari prozesatzeko aldi berean.
  • Datu banatzaileak (tickerplant), lokailuen eta kontsumitzaileen arteko tarteko lotura gisa balio dutenak. Aldi berean, sarrerako datuak erregistro bitar berezi batean idazten dituzte, kontsumitzaileei sendotasuna emanez konexio-galeren edo berrabiarazteko.
  • Memoria barneko datu-basea (rdb). Datu-base hauek datu gordina eta freskoetarako sarbide azkarrena eskaintzen dute, memorian gordeta. Normalean, egunean zehar tauletan pilatzen dituzte datuak eta gauez berrezartzen dituzte.
  • Jarraitu datu-basea (pdb). Datu-base hauek egungo datuak datu-base historiko batean gordetzen direla ziurtatzen dute. Oro har, rdb-k ez bezala, ez dituzte daturik gordetzen memorian, baina egunean zehar diskoan cache berezi bat erabiltzen dute eta gauerdian datuak kopiatu datu-base historikora.
  • Datu-base historikoak (hdb). Datu-base hauek aurreko egun, hilabete eta urteetako datuetarako sarbidea ematen dute. Haien tamaina (egunetan) disko gogorren tamainak soilik mugatzen du. Datuak edonon kokatu daitezke, bereziki disko ezberdinetan sarbidea azkartzeko. Datuak konprimitzeko aukera dago hainbat algoritmo erabiliz. Datu-basearen egitura ondo dokumentatua eta sinplea da, datuak zutabez zutabe gordetzen dira fitxategi arruntetan, prozesatu ahal izateko, sistema eragilearen bidez barne.
  • Informazio agregatua duten datu-baseak. Hainbat agregazio gordetzen dituzte, normalean, tresnaren izenaren eta denbora tartearen arabera taldekatuta. Memorian dauden datu-baseek beren egoera eguneratzen dute sarrerako mezu bakoitzarekin, eta datu-base historikoek aurrez kalkulatutako datuak gordetzen dituzte datu historikoetarako sarbidea azkartzeko.
  • Azkenik, atebide-prozesuakaplikazioei eta erabiltzaileei zerbitzua ematea. Q-k sarrerako mezuen prozesamendu guztiz asinkronoa ezartzeko aukera ematen du, datu-baseetan banatuz, sarbide-eskubideak egiaztatuz, etab. Kontuan izan mezuak ez direla mugatuak eta gehienetan ez direla SQL adierazpenak, beste datu-baseetan gertatzen den bezala. Gehienetan, SQL adierazpena funtzio berezi batean ezkutatzen da eta erabiltzaileak eskatutako parametroetan oinarrituta eraikitzen da - denbora bihurtzen da, iragazten da, datuak normalizatu egiten dira (adibidez, akzioen prezioa berdintzen da dibidenduak ordaindu badira), etab.

Datu mota baterako arkitektura tipikoa:

KDB+ datu-basea: finantzatik 1 Formulara

Abiadura

Q hizkuntza interpretatua den arren, hizkuntza bektoriala ere bada. Horrek esan nahi du integratutako funtzio askok, bereziki aritmetikoek, edozein formatako argumentuak hartzen dituztela (zenbakiak, bektoreak, matrizeak, zerrendak) eta programatzaileak programa array-eragiketa gisa inplementatzea espero dela. Lengoaia horretan, milioi bat elementuko bi bektore gehitzen badituzu, jada ez du axola hizkuntza interpretatzea; gehikuntza funtzio bitar superoptimizatu batek egingo du. Q programetan denboraren zati handiena bektorializatutako oinarrizko funtzio hauek erabiltzen dituzten taulekin eragiketetan gastatzen denez, irteera funtzionamendu-abiadura oso duina da, eta prozesu bakarrean ere datu kopuru handia prozesatzeko aukera ematen digu. Hau Python-en liburutegi matematikoen antzekoa da - Python bera oso hizkuntza motela den arren, numpy bezalako liburutegi bikain asko ditu, datuak konpilatutako hizkuntza baten abiaduran prozesatzeko aukera ematen dutenak (bide batez, numpy ideologikoki Q-tik hurbil dago). ).
 
Horrez gain, KX-k oso ikuspegi zaindua hartu zuen taulak diseinatzeko eta haiekin lana optimizatzeko. Lehenik eta behin, hainbat indize mota onartzen dira, integratutako funtzioek onartzen dituztenak eta taulako zutabeetan ez ezik, edozein bektoretan ere aplika daitezke: taldekatzea, ordenatzea, berezitasun-atributua eta datu-base historikoetarako taldekatze berezia. Indizea besterik gabe aplikatzen da eta automatikoki doitzen da zutabeari/bektoreari elementuak gehitzean. Indizeak berdin aplika daitezke taulako zutabeetan bai memorian bai diskoan. QSQL kontsulta bat exekutatzen denean, indizeak automatikoki erabiltzen dira ahal bada. Bigarrenik, datu historikoekin lana OS fitxategiak bistaratzeko mekanismoaren bidez egiten da (memoria mapa). Taula handiak ez dira inoiz memorian kargatzen; horren ordez, beharrezkoak diren zutabeak zuzenean mapatzen dira memorian eta horien zati hori bakarrik kargatzen da (indizeek ere hemen laguntzen dute) behar den. Programatzaileari ez dio balio datuak memorian dauden ala ez; mmap-ekin lan egiteko mekanismoa Q-ren sakoneran guztiz ezkutatuta dago.
 
KDB+ ez da datu-base erlazional bat; taulek datu arbitrarioak izan ditzakete, eta taulako errenken ordena ez da aldatzen elementu berriak gehitzen direnean eta kontsultak idazterakoan erabil daitezke eta erabili behar dira. Ezaugarri hau premiazkoa da denbora serieekin lan egiteko (trukeetako datuak, telemetria, gertaeren erregistroak), izan ere, datuak denboraren arabera ordenatzen badira, erabiltzaileak ez du SQL trikimailurik erabili behar lehen edo azken errenkada edo N aurkitzeko. taulako errenkadak, zehaztu zein lerrok jarraitzen duen N. lerroari, etab. Taulen elkarketak are gehiago sinplifikatzen dira, adibidez, 16000 milioi elementuko taula batean 500 VOD.L (Vodafone) transakzioen azken aurrekontua aurkitzeak segundo bat inguru behar du diskoan eta hamarnaka milisegundo memorian.
 
Denbora-juntura baten adibidea: aurrekontu-taula memorian mapatzen da, beraz, ez dago VOD.L zehaztu beharrik non, sym zutabeko indizea eta datuak denboraren arabera ordenatuta daudela inplizituki erabiltzen diren. Q-en ia elkartze guztiak funtzio erregularrak dira, ez hautatu adierazpen baten parte:

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

Azkenik, nabarmentzekoa da KX-ko ingeniariak, Arthur Whitney berarekin hasita, eraginkortasunarekin benetan obsesionatuta daudela eta Q-ren ezaugarri estandarrei ahalik eta etekin handiena ateratzeko eta erabilera-eredu ohikoenak optimizatzeko.
 

Guztira

KDB+ ezaguna da enpresen artean, batez ere, bere aldakortasun paregabeagatik; berdin balio du memoria barneko datu-base gisa, datu historikoen terabyte gordetzeko datu-base gisa eta datuen analisirako plataforma gisa. Datuen tratamendua datu-basean zuzenean gertatzen denez, lanaren abiadura handia eta baliabideak aurreztea lortzen da. Datu-baseen funtzioekin integratutako programazio-lengoaia osoak plataforma bakarrean beharrezko prozesu pila osoa inplementatzeko aukera ematen du, datuak jasotzetik erabiltzaileen eskaerak prozesatu arte.
 

Informazio gehiago eskuratzeko,

Mugak

KDB+/Q-ren desabantaila nabarmena sarrera atalase altua da. Hizkuntzak sintaxi bitxia du, funtzio batzuk gainkargatuta daude (balioak, adibidez, 11 erabilera kasu inguru ditu). Garrantzitsuena, programak idazteko ikuspegi arras desberdina eskatzen du. Lengoaia bektorial batean, beti pentsatu behar duzu array-eraldaketan, begizta guztiak mapa/murrizketa funtzioen hainbat aldaeraren bidez inplementatu (Q-n adberbioak deitzen direnak), eta inoiz ez saiatu dirua aurrezten eragiketa bektorialak atomikoekin ordezkatuz. Adibidez, array bateko elementu baten N. agerraldiaren indizea aurkitzeko, idatzi beharko zenuke:

1. (where element=vector)[N]  

nahiz eta hau C/Java estandarren arabera oso deseraginkorra dirudi (= bektore boolearra sortzen du, non bertan dauden elementuen benetako indizeak itzultzen dituen). Baina notazio honek adierazpenaren esanahia argiago uzten du eta eragiketa bektorial azkarrak erabiltzen dituzu atomiko motelen ordez. Lengoaia bektorial baten eta besteen arteko desberdintasun kontzeptuala programazioaren ikuspegi inperatiboen eta funtzionalaren arteko desberdintasunaren parekoa da, eta horretarako prestatuta egon behar duzu.
 
Erabiltzaile batzuk ere ez daude QSQLrekin gustura. Kontua da benetako SQL itxura besterik ez duela. Egia esan, kontsultaren optimizazioa onartzen ez duen SQL antzeko adierazpenen interprete bat besterik ez da. Erabiltzaileak berak idatzi behar ditu kontsulta optimoak, eta Q-n, asko prest ez daudenak. Bestalde, noski, beti idatz dezakezu zuk zeuk kontsulta optimoa, kutxa beltzeko optimizatzaile batean fidatu beharrean.
 
Gainera, Q - Q For Mortals-i buruzko liburu bat doan eskuragarri dago helbidean enpresaren webgunea, beste material baliagarri asko ere bildu dira bertan.
 
Beste desabantaila handi bat lizentziaren kostua da. Urtean hamar mila dolar CPU bakoitzeko. Enpresa handiek bakarrik ordaindu ditzakete horrelako gastuak. Duela gutxi, KX-k bere lizentzia-politika malgutu du eta Google eta Amazon hodeietan KDB+ erabiltzeko edo alokatzeko denbora bakarrik ordaintzeko aukera eskaintzen du. KX-k deskargatzeko aukera ere eskaintzen du doako bertsioa helburu ez komertzialetarako (32 biteko bertsioa edo 64 biteko eskaeraren arabera).
 

lehiakideen

Antzeko printzipioetan eraikitako datu-base espezializatu batzuk daude: zutabeak, memorian, datu kopuru handietara bideratuta. Arazoa da datu-base espezializatuak direla. Adibide deigarri bat Clickhouse da. Datu-base honek KDB+-ren printzipio oso antzekoa du diskoan datuak gordetzeko eta indize bat eraikitzeko; KDB+-k baino azkarrago egiten ditu zenbait kontsulta, baina ez nabarmen. Baina datu-base gisa ere, Clickhouse KDB+ baino espezializatuagoa da - web analitika vs denbora serie arbitrarioak (desberdintasun hau oso garrantzitsua da - horregatik, adibidez, Clickhouse-n ezin da erregistroen ordena erabili). Baina, garrantzitsuena, Clickhouse-k ez du KDB+-ren aldakortasunik, datu-basean datuak zuzenean prozesatzea ahalbidetuko lukeen lengoaia, lehenik aplikazio bereizi batean kargatu beharrean, SQL adierazpen arbitrarioak eraikiz, kontsulta batean funtzio arbitrarioak aplikatuz, prozesuak sortuz. ez dago datu-base historikoen funtzioen exekuzioarekin lotuta. Hori dela eta, zaila da KDB+ beste datu-baseekin alderatzea; erabilera-kasu jakin batzuetan hobeak izan daitezke edo, besterik gabe, datu-baseen ataza klasikoei dagokienez, baina ez dut ezagutzen aldi baterako datuak prozesatzeko beste tresna eraginkor eta polifazetikorik.
 

Python integrazioa

Teknologia ezagutzen ez duten pertsonei KDB+ erabiltzeko errazagoa izan dadin, KX-k liburutegiak sortu zituen Pythonekin ongi integratzeko prozesu bakar batean. Python-eko edozein funtzio dei dezakezu Q-tik, edo alderantziz - deitu Python-eko edozein Q funtzio (bereziki, QSQL adierazpenak). Liburutegiek, beharrezkoa bada (ez beti eraginkortasunaren mesedetan), datuak hizkuntza baten formatutik beste baten formatura bihurtzen dituzte. Ondorioz, Q eta Python hain sinbiosi estuan bizi dira, non bien arteko mugak lausotu egiten baitira. Ondorioz, programatzaileak, alde batetik, Python liburutegi erabilgarri ugaritarako sarbide osoa du, bestetik, oinarri azkar bat jasotzen du Python-en integratutako big datarekin lan egiteko, eta hori bereziki erabilgarria da ikaskuntza automatikoan parte hartzen dutenentzat. edo modelatzea.
 
Q-ekin Python-en lan egitea:

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')  

Erreferentziak

Enpresaren gunea - https://kx.com/
Garatzaileentzako webgunea - https://code.kx.com/v2/
Q For Mortals liburua (ingelesez) - https://code.kx.com/q4m3/
KDB+/Q aplikazioei buruzko artikuluak kx langileen - https://code.kx.com/v2/wp/

Iturria: www.habr.com

Gehitu iruzkin berria