Baza e të dhënave KDB+: nga financat në Formula 1

KDB+, produkt i kompanisë KX është një bazë e të dhënave e njohur gjerësisht në qarqe të ngushta, jashtëzakonisht e shpejtë, në formë kolone, e krijuar për ruajtjen e serive kohore dhe llogaritjeve analitike të bazuara në to. Fillimisht, ajo ishte (dhe është) shumë e njohur në industrinë financiare - të gjitha 10 bankat kryesore të investimeve dhe shumë fonde mbrojtëse, shkëmbime dhe organizata të tjera të njohura e përdorin atë. Kohët e fundit, KX vendosi të zgjerojë bazën e saj të klientëve dhe tani të ofrojë zgjidhje në fusha të tjera ku ka një sasi të madhe të dhënash, të organizuara sipas kohës ose ndryshe - telekom, bioinformatikë, prodhim, etj. Ata gjithashtu u bënë partnerë të ekipit të Aston Martin Red Bull Racing në Formula 1, ku ndihmojnë në mbledhjen dhe përpunimin e të dhënave nga sensorët e makinave dhe analizimin e testeve të tunelit të erës. Në këtë artikull, dua t'ju tregoj se cilat veçori të KDB+ e bëjnë atë super-performancë, pse kompanitë janë të gatshme të shpenzojnë shumë para për të dhe së fundi, pse nuk është në të vërtetë një bazë të dhënash.
 
Baza e të dhënave KDB+: nga financat në Formula 1
 
Në këtë artikull do të përpiqem t'ju tregoj në përgjithësi se çfarë është KDB+, çfarë aftësish dhe kufizimesh ka dhe cilat janë përfitimet e tij për kompanitë që duan të përpunojnë sasi të mëdha të dhënash. Nuk do të hyj në detajet e zbatimit të KDB+ ose detajet e gjuhës së saj programuese Q. Të dyja këto tema janë shumë të gjera dhe meritojnë artikuj të veçantë. Shumë informacion mbi këto tema mund të gjenden në kod.kx.com, duke përfshirë një libër mbi Q - Q For Mortals (shih lidhjen më poshtë).

Disa terma

  • Baza e të dhënave në memorie. Një bazë të dhënash që ruan të dhënat në RAM për akses më të shpejtë. Përparësitë e një baze të tillë janë të qarta, por disavantazhet janë mundësia e humbjes së të dhënave dhe nevoja për të pasur shumë memorie në server.
  • Baza e të dhënave kolonare. Një bazë të dhënash ku të dhënat ruhen kolonë për kolonë në vend që të regjistrohen sipas regjistrimit. Avantazhi kryesor i një baze të tillë të dhënash është se të dhënat nga një kolonë ruhen së bashku në disk dhe në memorie, gjë që përshpejton ndjeshëm aksesin në të. Nuk ka nevojë të ngarkoni kolona që nuk përdoren në pyetje. Disavantazhi kryesor është se është e vështirë të modifikohen dhe fshihen të dhënat.
  • Seritë kohore. Të dhënat me një kolonë datë ose orë. Në mënyrë tipike, renditja e kohës është e rëndësishme për të dhëna të tilla, kështu që ju mund të përcaktoni lehtësisht se cili rekord i paraprin ose pason atij aktual, ose të aplikoni funksione, rezultatet e të cilave varen nga renditja e regjistrimeve. Bazat e të dhënave klasike janë ndërtuar mbi një parim krejtësisht të ndryshëm - që përfaqësojnë një koleksion të të dhënave si një grup, ku rendi i regjistrimeve, në parim, nuk është i përcaktuar.
  • Vektor. Në kontekstin e KDB+, kjo është një listë e elementeve të të njëjtit lloj atomik, për shembull, numra. Me fjalë të tjera, një grup elementësh. Vargjet, ndryshe nga listat, mund të ruhen në mënyrë kompakte dhe të përpunohen duke përdorur udhëzimet e procesorit vektor.

 

Informacioni historik

KX u themelua në vitin 1993 nga Arthur Whitney, i cili më parë ka punuar në Morgan Stanley Bank në gjuhën A+, pasardhëse e APL - një gjuhë shumë origjinale dhe në një kohë e njohur në botën financiare. Sigurisht, në KX, Arthur vazhdoi me të njëjtën frymë dhe krijoi gjuhën vektoriale-funksionale K, i udhëhequr nga idetë e minimalizmit radikal. Programet K duken si një grumbull shenjash pikësimi dhe karakteresh speciale, kuptimi i shenjave dhe funksioneve varet nga konteksti dhe çdo veprim ka shumë më tepër kuptim sesa në gjuhët e programimit konvencionale. Për shkak të kësaj, një program K merr hapësirë ​​minimale - disa rreshta mund të zëvendësojnë faqet e tekstit në një gjuhë të folur si Java - dhe është një zbatim super i përqendruar i algoritmit.
 
Një funksion në K që zbaton pjesën më të madhe të gjeneratorit të analizuesit LL1 sipas një gramatike të caktuar:

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

 Arthur mishëroi këtë filozofi të efikasitetit ekstrem me një minimum të lëvizjeve të trupit në KDB+, i cili u shfaq në 2003 (mendoj se tani është e qartë se nga vjen shkronja K në emër) dhe nuk është asgjë më shumë se një interpretues i versionit të katërt të K. Një version më miqësor për përdoruesit është shtuar në krye të K K i quajtur Q. Q gjithashtu shtoi mbështetje për një dialekt specifik të SQL - QSQL, dhe përkthyesi - mbështetje për tabelat si lloj i të dhënave të sistemit, mjete për të punuar me tabela në memorie dhe në disk, etj.
 
Pra, nga këndvështrimi i një përdoruesi, KDB+ është thjesht një përkthyes i gjuhës Q me mbështetje për tabela dhe shprehje të stilit LINQ të ngjashme me SQL nga C#. Ky është ndryshimi më i rëndësishëm midis KDB+ dhe bazave të tjera të të dhënave dhe avantazhi i tij kryesor konkurrues, i cili shpesh neglizhohet. Kjo nuk është një bazë të dhënash + gjuhë ndihmëse e çaktivizuar, por një gjuhë programimi e fuqishme e plotë + mbështetje e integruar për funksionet e bazës së të dhënave. Ky dallim do të luajë një rol vendimtar në renditjen e të gjitha përfitimeve të KDB+. Për shembull…
 

Размер

Sipas standardeve moderne, KDB+ është thjesht mikroskopike në madhësi. Është fjalë për fjalë një skedar i ekzekutueshëm nën megabajt dhe një skedar i vogël teksti me disa funksione të sistemit. Në realitet - më pak se një megabajt, dhe për këtë program kompanitë paguajnë dhjetëra mijëra dollarë në vit për një procesor në server.

  • Kjo madhësi lejon që KDB+ të ndihet mirë në çdo harduer - nga një mikrokompjuter Pi te serverët me terabajt memorie. Kjo nuk ndikon në asnjë mënyrë funksionalitetin; për më tepër, Q fillon menjëherë, gjë që e lejon atë të përdoret, ndër të tjera, si një gjuhë skriptimi.
  • Në këtë madhësi, interpretuesi Q përshtatet plotësisht në cache-in e procesorit, i cili përshpejton ekzekutimin e programit.
  • Me këtë madhësi të skedarit të ekzekutueshëm, procesi Q zë hapësirë ​​të papërfillshme në memorie; ju mund të ekzekutoni qindra prej tyre. Për më tepër, nëse është e nevojshme, Q mund të funksionojë me dhjetëra ose qindra gigabajt memorie brenda një procesi të vetëm.

shkathtësi e mendjes

Q është e shkëlqyeshme për një gamë të gjerë aplikacionesh. Procesi Q mund të veprojë si një bazë të dhënash historike dhe të sigurojë akses të shpejtë në terabajt informacion. Për shembull, ne kemi dhjetëra baza të dhënash historike, në disa prej të cilave një ditë e pakompresuar e të dhënave merr më shumë se 100 gigabajt. Megjithatë, nën kufizime të arsyeshme, një pyetje në bazën e të dhënave do të plotësohet në dhjetëra deri në qindra milisekonda. Në përgjithësi, ne kemi një afat kohor universal për kërkesat e përdoruesve - 30 sekonda - dhe funksionon shumë rrallë.
 
Q mund të jetë po aq lehtë një bazë të dhënash në memorie. Të dhënat e reja shtohen në tabelat e memories aq shpejt saqë kërkesat e përdoruesve janë faktori kufizues. Të dhënat në tabela ruhen në kolona, ​​që do të thotë se çdo operacion në një kolonë do të përdorë cache-in e procesorit me kapacitet të plotë. Përveç kësaj, KX u përpoq të zbatonte të gjitha operacionet bazë si aritmetika përmes instruksioneve vektoriale të procesorit, duke maksimizuar shpejtësinë e tyre. Q mund të kryejë gjithashtu detyra që nuk janë tipike për bazat e të dhënave - për shembull, të përpunojë të dhënat e transmetimit dhe të llogaritë në "kohë reale" (me një vonesë nga dhjetëra milisekonda në disa sekonda në varësi të detyrës) funksione të ndryshme grumbullimi për instrumente financiare për kohë të ndryshme intervale ose të ndërtojë një model të ndikimit të transaksioneve të përsosura në treg dhe të kryejë profilin e tij pothuajse menjëherë pas përfundimit të tij. Në detyra të tilla, më shpesh vonesa kryesore kohore nuk është Q, por nevoja për të sinkronizuar të dhënat nga burime të ndryshme. Shpejtësia e lartë arrihet për faktin se të dhënat dhe funksionet që i përpunojnë ato janë në një proces dhe përpunimi reduktohet në ekzekutimin e disa shprehjeve dhe bashkimeve QSQL, të cilat nuk interpretohen, por ekzekutohen me kod binar.
 
Më në fund, mund të shkruani çdo proces shërbimi në Q. Për shembull, Gateway proceson që shpërndan automatikisht kërkesat e përdoruesve në bazat e të dhënave dhe serverët e nevojshëm. Programuesi ka liri të plotë për të zbatuar çdo algoritëm për balancimin, prioritizimin, tolerancën e gabimeve, të drejtat e aksesit, kuotat dhe në thelb çdo gjë tjetër që dëshiron zemra e tij. Problemi kryesor këtu është se ju do të duhet ta zbatoni vetë të gjithë këtë.
 
Si shembull, unë do të rendis se çfarë lloje të proceseve kemi. Të gjitha ato përdoren në mënyrë aktive dhe punojnë së bashku, duke kombinuar dhjetëra baza të dhënash të ndryshme në një, duke përpunuar të dhëna nga burime të shumta dhe duke u shërbyer qindra përdoruesve dhe aplikacioneve.

  • Lidhës (feedhandler) me burimet e të dhënave. Këto procese zakonisht përdorin biblioteka të jashtme që ngarkohen në Q. Ndërfaqja C në Q është jashtëzakonisht e thjeshtë dhe ju lejon të krijoni me lehtësi funksione proxy për çdo bibliotekë C/C++. Q është mjaft i shpejtë për të trajtuar, për shembull, përpunimin e një përmbytjeje të mesazheve FIX nga të gjitha bursat evropiane në të njëjtën kohë.
  • Shpërndarësit e të dhënave (bimën e biletave), të cilat shërbejnë si një lidhje e ndërmjetme midis lidhësve dhe konsumatorëve. Në të njëjtën kohë, ata shkruajnë të dhënat hyrëse në një regjistër binar të veçantë, duke siguruar qëndrueshmëri për konsumatorët ndaj humbjeve ose rinisjes së lidhjes.
  • Baza e të dhënave në memorie (rdb). Këto baza të të dhënave ofrojnë aksesin më të shpejtë të mundshëm në të dhëna të papërpunuara dhe të freskëta duke i ruajtur ato në memorie. Në mënyrë tipike, ata grumbullojnë të dhëna në tabela gjatë ditës dhe i rivendosin ato gjatë natës.
  • Baza e të dhënave të vazhdueshme (PDB). Këto baza të të dhënave sigurojnë që të dhënat për sot të ruhen në një bazë të dhënash historike. Si rregull, ndryshe nga rdb, ata nuk ruajnë të dhëna në memorie, por përdorin një cache të veçantë në disk gjatë ditës dhe kopjojnë të dhënat në mesnatë në bazën e të dhënave historike.
  • Bazat e të dhënave historike (hdb). Këto baza të të dhënave ofrojnë akses në të dhënat për ditët, muajt dhe vitet e mëparshme. Madhësia e tyre (në ditë) kufizohet vetëm nga madhësia e hard disqeve. Të dhënat mund të vendosen kudo, veçanërisht në disqe të ndryshëm për të shpejtuar aksesin. Është e mundur të kompresohen të dhënat duke përdorur disa algoritme për të zgjedhur. Struktura e bazës së të dhënave është e dokumentuar mirë dhe e thjeshtë, të dhënat ruhen kolonë për kolonë në skedarë të rregullt, në mënyrë që të mund të përpunohen, duke përfshirë edhe sistemin operativ.
  • Baza e të dhënave me informacion të përmbledhur. Ata ruajnë grumbullime të ndryshme, zakonisht me, të grupuara sipas emrit të instrumentit dhe intervalit kohor. Bazat e të dhënave në memorie përditësojnë gjendjen e tyre me çdo mesazh në hyrje dhe bazat e të dhënave historike ruajnë të dhëna të llogaritura paraprakisht për të shpejtuar aksesin në të dhënat historike.
  • Së fundi, proceset e portësshërbimin e aplikacioneve dhe përdoruesve. Q ju lejon të zbatoni përpunimin plotësisht asinkron të mesazheve në hyrje, shpërndarjen e tyre nëpër baza të të dhënave, kontrollimin e të drejtave të aksesit, etj. Vini re se mesazhet nuk janë të kufizuara dhe më shpesh nuk janë shprehje SQL, siç është rasti në bazat e tjera të të dhënave. Më shpesh, shprehja SQL fshihet në një funksion të veçantë dhe ndërtohet në bazë të parametrave të kërkuar nga përdoruesi - koha konvertohet, filtrohet, të dhënat normalizohen (për shembull, çmimi i aksionit barazohet nëse paguhen dividentët), etj.

Arkitektura tipike për një lloj të dhënash:

Baza e të dhënave KDB+: nga financat në Formula 1

Shpejtësi

Megjithëse Q është një gjuhë e interpretuar, ajo është gjithashtu një gjuhë vektoriale. Kjo do të thotë se shumë funksione të integruara, veçanërisht ato aritmetike, marrin argumente të çdo forme - numra, vektorë, matrica, lista - dhe programuesi pritet të zbatojë programin si operacione të grupeve. Në një gjuhë të tillë, nëse shtoni dy vektorë të një milion elementësh, nuk ka më rëndësi që gjuha të interpretohet; shtimi do të kryhet nga një funksion binar super i optimizuar. Meqenëse pjesa më e madhe e kohës në programet Q shpenzohet në operacione me tabela që përdorin këto funksione bazë të vektorizuara, prodhimi është një shpejtësi shumë e mirë operimi, duke na lejuar të përpunojmë një sasi të madhe të dhënash edhe në një proces. Kjo është e ngjashme me bibliotekat matematikore në Python - megjithëse vetë Python është një gjuhë shumë e ngadaltë, ajo ka shumë biblioteka të shkëlqyera si numpy që ju lejojnë të përpunoni të dhëna numerike me shpejtësinë e një gjuhe të përpiluar (nga rruga, numpy është ideologjikisht afër Q ).
 
Për më tepër, KX mori një qasje shumë të kujdesshme për hartimin e tabelave dhe optimizimin e punës me to. Së pari, mbështeten disa lloje indeksesh, të cilat mbështeten nga funksione të integruara dhe mund të aplikohen jo vetëm në kolonat e tabelave, por edhe në çdo vektor - grupimi, renditja, atributi i veçantisë dhe grupimi i veçantë për bazat e të dhënave historike. Indeksi aplikohet thjesht dhe rregullohet automatikisht kur shtohen elementë në kolonë/vektor. Indekset mund të aplikohen në mënyrë të barabartë me sukses në kolonat e tabelave si në memorie ashtu edhe në disk. Kur ekzekutoni një pyetje QSQL, indekset përdoren automatikisht nëse është e mundur. Së dyti, puna me të dhënat historike bëhet përmes mekanizmit për shfaqjen e skedarëve OS (harta e memories). Tabelat e mëdha nuk ngarkohen kurrë në memorie; përkundrazi, kolonat e nevojshme vendosen direkt në memorie dhe vetëm ajo pjesë e tyre ngarkohet në të vërtetë (këtu ndihmojnë edhe indekset) që nevojiten. Nuk ka asnjë ndryshim për programuesin nëse të dhënat janë në memorie apo jo; mekanizmi për të punuar me mmap është plotësisht i fshehur në thellësitë e Q.
 
KDB+ nuk është një bazë të dhënash relacionale; tabelat mund të përmbajnë të dhëna arbitrare, ndërsa rendi i rreshtave në tabelë nuk ndryshon kur shtohen elementë të rinj dhe mund dhe duhet të përdoren gjatë shkrimit të pyetjeve. Kjo veçori nevojitet urgjentisht për të punuar me seritë kohore (të dhëna nga shkëmbimet, telemetria, regjistrat e ngjarjeve), sepse nëse të dhënat renditen sipas kohës, atëherë përdoruesi nuk ka nevojë të përdorë asnjë truk SQL për të gjetur rreshtin e parë ose të fundit ose N. rreshtave në tabelë, përcaktoni se cila rresht ndjek rreshtin e N-të, etj. Lidhjet e tabelave thjeshtohen edhe më tej, për shembull, gjetja e kuotës së fundit për 16000 transaksione VOD.L (Vodafone) në një tabelë me 500 milionë elementë kërkon rreth një sekondë në disk dhe dhjetëra milisekonda në memorie.
 
Një shembull i një lidhjeje kohore - tabela e kuotave është hartuar në memorie, kështu që nuk ka nevojë të specifikohet VOD.L ku, indeksi në kolonën sym dhe fakti që të dhënat janë renditur sipas kohës përdoren në mënyrë implicite. Pothuajse të gjitha bashkimet në Q janë funksione të rregullta, jo pjesë e një shprehjeje të zgjedhur:

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

Së fundi, vlen të përmendet se inxhinierët në KX, duke filluar nga vetë Arthur Whitney, janë vërtet të fiksuar pas efikasitetit dhe bëjnë përpjekje të mëdha për të përfituar sa më shumë nga veçoritë standarde të Q dhe për të optimizuar modelet më të zakonshme të përdorimit.
 

Total

KDB+ është i popullarizuar në mesin e bizneseve kryesisht për shkak të shkathtësisë së tij të jashtëzakonshme - shërben po aq mirë si një bazë të dhënash në memorie, si një bazë të dhënash për ruajtjen e terabajteve të të dhënave historike dhe si një platformë për analizën e të dhënave. Për shkak të faktit se përpunimi i të dhënave ndodh drejtpërdrejt në bazën e të dhënave, arrihet shpejtësia e lartë e punës dhe kursimi i burimeve. Një gjuhë programimi e plotë e integruar me funksionet e bazës së të dhënave ju lejon të zbatoni të gjithë grumbullin e proceseve të nevojshme në një platformë - nga marrja e të dhënave deri tek përpunimi i kërkesave të përdoruesve.
 

Për më shumë informacion,

Kufizimet

Një disavantazh i rëndësishëm i KDB+/Q është pragu i lartë i hyrjes. Gjuha ka një sintaksë të çuditshme, disa funksione janë shumë të mbingarkuara (vlera, për shembull, ka rreth 11 raste përdorimi). Më e rëndësishmja, ajo kërkon një qasje rrënjësisht të ndryshme për të shkruar programe. Në një gjuhë vektoriale, duhet të mendoni gjithmonë në terma të transformimeve të vargjeve, të zbatoni të gjitha nyjet përmes disa varianteve të funksioneve të hartës/zvogëlimit (të cilat quhen ndajfolje në Q) dhe të mos përpiqeni kurrë të kurseni para duke zëvendësuar operacionet vektoriale me ato atomike. Për shembull, për të gjetur indeksin e shfaqjes së N-të të një elementi në një grup, duhet të shkruani:

1. (where element=vector)[N]  

megjithëse kjo duket tmerrësisht joefikase sipas standardeve C/Java (= krijon një vektor boolean, ku kthen indekset e vërteta të elementeve në të). Por ky shënim e bën më të qartë kuptimin e shprehjes dhe ju përdorni veprime të shpejta vektoriale në vend të atyre atomike të ngadalta. Dallimi konceptual midis një gjuhe vektoriale dhe të tjerave është i krahasueshëm me ndryshimin midis qasjeve imperative dhe funksionale të programimit, dhe ju duhet të jeni të përgatitur për këtë.
 
Disa përdorues janë gjithashtu të pakënaqur me QSQL. Çështja është se duket vetëm si SQL e vërtetë. Në realitet, është thjesht një interpretues i shprehjeve të ngjashme me SQL që nuk mbështet optimizimin e pyetjeve. Përdoruesi duhet të shkruajë vetë pyetje optimale, dhe në Q, për të cilat shumë nuk janë gati. Nga ana tjetër, sigurisht, gjithmonë mund të shkruani vetë pyetjen optimale, në vend që të mbështeteni në një optimizues të kutisë së zezë.
 
Si plus, një libër mbi Q - Q For Mortals është në dispozicion falas në faqen e internetit të kompanisë, aty janë mbledhur edhe shumë materiale të tjera të dobishme.
 
Një tjetër disavantazh i madh është kostoja e licencës. Kjo është dhjetëra mijëra dollarë në vit për CPU. Vetëm kompanitë e mëdha mund të përballojnë shpenzime të tilla. Kohët e fundit, KX e ka bërë politikën e saj të licencimit më fleksibël dhe ofron mundësinë për të paguar vetëm kohën e përdorimit ose marrjen me qira të KDB+ në retë e Google dhe Amazon. KX gjithashtu ofron për shkarkim version falas për qëllime jo komerciale (versioni 32 bit ose 64 bit sipas kërkesës).
 

konkurrentët

Ka mjaft baza të dhënash të specializuara të ndërtuara mbi parime të ngjashme - kolone, në memorie, të fokusuara në sasi shumë të mëdha të dhënash. Problemi është se këto janë baza të të dhënave të specializuara. Një shembull i mrekullueshëm është Clickhouse. Kjo bazë të dhënash ka një parim shumë të ngjashëm me KDB+ për ruajtjen e të dhënave në disk dhe ndërtimin e një indeksi; ajo kryen disa pyetje më shpejt se KDB+, edhe pse jo në mënyrë të konsiderueshme. Por edhe si bazë të dhënash, Clickhouse është më i specializuar se KDB+ - analitika në internet kundër serive kohore arbitrare (ky ndryshim është shumë i rëndësishëm - për shkak të tij, për shembull, në Clickhouse nuk është e mundur të përdoret renditja e regjistrimeve). Por, më e rëndësishmja, Clickhouse nuk ka shkathtësinë e KDB+, një gjuhë që do të lejonte përpunimin e të dhënave drejtpërdrejt në bazën e të dhënave, në vend që t'i ngarkonte ato së pari në një aplikacion të veçantë, të ndërtonte shprehje arbitrare SQL, të aplikonte funksione arbitrare në një pyetje, të krijonte procese. nuk lidhet me ekzekutimin e funksioneve të bazës së të dhënave historike. Prandaj, është e vështirë të krahasosh KDB+ me bazat e të dhënave të tjera; ato mund të jenë më të mira në raste të caktuara përdorimi ose thjesht më të mira kur bëhet fjalë për detyrat klasike të bazës së të dhënave, por unë nuk di ndonjë mjet tjetër po aq efektiv dhe të gjithanshëm për përpunimin e të dhënave të përkohshme.
 

Integrimi me Python

Për ta bërë KDB+ më të lehtë për t'u përdorur për njerëzit që nuk janë të njohur me teknologjinë, KX krijoi biblioteka për t'u integruar fort me Python brenda një procesi të vetëm. Mund të telefononi ose çdo funksion Python nga Q, ose anasjelltas - thirrni çdo funksion Q nga Python (në veçanti, shprehjet QSQL). Bibliotekat konvertojnë, nëse është e nevojshme (jo gjithmonë për hir të efikasitetit), të dhënat nga formati i një gjuhe në formatin e një tjetre. Si rezultat, Q dhe Python jetojnë në një simbiozë kaq të ngushtë saqë kufijtë midis tyre janë të paqarta. Si rezultat, programuesi, nga njëra anë, ka akses të plotë në biblioteka të shumta të dobishme Python, nga ana tjetër, ai merr një bazë të shpejtë për të punuar me të dhëna të mëdha të integruara në Python, e cila është veçanërisht e dobishme për ata që janë të përfshirë në mësimin e makinerive. ose modelimi.
 
Puna me Q në 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')  

Referencat

Faqja e kompanisë - https://kx.com/
Uebfaqe për zhvilluesit - https://code.kx.com/v2/
Libri Q Për të Vdekshmit (në anglisht) - https://code.kx.com/q4m3/
Artikuj mbi aplikacionet KDB+/Q nga punonjësit e kx - https://code.kx.com/v2/wp/

Burimi: www.habr.com

Shto një koment