Andmebaas KDB+: rahandusest „F1“-ni

KDB+, ProHoster toode KX on laialdaselt tuntud kiire kolonn- andmebaas, mis on loodud ajaseeria ja nende analĂŒĂŒtiliste arvutuste salvestamiseks. Alguses oli see vĂ€ga populaarne finantssektoris — seda kasutavad kĂ”ik 10 parimat investeerimispanka ning paljud tuntud riskifondid, börsid ja muud organisatsioonid. Viimasel ajal on KX otsustanud laieneda ning pakub nĂŒĂŒd lahendusi ka teistes valdkondades, kus on suures koguses ajaga jĂ€rjestatud andmeid — telekommunikatsioon, bioinformaatika, tootmine jne. Nad on leidnud koostöö Aston Martin Red Bull Racing meeskonnaga F1 sarjas, aidates koguda ja analĂŒĂŒsida andmeid autodest ja tuuletunnelitest. Selles artiklis tahan rÀÀkida, millised omadused teevad KDB+ ÀÀrmiselt vĂ”imekaks, miks ettevĂ”tted on valmis selle nimel suurt raha kulutama ja miks see ei ole tegelikult andmebaas.
 
Andmebaas KDB+: rahandusest „F1“-ni
 
Selles artiklis pĂŒĂŒan ma selgitada, mis on KDB+, millised on selle vĂ”imalused ja piirangud ning kuidas see vĂ”ib kasu tuua ettevĂ”tetele, kes soovivad töödelda suuri andmehulkasid. Ma ei hakka sukelduma KDB+ rakenduse ĂŒksikasjadesse ega selle programmeerimiskeelesse Q. MĂ”lemad teemad on vĂ€ga laiad ja vÀÀrivad eraldi artikleid. Palju teavet nende teemade kohta leiate veebisaidilt code.kx.com, sealhulgas raamatu Q — Q For Mortals (vt allolevat linki).

MÔned terminid

  • MĂ€luandmebaas. Andmebaas, mis salvestab andmed peamise mĂ€lu (RAM) sisse, et kiirendada ligipÀÀsu. Sellise andmebaasi eelised on ilmsed, puuduseks on andmekao oht ja vajadus serveris suure mĂ€lu jĂ€rele.
  • Veergandeva baas. Andmebaas, kus andmed salvestatakse veergude kaupa, mitte ridade kaupa. Peamine eelis on selles, et sama veeru andmed on salvestatud koos nii kettale kui mĂ€lu, mis oluliselt kiirendab nendele ligipÀÀsu. Pole vaja laadida veerge, mida pĂ€ringus ei kasutata. Peamine puudus — ridade muutmine ja kustutamine on keeruline.
  • Ajavahemik. KuupĂ€eva vĂ”i aja tĂŒĂŒpi veergude andmed. Reeglina on selliste andmete puhul oluline aegne jĂ€rjestus, et oleks lihtne kindlaks teha, milline kirje eelneb vĂ”i jĂ€rgneb kĂ€esolevale, vĂ”i et saaks rakendada funktsioone, mille tulemus sĂ”ltub kirgede jĂ€rjestusest. Klassikalised andmebaasid on rajatud tĂ€iesti teistsugusele printsiibile — kirjeid esitatakse kogumina, kus kirgede jĂ€rjekord ei ole pĂ”himĂ”tteliselt mÀÀratletud.
  • Vektor. Konteksti KDB+ puhul — see on elementide nimekiri, mis on sama aatomaarse tĂŒĂŒbi, nĂ€iteks numbrite, hulk. TeisisĂ”nu, elementide massiiv. Erinevalt loenditest saab massiive sĂ€ilitada kompaktsemalt ja töödelda, kasutades protsessori vektorinstruktsioone.

 

Ajalooline ĂŒlevaade

KX ettevĂ”te asutati 1993. aastal Arthur Whitney poolt, kes enne seda töötas Morgan Stanley pangas A+ keele kallal — APL-i jĂ€reltulija, mis oli vĂ€ga originaalne ja oma aja jooksul populaarne keel rahanduse maailmas. Loomulikult jĂ€tkas Arthur KX-is sama vaimu ja lĂ”i vektorfunktsionaalse K keele, jĂ€rgides ÀÀrmise minimalismi ideid. K-s kirjutatud programmid nĂ€evad vĂ€lja kui segane mĂ€rkide ja sĂŒmbolite kogum, mille tĂ€hendus sĂ”ltub kontekstist, ning iga operatsioon kannab endas palju rohkem tĂ€hendust kui tavapĂ€rastes programmeerimiskeeltes. Selle tĂ”ttu vĂ”tab K-s kirjutatud programm minimaalselt ruumi — mitu rida vĂ”ivad asendada lehekĂŒlgi pikkade tekstide jaoks nagu Java — ja see on ĂŒlekaalukalt kontsentreeritud algoritmi rakendus.
 
K-s kirjutatud funktsioon, mis rakendab suure osa LL1 parsi generaatorist antud grammatika jÀrgi:

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

 Seda ÀÀrmusliku efektiivsuse filosoofia, kus pĂŒĂŒtakse minimaalsete liigutustega maksimaalset tulemust, on Arthur ellu viinud ka KDB+ , mis ilmus 2003. aastal (arvan, et nĂŒĂŒd on selge, kust tuli K tĂ€ht pealkirjas) ja on mitte midagi muud kui K keele neljanda versiooni tĂ”lgendaja. K peal on vĂ€lja töötatud user-friendly versioon nimega Q. Q-s on samuti lisatud tugi spetsiifilisele SQL-dialektile - QSQL, ning tĂ”lgendajasse on lisatud tabelite tugi kui sĂŒsteemi tĂŒĂŒpi andmed, mĂ€lus ja kettal töötamiseks mĂ”eldud tööriistad jne.
 
Seega KDB+ kasutaja jaoks on see lihtsalt Q keele tĂ”lkija, millel on tabelite ja C#-i LINQ-st inspireeritud SQL-laadsete pĂ€ringute tugi. See on KDB+ olulisim erinevus teistest andmebaasidest ning peamine konkurentsieelis, mida sageli ignoreeritakse. See ei ole lihtsalt andmebaas koos abikeelena, vaid tĂ€isvÀÀrtuslik vĂ”imas programmeerimiskeel koos sisseehitatud andmebaasifunktsioonide toega. See erinevus mĂ€ngib mÀÀravat rolli KDB+ kĂ”ikide eeliste loetlemisel. NĂ€iteks

 

Suurus

Kaasaegsete standardite jĂ€rgi on KDB+ lihtsalt mikroskoopilise suurusega. See on sĂ”na otseses mĂ”ttes ĂŒks kĂ€ivitatav fail, mille suurus on vĂ€iksem kui megabait, ja ĂŒks vĂ€ike tekstifail koos mĂ”nede sĂŒsteemifunktsioonidega. Tegelikult on see alla ĂŒhe megabaiti ning selle programmi eest maksab ettevĂ”te aastas kĂŒmneid tuhandeid dollareid ĂŒhe protsessori kohta serveris.

  • Selline suurus vĂ”imaldab KDB+ suurepĂ€raselt toimida igasugusel riistvaral — alates Pi mikrokonteinerist kuni terabaitide mĂ€luga serveriteni. Funktsionaalsusele see kuidagi ei mĂ”ju, vastupidi, Q kĂ€ivitub koheselt, mis vĂ”imaldab seda kasutada ka skriptimiskeelena.
  • Selle suuruse korral mahtus Q tĂ”lgendaja tĂ€ielikult protsessori vahemĂ€llu, mis kiirendab programmide tĂ€itmist.
  • Selle suuruse juures vĂ”tab Q tĂ€idetav fail mĂ€lu suhtes vĂ€ga vĂ€he ruumi, neid saab kĂ€ivitada sadu. Samuti suudab Q vajadusel töötada kĂŒmnete ja sadade gigabaitidega mĂ€lu raames ĂŒhes protsessis.

Universaalsus

Q sobib suurepĂ€raselt erinevate ĂŒlesannetega. Q protsess vĂ”ib toimida ajaloolise andmebaasina ja pakkuda kiiret juurdepÀÀsu terabaitidele teabele. Meil on nĂ€iteks kĂŒmneid ajaloolisi andmebaase, milles ĂŒks kokku surumata pĂ€evaandmestik hĂ”ivab ĂŒle 100 gigabaidi. Siiski, mĂ”istlike piirangute korral tĂ€idetakse pĂ€ring andmebaasi tavaliselt kĂŒmnete-kohandatud millisekunditega. Üldiselt on meie kasutajate pĂ€ringutele kehtestatud universaalne ajaĂŒlem — 30 sekundit — mis aktiveerub vĂ€ga harva.
 
Sama lihtsusega vĂ”ib Q olla mĂ€lupĂ”hine andmebaas. Uute andmete lisamine mĂ€lus olevatesse tabelitesse toimub nii kiiresti, et piiravaks teguriks on kasutajate pĂ€ringud. Tabelites hoitakse andmeid veergudena, mistĂ”ttu iga veeruoperatsioon kasutab protsessori vahemĂ€lu maksimaalselt. Lisaks sellele on KX pĂŒĂŒdnud rakendada kĂ”iki pĂ”hitoiminguid, nĂ€iteks aritmeetilisi, protsessori vektoriliste kĂ€skude kaudu, et maksimeerida nende kiirust. Q suudab teostada ka ĂŒlesandeid, mis ei ole andmebaaside jaoks iseloomulikud — nĂ€iteks voogandmete töötlemine ja erinevate ajavahemike finantsinstrumentide erinevate agregaadifunktsioonide arvutamine reaalajas (hilinemisega paarikĂŒmne millisekundi kuni mitme sekundi ulatuses sĂ”ltuvalt ĂŒlesandest) vĂ”i tehingu mĂ”ju turule mudeli koostamine ja selle profileerimine praktiliselt kohe pĂ€rast tehingu sooritamist. Sellistes ĂŒlesannetes tekitab peamise ajakulu sageli mitte Q, vaid vajadus sĂŒnkroonida andmeid erinevatest allikatest. KĂ”rge kiirus saavutatakse tĂ€nu sellele, et andmed ja neid töötlevad funktsioonid asuvad ĂŒhes protsessis ning töötlemine piirdub mitme QSQL lause ja ĂŒhendumise tĂ€itmisega, mis ei tĂ”lgita, vaid tĂ€idetakse binaarkoodina.
 
LĂ” finally, saab Q-s kirjutada ka igasuguseid teenusprotsesse. NĂ€iteks Gateway protsessid, mis jagavad automaatselt kasutajate pĂ€ringud Ă”igete andmebaaside ja serverite vahel. Programmeerijal on tĂ€ielik vabadus rakendada murdumatult mistahes algoritmi tasakaalustamiseks, prioriseerimiseks, veakindluseks, kasutusĂ”iguseks, kvootideks ja ĂŒldiselt kĂ”ik, mis hinge ihkab. Peamine probleem on see, et see kĂ”ik tuleb iseseisvalt ellu viia.
 
NĂ€iteks loen ĂŒles, milliseid protsessitĂŒĂŒpe meil on. KĂ”ik need on aktiivses kasutuses ja töötavad koos, ĂŒhendades ĂŒhte tervikusse kĂŒmneid erinevaid andmebaase, töötledes andmeid mitmest allikast ja teenindades sadu kasutajaid ja rakendusi.

  • Konnektorid (feedhandler) andmeallikatele. Need protsessid kasutavad tavaliselt vĂ€liseid raamatukogusid, mis laaditakse Q-sse. C-liides Q-s on ÀÀrmiselt lihtne ja vĂ”imaldab vaevata luua proksifunktsioone mistahes C/C++ raamatukogu jaoks. Q on piisavalt kiire, et toime tulla nĂ€iteks FIX sĂ”numite voogude töötlemisega kĂ”ikidest Euroopa aktsiaturgudest korraga.
  • Andmete jaotajad (tickerplant) mis saavad toimida antara ĂŒhenduste ja tarbijate vahel. Samal ajal kirjutavad nad sissetulevaid andmeid spetsiaalsesse binaarsesse logifaili, tagades tarbijate vastupidavuse ĂŒhenduste kadumisele vĂ”i taaskĂ€ivitusele.
  • MĂ€luandmebaasid (rdb). Need andmebaasid tagavad maksimaalselt kiire juurdepÀÀsu tooretele vĂ€rsketele andmetele, hoides neid mĂ€lus. Reeglina koguvad nad andmeid tabelitesse pĂ€eva jooksul ja lĂ€htestavad need öösel.
  • PĂŒsivad andmebaasid (pdb). Need andmebaasid tagavad, et tĂ€nase pĂ€eva andmed salvestatakse ajalukku. Erinevalt rdb-st ei hoia nad reeglina andmeid mĂ€lus, vaid kasutavad spetsiaalset kettavaru pĂ€evasel ajal ja kopeerivad andmed keskööl ajaloo andmebaasi.
  • Ajaloolised andmebaasid (hdb). Need basid pakuvad juurdepÀÀsu andmetele varasemate pĂ€evade, kuude ja aastate kohta. Nende suurus (pĂ€evades) on piiratud ainult kĂ”vakettamate suurusega. Andmed vĂ”ivad olla paigutatud ĂŒkskĂ”ik kuhu, sealhulgas erinevatele kettale, et kiirendada juurdepÀÀsu. Andmete kokkutĂ”mbamise vĂ”imalus on olemas, kasutades erinevaid valitud algoritme. Andmebaasi struktuur on hĂ€sti dokumenteeritud ja lihtne, andmed on salvestatud jĂ€rk-jĂ€rgult tavalistes failides, seega saab neid töödelda ka operatsioonisĂŒsteemi vahenditega.
  • Agravatsioonilised andmebaasid. Salvestavad erinevaid agregatsioone, mis on tavaliselt gruppeeritud tööriista nime ja ajavahemiku jĂ€rgi. In-memory andmebaasid vĂ€rskendavad oma olekut iga siseneva sĂ”numi korral, samas kui ajaloolised salvestavad eelnevalt arvutatud andmeid, et kiirendada juurdepÀÀsu ajaloolistele andmetele.
  • LĂ”puks, gateway protsessid, mis haldavad rakendusi ja kasutajaid. Q vĂ”imaldab teostada tĂ€ielikku asĂŒnkroonset sisendite töötlemist, nende jaotamist andmebaaside vahel, pÀÀsulubade kontrollimist jne. TĂ€helepanuvÀÀrne on, et sĂ”numid ei piirdu ja enamasti ei ole need SQL vĂ€ljendid, nagu see on teistes andmebaasides. Enamasti on SQL vĂ€ljend varjatud spetsiaalses funktsioonis ja koostatakse vastavalt kasutaja poolt nĂ”utud parameetritele — toimub aja konverteerimine, filtreerimine, andmed normaliseeritakse (nĂ€iteks aktsiahindade tasandamine, kui on toimunud dividendide maksmine) jne.

TĂŒĂŒpiline arhitektuur ĂŒhe tĂŒĂŒpi andmete jaoks:

Andmebaas KDB+: rahandusest „F1“-ni

Kiirus

Kuigi Q on tĂ”lgitav keel, on see samal ajal ka vektorikeel. See tĂ€hendab, et paljud sisseehitatud funktsioonid, sealhulgas aritmeetilised, vĂ”tavad vastu argumendid mis tahes vormis — numbrid, vektorid, maatriksid, nimekirjad, ning programmerijalt oodatakse, et ta realiseeriks programmi massiivi operatsioonidena. Sellises keeles, kui liidate omavahel kaks miljoni elemendiga vektorit, ei oma tĂ€htsust, et keel on tĂ”lgitav; liitmine toimub superoptimeeritud binaarse funktsiooni kaudu. Kuna suur osa Q-keeles olevatest programmidest kulub tabelioperatsioonidele, mis kasutavad neid baasil pĂ”hinevaid vektoriseeritud funktsioone, on tulemuseks ĂŒsna korralik kiirus, mis vĂ”imaldab töödelda suurt hulka andmeid isegi ĂŒhe protsessi jooksul. See on sarnane matemaatikabiblioteekidega Pythonis — kuigi Python ise on ĂŒsna aeglane, on seal palju suurepĂ€raseid raamatukogusid nagu numpy, mis vĂ”imaldavad numbrilisi andmeid töödelda kompileeritud keele kiirusel (ĂŒhtlasi on numpy ideoloogiliselt lĂ€hedane Q-le).
 
Lisaks sellele on KX lĂ€henenud tabelite projekteerimisele ja nende kasutamise optimeerimisele ÀÀrmiselt hoolikalt. Esiteks toetatakse mitmeid indeksite tĂŒĂŒpe, mida toetavad sisseehitatud funktsioonid, ja neid saab rakendada mitte ainult tabeli veergudele, vaid ka mistahes vektoritele — gruppeerimine, sorteerimine, unikaalsuse atribuut ja spetsiaalne gruppeerimine ajalooliste andmebaaside jaoks. Indeks asetatakse lihtsalt ja korrigeeritakse automaatselt, kui veergu/vektorisse lisatakse elemente. Indekseid saab edukalt rakendada tabeli veergudele, olgu need siis mĂ€lus vĂ”i kettal. QSQL pĂ€ringute tĂ€itmisel kasutatakse indekseid automaatselt, kui see on vĂ”imalik. Teiseks toimub ajalooliste andmete töötlemine OS-i failide kaardistamise mehhanismi kaudu (memory map). Suuri tabeleid ei laeta kunagi mĂ€llu; selle asemel kaardistatakse vajalikud veerud otse mĂ€llu ja reaalselt laaditakse ainult see osa (sealhulgas aitavad indeksid), mis on vajalik. Programmeerija jaoks ei ole vahet, kas andmed on mĂ€lus vĂ”i mitte, mmap-iga töömehhanism on tĂ€ielikult peidetud Q sĂŒgavustes.
 
KDB+ on relatsioonitĂŒĂŒp mitte-andmebaas, tabelid vĂ”ivad sisaldada suvalisi andmeid, samal ajal kui tabelis olevate ridade jĂ€rjekord ei muutu uute elementide lisamisel ja seda saab ja tuleks kasutada pĂ€ringute kirjutamiseks. See omadus on ÀÀrmiselt vajalik ajaseeriate töötlemiseks (andmed börsidelt, telemeetriast, sĂŒndmuste logid), kuna kui andmed on ajaliselt sorteeritud, ei pea kasutaja rakendama mingeid SQL nippe, et leida tabelist esimest vĂ”i viimast ajaliselt rida vĂ”i N rida, samuti mÀÀrata, milline rida jĂ€rgneb N-ndale reale jne. Tabelite ĂŒhendamised lihtsustuvad veelgi, nĂ€iteks viimase VOD.L (Vodafone) pakkumise leidmine 16000 tehingu puhul 500 miljoni elemendi tabelist vĂ”tab kettal umbes sekundi ja mĂ€lus kĂŒmneid millisekunde.
 
Ajaliselt ĂŒhendamise nĂ€ide — quote tabel laaditakse mĂ€llu, seega ei ole vaja VOD.L-i where klauslis mĂ€rkida, kasutatakse vaikimisi sym veergu indeksi ja seda, et andmed on ajaliselt sorteeritud. Peaaegu kĂ”ik Q-s olevad ĂŒhendamised on tavalised funktsioonid, mitte osa select vĂ€ljendist:

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 KX insenerid, alates Arthur Whitney'st, on tÔeliselt efektiivsuse kinnismÔttega ning teevad kÔik endast oleneva, et maksimaalset kasu saada Q standardfunktsioonidest ja optimeerida kÔige sagedamini kasutatavaid kasutusmustreid.
 

KokkuvÔte

KDB+ on Ă€riarenduses populaarne peamiselt oma erakordse paindlikkuse tĂ”ttu — see toimib ĂŒhtviisi hĂ€sti nii in-memory andmebaasina kui ka terabaytide ajalooliste andmete salvestussĂŒsteemina ja andmeanalĂŒĂŒsi platvormina. Andmete töötlemine toimub otse andmebaasis, mis tagab kĂ”rge töökiirus ja ressursside kokkuhoiu. TĂ€isfunktsionaalne programmeerimiskeel, mis on integreeritud andmebaasi funktsioonidega, vĂ”imaldab ĂŒhel platvormil ellu viia kogu vajalike protsesside korra — andmete hankimisest kuni kasutaja pĂ€ringute töötlemiseni.
 

Lisainformatsioon

Puudused

KDB+/Q peamine puudus on kĂ”rge sisenemiskĂŒnnis. Keel omab kummalist sĂŒntaksit, mĂ”ned funktsioonid on tugevalt ĂŒlekoormatud (nĂ€iteks value on umbes 11 kasutusvarianti). Mis kĂ”ige tĂ€htsam, see nĂ”uab radikaalselt erinevat lĂ€henemist programmide kirjutamisele. Vektorkeeles tuleb pidevalt mĂ”elda massiivide transformatsioonide kontekstis, kĂ”ik tsĂŒklid tuleb teostada mitme map/reduce funktsiooni variandi abil (mida Q-s nimetatakse adverbs), kunagi ei tohi proovida kokku hoida, asendades vektorioperatsioonid aatomi operatsioonidega. NĂ€iteks, et leida N-nda esinemise indekse massiivis, tuleks kirjutada:

1. (where element=vector)[N]  

kuigi see tundub C/Java mÔÔtkavas kohutavalt ebaefektiivne (= loob boolesed massiivid, where tagastab tÔese indeksid elementides). Kuid selline vorm muudab vÀljendi mÔtte arusaadavamaks ja te kasutate kiireid vektorioperatsioone aeglaste aatomite asemel. Kontseptuaalne erinevus vektorkeele ja teiste vahel on vÔrreldav imperatiivsete ja funktsionaalsete programmeerimisviiside vahelise erinevusega, ning selleks tuleb end ette valmistada.
 
MĂ”ned kasutajad vĂ”ivad QSQL-i ĂŒle ka kaebusi esitada. TĂ”de on see, et see sarnaneb vaid tĂ”elise SQL-iga. Tegelikult on see lihtsalt SQL-i sarnaste avalduste tĂ”lgendaja, mis ei toeta pĂ€ringute optimeerimist. Kasutaja peab ise kirjutama optimaalsed pĂ€ringud, kasutades Q-d, milleks paljud osutuvad mitte valmis. Teisest kĂŒljest on alati vĂ”imalik ise kirjutada optimaalne pĂ€ring, mitte loota mustale kasti-optimisaatorile.
 
Positiivse poole pealt on Q raamat - Q For Mortals saadaval tasuta ettevÔtte kodulehelt, seal on ka palju teisi kasulikke materjale.
 
Teine suur miinus on litsentsi hind. See on kĂŒmneid tuhandeid dollareid aastas ĂŒhe CPU kohta. Ainult suured ettevĂ”tted saavad endale selliseid kulutusi lubada. Viimastel aegadel on KX muutnud litsentsipoliitikat paindlikumaks ja pakub vĂ”imalust maksta ainult kasutusaja eest vĂ”i rentida KDB+ Google'i ja Amazoni pilvedes. Samuti pakub KX allalaadimist tasuta versioon mittekommertslikel eesmĂ€rkidel (32-bitine versioon vĂ”i 64-bitine soovi korral).
 

Konkurendid

Eksisteerib ĂŒsna palju spetsialiseeritud andmebaase, mis on ĂŒles ehitatud sarnastele pĂ”himĂ”tetele — veergudega, in-memory ja vĂ€ga suurtel andmemahtudel suunatud. Probleem on selles, et need on just spetsialiseeritud andmebaasid. Selge nĂ€ide on Clickhouse. Selle andmebaasi andmete salvestamise ja indekseerimise pĂ”himĂ”te on vĂ€ga sarnane KDB+-le, mĂ”ned pĂ€ringud tĂ€idab ta kiiremini kui KDB+, kuigi mitte oluliselt. Kuid isegi andmebaasina on Clickhouse palju spetsialiseeritum kui KDB+ — veebianalĂŒĂŒs versus ĂŒldised ajaseerud (see erinevus on vĂ€ga oluline — nĂ€iteks Clickhouse'is ei ole vĂ”imalust kasutada salvestusjĂ€rjekorda). Kuid kĂ”ige tĂ€htsam on see, et Clickhouse'il puudub KDB+ universaalsus, keele, millega saab andmeid otse andmebaasis töödelda, mitte neid eelnevalt eraldi rakendusse laadida, luua ĂŒldisi SQL vĂ€ljendeid, rakendada erinevaid funktsioone pĂ€ringus, luua protsesse, mis ei ole seotud ajaloolise andmebaasi funktsioonide tĂ€itmisega. SeetĂ”ttu on KDB+ teiste andmebaasidega vĂ”rdlemine keeruline, nad vĂ”ivad olla paremad teatud kasutusstsenaariumites vĂ”i lihtsalt paremad, kui rÀÀkida klassikaliste andmebaaside ĂŒlesannetest, kuid mulle ei ole teada teist sama tĂ”husat ja universaalset vahendit ajandmete töötlemiseks.
 

Integreerimine Pythoniga

KDB+ kasutamise lihtsustamiseks tehnoloogiaga mittetuttavatele inimestele on KX loonud raamatukogud, mis vĂ”imaldavad tihedat integreerimist Pythoniga ĂŒhe protsessi raames. Saate kutsuda ĂŒles ĂŒkskĂ”ik millise Python'i funktsiooni Q-st ja vastupidi — kutsuda ĂŒkskĂ”ik millise Q funktsiooni Pythonist (sealhulgas QSQL laused). Raamatukogud konverteerivad vajadusel (tĂ”hususe huvides mitte alati) andmeid ĂŒhe keele formaadist teise. Tulemuseks on see, et Q ja Python elavad nii tihedas sĂŒmbioosis, et nende vahelised piirid hĂ€gustuvad. SeetĂ”ttu on programmeerijal, ĂŒhelt poolt, tĂ€ielik juurdepÀÀs paljudele kasulikele Python'i raamatukogudele ja teiselt poolt saab ta Pythoni integreeritud kiire andmebaasi, mis sobib suurepĂ€raselt suurte andmetega töötamiseks, mis on eriti kasulik neile, kes tegelevad masinĂ”ppe vĂ”i modelleerimisega.
 
Q kasutamine Pythoni abil:

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

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öötajatelt — https://code.kx.com/v2/wp/

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster