Andmebaas KDB+: finansidest kuni „F1“

KDB+, ettevĂ”tte toode KX — on kitsastes ringkondades laialdaselt tuntud, ÀÀrmiselt kiire veergude andmebaas, mis on mĂ”eldud ajaliste ridade salvestamiseks ja nende pĂ”hjal analĂŒĂŒtiliste arvutuste tegemiseks. Algusaegadel nautis see suurt populaarsust finantssektoris — seda kasutavad kĂ”ik kĂŒmme parimat investeerimispanka ning paljud tuntud riskifondid, börsid ja muud organisatsioonid. Viimasel ajal on KX otsustanud laiendada oma kliendibaasi ja pakub nĂŒĂŒd lahendusi ka teistes valdkondades, kus on palju andmeid, mis on ajaliselt vĂ”i muul viisil jĂ€rjestatud — telekommunikatsioon, bioinformaatika, tootmine jne. Nende seas on nad saanud Aston Martin Red Bull Racing meeskonna partneriks vormel 1 sarjas, kus nad aitavad koguda ja töödelda andmeid sĂ”idukite anduritelt ning analĂŒĂŒsida tuuletunnelitest toimunud teste. Selles artiklis tahan rÀÀkida, millised omadused teevad KDB+ ÀÀrmiselt vĂ”imekaks, miks ettevĂ”tted on valmis sellele suuri summasid investeerima, ja lĂ”puks, miks see tegelikult ei ole tavaline andmebaas.
 
Andmebaas KDB+: finansidest kuni „F1“
 
Selles artiklis pĂŒĂŒan ĂŒldiselt selgitada, mida KDB+ endast kujutab, millised on selle vĂ”imalused ja piirangud, ning kuidas see on kasulik ettevĂ”tetele, kes soovivad töötelda suuri andmemahtusid. Ma ei kavatse sĂŒveneda KDB+ rakendamise detailidesse ega selle programmeerimiskeelde Q. Need teemad on vĂ€ga mahukad ja vÀÀrivad eraldi artikleid. Palju teavet nende teemade kohta on saadaval veebisaidil code.kx.com, sealhulgas raamat Q kohta — Q For Mortals (vt allolevat linki).

MÔned mÔisted

  • MĂ€lupĂ”hine andmebaas. Andmebaas, mis salvestab andmeid operatiivmĂ€lu, et kiirendada juurdepÀÀsu. Sellise andmebaasi eelised on selged, kuid puudused — andmete kadumise vĂ”imalus ja vajadus serveris suure mĂ€lu jĂ€rele.
  • Veergude andmebaas. Andmebaas, kus andmed on salvestatud veergude kaupa, mitte ridade kaupa. Sellise andmebaasi peamine eelis on see, et sama veeru andmed on diskil ja mĂ€lus koos, mis oluliselt kiirendab nendele juurdepÀÀsu. Pole vaja laadida veerge, mida pĂ€ringus ei kasutata. Peamine puudus — salvestuste modifitseerimine ja kustutamine on keeruline.
  • Ajaline rida. Aegadeed on kuupĂ€eva vĂ”i aja tĂŒĂŒpi. Reeglina on selliste andmete puhul oluline ajajĂ€rjestus, et saaks kergesti kindlaks teha, milline kirje eelneb vĂ”i jĂ€rgneb praegusele, vĂ”i et saaks rakendada funktsioone, mille tulemus sĂ”ltub kirjejĂ€rjestusest. Klassikalised andmebaasid on rajatud tĂ€iesti teistsugusele pĂ”himĂ”ttele — kirje kogumi esitamine kui hulk, kus kirjejĂ€rjestus ei ole pĂ”himĂ”tteliselt mÀÀratletud.
  • Vektor. Kontekstis KDB+ — see on ĂŒhe aatomaarse tĂŒĂŒbi elementide loetelu, nĂ€iteks numbrid. TeisisĂ”nu, elementide massiiv. Massiivid, erinevalt loenditest, on kompaktselt salvestatavad ja töötlemiseks saab kasutada protsessori vektoriinstruktsioone.

 

2DOMAINS on 16 aastat teeninud professionaale, kes on valmis maksma vaid nende valikute eest, mida nad tÔeliselt kasutavad.

KX asutati 1993. aastal Arthur Whitney poolt, kes töötas varem Morgan Stanley pangas A+ keele kallal — APL-i jĂ€rglane, mis oli oma aja jooksul vĂ€ga originaalne ja populaarne keel finantsmaailmas. Loomulikult jĂ€tkas Arthur KX-is samas vaimus ja lĂ”i vektorfunktsionaalse keele K, juhindudes radikaalse minimalismi ideedest. K keeles kirjutatud programmid nĂ€evad vĂ€lja nagu kaootiline mĂ€rkide kogum, kus mĂ€rkide ja funktsioonide tĂ€hendus sĂ”ltub kontekstist, ja igal toimingul on palju rohkem tĂ€hendust kui tavapĂ€rastel programmeerimiskeeltes. SeetĂ”ttu vĂ”tab K keeles kirjutatud programm minimaalset ruumi — mitu rida vĂ”ivad asendada lehekĂŒlgi tekstis keerulises keeles nagu Java — ning on ĂŒlimalt kontsentreeritud algoritmi rakendus.
 
K keeles kirjutatud funktsioon, mis realiseerib suure osa LL1 parseri generaatorist vastavalt mÀÀratud grimaatikale:

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

 Selle ÀÀrmise efektiivsuse filosoofiat, mis nĂ”uab minimaalseid liigutusi, rakendas Arthur ka KDB+ sĂŒsteemis, mis ilmus 2003. aastal (ma arvan, nĂŒĂŒd on selge, kust tuli K-kiri nimele) ja on tegelikult neljanda versiooni K keele tĂ”lgendaja. K-le on lisatud kasutajasĂ”bralikum versioon K nimega Q. Q-s on ka lisatud toetus spetsiifilisele SQL dialektile – QSQL, ning tĂ”lgendajasse on sisse ehitatud toetus tabelitele kui sĂŒsteemi andmetĂŒĂŒpidele, mĂ€lus ja kĂ”vakettal töötamise vahendid jne.
 
Seega, kasutaja vaatenurgast on KDB+ lihtsalt Q keele tĂ”lgendaja, mis toetab tabeleid ja SQL-stiilis LINQ vĂ€ljendeid C#-st. See on KDB+ ĂŒks olulisemaid erinevusi teistest andmebaasidest ja peamine konkurentsieelis, mida sageli tĂ€helepanuta jĂ€etakse. See ei ole andmebaas + abikeel, vaid tĂ€ielik vĂ”imekas programmeerimiskeel + sisseehitatud toetus andmebaasi funktsioonidele. See erinevus mĂ€ngib otsustavat rolli KDB+ kĂ”igi eeliste loetlemisel. NĂ€iteks...
 

Suurus

Kaasaegsete mÔÔdupuude jĂ€rgi on KDB+ lihtsalt mikroskoopilise suurusega. See on sĂ”na otseses mĂ”ttes ĂŒks tĂ€itmisfail, mille suurus on alla megabaiti ja ĂŒks vĂ€ike tekstifail mĂ”ningate sĂŒsteemifunktsioonidega. Tegelikult – alla ĂŒhe megabaiti ja selle programmi eest maksavad ettevĂ”tted aastas kĂŒmneid tuhandeid dollareid ĂŒhe serveri protsessori kohta.

  • Selline suurus vĂ”imaldab KDB+ sĂŒsteemil suurepĂ€raselt toimida igasugusel riistvaral – alates mikrokombainist Pi kuni serveriteni, kus on terabaitide kaupa mĂ€lu. See ei mĂ”juta funktsionaalsust, veelgi enam, Q kĂ€ivitub koheselt, mis vĂ”imaldab seda kasutada ka skriptikeelena.
  • Sellise suuruse tĂ”ttu mahub Q tĂ”lgendaja tĂ€ielikult protsessori vahemĂ€llu, mis kiirendab programmide tĂ€itmist.
  • Sellise tĂ€itmisfaili suuruse tĂ”ttu vĂ”tab Q protsess mĂ€les ÀÀrmiselt vĂ€he ruumi, vĂ”imaldades neid kĂ€ivitada sadades. Samuti suudab Q vajadusel töödelda kĂŒmneid vĂ”i sadu gigabaite mĂ€lu ĂŒhe protsessi raames.

Universaalsus

Q sobib ideaalselt erinevate ĂŒlesannete tĂ€itmiseks. Q protsess vĂ”ib toimida ajaloo andmebaasina ja pakkuda kiiret juurdepÀÀsu terabaitidele teabele. Meil on nĂ€iteks kĂŒmneid ajaloolisi andmebaase, milles ĂŒhel tihendamata pĂ€eval andmeid on rohkem kui 100 gigabaiti. Sellegipoolest, mĂ”istlikke piiranguid jĂ€rgides, tĂ€idetakse pĂ€ring andmebaasile kĂŒmnetes kuni sadades millisekundites. Üldiselt on meie kasutajate pĂ€ringutele universaalne ajapiirang — 30 sekundit — ja see aktiveerub vĂ€ga harva.
 
Sama kergusega vĂ”ib Q olla ka in-memory andmebaas. Uute andmete lisamine tabelitesse mĂ€lus toimub nii kiiresti, et piiravaks teguriks on kasutajate pĂ€ringud. Tabelites salvestatakse andmed veergudena, mistĂ”ttu iga veeruga seotud operatsioon kasutab protsessori vahemĂ€lu maksimaalselt Ă€ra. Lisaks on KX pĂŒĂŒdnud kĂ”iki pĂ”hitegevusi, nĂ€iteks aritmeetilisi toiminguid, rakendada protsessori vektoriliste juhiste kaudu, maksimeerides nende kiirus. Q suudab tĂ€ita ka ĂŒlesandeid, mis ei ole andmebaasidele omased — nĂ€iteks töödelda voogu andmeid ja arvutada „reaalasajas“ (viivitusega kĂŒmnetest millisekunditest kuni mitme sekundini sĂ”ltuvalt ĂŒlesandest) erinevate ajavahemike rahandusinstrumentide jaoks mitmesuguseid agregaatfunktsioone vĂ”i luua mudeli, mis nĂ€itab, kuidas tehing mĂ”jutab turgu, ning teostada selle profileerimist praktiliselt kohe pĂ€rast tehingu sooritamist. Sellistes ĂŒlesannetes toob peamise viivituse sageli kaasa mitte Q, vaid andmete sĂŒnkroniseerimise vajadus erinevatest allikatest. Suure kiiruseni jĂ”utakse, kuna andmed ja funktsioonid, mis neid töötlevad, on samas protsessis, ning töötlemine piirdub mitme QSQL vĂ€ljendite ja ĂŒhenduste tĂ€itmisega, mida ei tĂ”lgita, vaid tĂ€idetakse binaarkoodina.
 
LĂ”puks on Q-s vĂ”imalik kirjutada ka igasuguseid teenindusprotsesse. NĂ€iteks Gateway protsessid, mis jaotavad automaatselt kasutajate pĂ€ringud Ă”igetele andmebaasidele ja serveritele. Programmeerijal on tĂ€ielik vabadus rakendada mistahes algoritmi koormuse tasakaalustamiseks, prioriseerimiseks, tĂ”rke taluvuse, juurdepÀÀsuĂ”iguste, kvootide ja ĂŒldiselt kĂ”igi soovide tĂ€itmiseks. Peamine probleem on see, et tuleb kĂ”ik see ise ellu viia.
 
NĂ€iteks loetlen, milliseid protsessitĂŒĂŒpe meil on. Need kĂ”ik on aktiivselt kasutuses ja töötavad koos, ĂŒhendades sadade erinevate andmebaaside andmed, töödeldes andmeid mitmest allikast ja teenindades sadu kasutajaid ja rakendusi.

  • Andmeallikate ĂŒhendajad (feedhandler). Need protsessid kasutavad tavaliselt vĂ€liseid raamatukogusid, mis laaditakse Q-sse. Q liidese kasutamine on ÀÀrmiselt lihtne ja vĂ”imaldab hĂ”lpsasti luua protsii funktsioone mis tahes C/C++ raamatukogide jaoks. Q on piisavalt kiire, et toime tulla nĂ€iteks Euroopa aktsiaturgudelt samaaegselt tuleva FIX sĂ”numite voo töötlemisega.
  • Andmeedastajad (tickerplant), mis teenivad vaheĂŒhendina ĂŒhendajate ja tarbijate vahel. Samuti kirjutavad nad sissetulevad andmed spetsiaalsesse binaarsesse logisse, tagades tarbijatele stabiilsuse ĂŒhenduse katkemise vĂ”i taaskĂ€ivituste korral.
  • MĂ€luandmebaasid (rdb). Need andmebaasid tagavad maksimumkiirusel juurdepÀÀsu tooretele vĂ€rsketele andmetele, hoides neid mĂ€lu sees. Tavaliselt koguvad nad andmeid tabelites terve pĂ€eva vĂ€ltel ja nullivad need öösel.
  • PĂŒsivad andmebaasid (pdb). Need andmebaasid tagavad, et tĂ€nased andmed salvestatakse ajalukku. Erinevalt rdb-st ei hoia nad andmeid mĂ€lu sees, vaid kasutavad pĂ€eva jooksul spetsiaalset vahemĂ€lu kettal ja kopeerivad andmed keskööl ajalukku.
  • Ajaloolised andmebaasid (hdb). Need andmebaasid pakuvad juurdepÀÀsu varasemate pĂ€evade, nĂ€dalate ja aastate andmetele. Nende suurus (pĂ€evades) on piiratud ainult kĂ”vakettaste mahuga. Andmed vĂ”ivad paikneda igal pool, sealhulgas erinevates ketastes juurdepÀÀsu kiirusel. On vĂ”imalik andmeid tihendada, kasutades mitmeid valitud algoritme. Andmebaasi struktuur on hĂ€sti dokumenteeritud ja lihtne, andmed on sĂ€ilitatud tavaliselt failide kaupa, et neid saaks töödelda ka operatsioonisĂŒsteemi vahenditega.
  • Agratseeritud teabe andmebaasid. Need hoiad erinevaid aggregaate, tavaliselt gruppide kaupa, tĂ”lgitud vastavalt instrumendi nimele ja ajavahemikule. MĂ€luandmebaasid uuendavad oma seisundit igas sissetulevas sĂ”numis, samas kui ajaloolised salvestavad eelnevalt arvutatud andmeid, et kiirendada juurdepÀÀsu ajaloolistele andmetele.
  • LĂ”puks gateway protsessid, rakenduste ja kasutajate teenindamiseks. Q vĂ”imaldab tĂ€ielikult asĂŒnkroonset sisendite töötlemist, nende jaotamist andmebaaside vahel, juurdepÀÀsuĂ”iguste kontrollimist jne. Tahan mĂ€rkida, et sĂ”numitega ei ole piiratud ja need ei koosne enamasti SQL-kĂ€sklustest, nagu see on teistes andmebaasides. Enamasti on SQL-kĂ€sklus peidetud spetsiaalsesse funktsiooni ja see konstrueritakse lĂ€htudes kasutaja poolt kĂŒsitud parameetritest — toimub aja konverteerimine, filtreerimine, andmed normaliseeritakse (nĂ€iteks tasude jaotamise korral borsa hindade tasandamine) jne.

TĂŒĂŒpiline arhitektuur ĂŒhe andmetĂŒĂŒbi jaoks:

Andmebaas KDB+: finansidest kuni „F1“

Kiirus

Kuigi Q on tĂ”lgitav keel, on see samas ka vektorkeel. See tĂ€hendab, et paljud sisseehitatud funktsioonid, sealhulgas aritmeetilised, vĂ”tavad vastu argumendid mis tahes vormis — arvud, vektorid, maatriksid, nimekirjad, ning programmeerijalt oodatakse, et ta rakendaks programmi kui massiivide töötlemist. Sellises keeles, kui liidad kokku kaks miljoni elemendiga vektorit, ei oma enam mingit tĂ€hendust, et keel on tĂ”lgitav, liitmine toimub ĂŒlima optimeerituse saavutava binaarse funktsiooniga. Kuna suur osa ajast Q-programmides kulub tabelite operatsioonidele, mis kasutavad neid pĂ”hivisukĂ€itumisfunktsioone, saame lĂ”puks ĂŒsna korraliku töökiirus, mis vĂ”imaldab töödelda tohutuid andmehulki isegi ĂŒhes protsessis. See on sarnane matemaatilistele teekidele Pythonis — kuigi Python ise on ulatuslikult aeglane, on seal palju imelisi teeke nagu numpy, mis vĂ”imaldavad numbrilisi andmeid töödelda kompilatsioonikeele kiirusel (ĂŒhtlasi on numpy ideoloogiliselt Q-le lĂ€hedane).
 
Lisaks sellele on KX vĂ€ga hoolikalt lĂ€henenud tabelite kujundamisele ja nende optimeerimisele. Esiteks toetatakse erinevaid indeksitĂŒĂŒpe, mida toetavad sisseehitatud funktsioonid ja mida saab rakendada mitte ainult tabeli veergudele, vaid ka igasugustele vektoritele - grupeerimine, sortimine, unikaalsuse atribuut ja eriline grupeerimine ajalooliste andmebaaside jaoks. Indeksi rakendamine on elementaarne ja see kohandatakse automaatselt, kui veergu/vektorisse lisatakse elemente. Indeksid saavad sama edukalt olla rakendatud tabeli veergudele nii mĂ€lu kui ka ketta peal. QSQL pĂ€ringu tĂ€itmisel kasutatakse indekse automaatselt, kui see on vĂ”imalik. Teiseks on ajalooliste andmete töötlus tehtud operatsioonisĂŒsteemi failide kaardistamise mehhanismi (memory map) kaudu. Suuri tabeleid ei laadita kunagi tĂ€ielikult mĂ€llu, vaid vajalikud veerud kaardistatakse otse mĂ€llu ning tegelikult laaditakse vaid see osa (sealhulgas aitavad indeksid), mis on vajalik. Programmeerija jaoks ei ole vahet, kas andmed on mĂ€lus vĂ”i mitte, mmap mehhanism töötab tĂ€ielikult Q-s sisemusest varjatult.
 
KDB+ on mitte-relationaalne andmebaas, tabelid vĂ”ivad sisaldada meelevaldset teavet ning samas ei muutu ridade jĂ€rjekord tabelis uute elementide lisamisel, seda saab ja tuleb kasutada pĂ€ringute koostamisel. See omadus on hĂ€davajalik ajareale (andmed börsidelt, telemeetria, sĂŒndmuste logid) töötamiseks, sest kui andmed on ajas jĂ€rjestatud, ei pea kasutaja rakendama mingeid SQL trikke, et leida tabelist esimest vĂ”i viimast ajaliselt rida vĂ”i N rida, mÀÀrata, milline rida jĂ€rgneb N-ndale reale jne. Tabelite liitmine lihtsustub veelgi, nĂ€iteks leida 16000 tehingu VOD.L (Vodafone) jaoks viimane hinnang 500 miljoni elemendiga tabelist vĂ”tab ketasel umbes sekundi ja mĂ€lus umbes kĂŒmme millisekundit.
 
Ajavahemiku jĂ€rgi liitmise nĂ€ide - quotetabel kaardistatakse mĂ€llu, seega ei ole vaja VOD.L-i where-l esitada, mĂ€rkamatult kasutatakse indeksi sĂŒmboli veeru ja selle fakti, et andmed on ajaliselt jĂ€rjestatud. Peaaegu kĂ”ik liitmised Q-s on tavalised funktsioonid, mitte osa select-lause idest:

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

LĂ”puks tuleb mĂ€rkida, et KXi insenerid, alates Arthur Whitney'st, on tĂ”eliselt pĂŒhendunud efektiivsusele ja teevad kĂ”ik endast oleneva, et vĂ€lja pigistada maksimum Q standardfunktsioonidest ja optimeerida kĂ”ige levinumaid kasutusmustreid.
 

KokkuvÔte

KDB+ on Ă€ri seas populaarne peamiselt tĂ€nu oma erakordsele paindlikkusele — see teenib sama hĂ€sti nii in-memory andmebaasina kui ka terabaitide ajalooliste andmete salvestamise andmebaasina ning andmeanalĂŒĂŒsi platvormina. Kuna andmete töötlemine toimub otse andmebaasis, saavutatakse kĂ”rge töökiirus ja ressursside kokkuhoid. TĂ€isfunktsionaalne programmeerimiskeel, mis on integreeritud andmebaasi funktsioonidega, vĂ”imaldab ĂŒhel platvormil rakendada kogu vajaliku protsesside stĂ€ki — alates andmete hankimisest kuni kasutajate pĂ€ringute töötlemiseni.
 

TĂ€iendavad andmed

Puudused

KDB+ ja Q oluliseks puuduseks on kĂ”rge sisenemisbarjÀÀr. Keel on kummaline sĂŒntaksiga, mĂ”ned funktsioonid on tugevalt ĂŒlekoormatud (nĂ€iteks on value'l umbes 11 kasutusvĂ”imalust). Mis kĂ”ige tĂ€htsam, see nĂ”uab radikaalselt erinevat lĂ€henemist programmide kirjutamisele. Vektorikeskes tuleb pidevalt mĂ”elda massiivide muutmise mĂ”istetes, kĂ”ik tsĂŒklid tuleb realiseerida erinevate map/reduce funktsioonide kaudu (mida Q-s nimetatakse adverbideks), mitte kunagi ĂŒritada sÀÀsta, asendades vektorioperatsioone aatomarvutustega. NĂ€iteks, et leida massiivi N. sisendi elemendi indeks, tuleks kirjutada:

1. (where element=vector)[N]  

kuigi see vÔib tunduda C/Java mÔÔtkavas ÀÀrmiselt ebatÔhus (= loob boolean massiivi, where tagastab tÔeliste elementide indeksid). Kuid selline kirjutamine muudab vÀljendi mÔtte selgemaks ja te kasutate kiireid vektorioperatsioone aeglaste aatomarvutuste asemel. Kontseptuaalne erinevus vektorikeele ja teiste vahel on vÔrreldav imperatiivsete ja funktsionaalsete programmeerimise lÀhenemiste vahel, ja sellele tuleb olla valmis.
 
MĂ”ned kasutajad on ka QSQL-i ĂŒle rahulolematud. Asi on selles, et see sarnaneb ainult tĂ”elise SQL-iga. Tegelikult on see lihtsalt SQL-i sarnaste vĂ€ljendite tĂ”lkija, mis ei toeta pĂ€ringute optimeerimist. Kasutaja peab ise kirjutama optimaalsed pĂ€ringud, ja seda Q-s, millega paljud osutuvad valmisolekuks. Teisest kĂŒljest on loomulikult alati vĂ”imalik ise kirjutada optimaalne pĂ€ring, mitte usaldada musta kasti optimeerijat.
 
Ühe plussina on Q-raamat — Q For Mortals saadaval tasuta aadressil ettevĂ”tte saidil, sealhulgas on seal kogutud palju muid kasulikke materjale.
 
Veel ĂŒks suur miinus on litsentsitasu. See on kĂŒmneid tuhandeid dollareid aastas ĂŒhe CPU kohta. Ainult suured firmad saavad endale selliseid kulutusi lubada. Viimase paari aasta jooksul on KX teinud litsentsipoliitika paindlikumaks ja pakub vĂ”imalust maksta ainult kasutamise aja eest vĂ”i rentida KDB+ Google'i ja Amazoni pilvedes. Samuti pakub KX allalaadimiseks tasuta versiooni mitteĂ€riliseks otstarbeks (32-bitine versioon vĂ”i 64-bitine soovi korral).
 

Konkurendid

On eksisteerib ĂŒsna palju spetsialiseeritud andmebaase, mis on ĂŒles ehitatud sarnastele pĂ”himĂ”tetele – veergudele, mĂ€lu pĂ”histele ja vĂ€ga suurtele andmehulga jaoks suunatud. Probleem on selles, et need on just spetsialiseeritud andmebaasid. Klassikaline nĂ€ide on Clickhouse. Selle andmebaasi andmete salvestamise ja indeksite ehitamise pĂ”himĂ”te on vĂ€ga sarnane KDB+-le, mĂ”ningaid pĂ€ringuid tĂ€idab see isegi kiiremini kui KDB+, kuigi mitte oluliselt. Kuid isegi andmebaasina on Clickhouse spetsialiseeritum kui KDB+ — veebianalĂŒĂŒtika vĂ”rreldes vabade ajaliste andmejoontega (see erinevus on vĂ€ga oluline — nĂ€iteks Clickhouse'is ei ole vĂ”imalik kasutada rekordite jĂ€rjestust). Aga kĂ”ige tĂ€htsam on, et Clickhouse'il ei ole KDB+ universaalsust, mis vĂ”imaldaks andmeid otse andmebaasis töödelda, mitte ei laadida neid eelnevalt eraldi rakendusse, luua vabalt valitavaid SQL-vĂ€ljendeid, rakendada pĂ€ringutes vabalt valitud funktsioone, luua protsesse, mis ei ole seotud ajaliste andmebaasi funktsioonide tĂ€itmisega. SeetĂ”ttu on KDB+ teiste andmebaasidega vĂ”rreldes keeruline, nad vĂ”ivad olla paremad spetsiifilistes kasutusstsenaariumides vĂ”i lihtsalt paremad, kui rÀÀgitakse klassikaliste andmebaaside ĂŒlesannetest, kuid mulle ei ole teada teist nii efektiivset ja universaalset vahendit ajandmete töötlemiseks.
 

Integreerimine Pythoniga

KDB+ töö lihtsustamiseks tehnoloogiaga mitte tuttavatele inimestele on KX loonud raamatukogud tihedaks integreerimiseks Pythoni raames ĂŒhe protsessi jooksul. Saate kutsuda igasuguseid Pythonifunktsioone Q-st, ja vastupidi – kutsuda iga Q funktsiooni Pythoni seest (eriti QSQL vĂ€ljendeid). Raamatukogud konvertivad vajadusel (efektiivsuse huvides mitte alati) andmeid ĂŒhe keele formaadist teise formaati. LĂ”pptulemus on see, et Q ja Python elavad nii tihedas sĂŒmbioosis, et piirid nende vahel hĂ€gustuvad. Selle tulemusena on programmeerijal ĂŒhelt poolt tĂ€ielik juurdepÀÀs arvukatele kasulikele Pythoni raamatukogudele ja teiselt poolt kiire integreeritud andmebaas suurte andmete töötlemiseks, mis on eriti kasulik neile, kes tegelevad masinĂ”ppe vĂ”i modelleerimisega.
 
Töötamine Q-ga Pythonis:

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

Viidatud lingid

EttevĂ”tte veebisait — https://kx.com/
Arendajate veebisait — https://code.kx.com/v2/
Raamat Q For Mortals (inglise keeles) — https://code.kx.com/q4m3/
Artiklid KDB+ / Q rakendustest kx töötajate poolt — https://code.kx.com/v2/wp/

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster