KDB+, produkt i kompanisĂ« â Ă«shtĂ« njĂ« bazĂ« tĂ« dhĂ«nash kolonash shumĂ« e njohur nĂ« qarqet specifike, e cila Ă«shtĂ« krijuar pĂ«r ruajtjen e serive temporale dhe pĂ«rllogaritjeve analitike mbi to. Fillimisht, ajo ishte (dhe vazhdon tĂ« jetĂ«) shumĂ« e popullarizuar nĂ« industrinĂ« financiare â e pĂ«rdorin tĂ« gjithĂ« top-10 bankat investuese dhe shumĂ« fonde hedge tĂ« njohura, shkĂ«mbime dhe organizata tĂ« tjera. SĂ« fundmi, nĂ« KX vendosĂ«n tĂ« zgjerojnĂ« bazĂ«n e klientĂ«ve dhe tani ofrojnĂ« zgjidhje edhe nĂ« fushat e tjera ku ka shumĂ« tĂ« dhĂ«na tĂ« rregulluara kronologjikisht ose ndryshe â telekomunikacion, bioinformatikĂ«, prodhim, etj. Ata gjithashtu janĂ« partnerĂ« tĂ« ekipit Aston Martin Red Bull Racing nĂ« "FormulĂ«n 1", ku ndihmojnĂ« nĂ« mbledhjen dhe procesimin e tĂ« dhĂ«nave nga sensorĂ«t e makinave dhe nĂ« analizimin e testeve nĂ« tunelin aerodinamik. NĂ« kĂ«tĂ« artikull, do tĂ« tregoj se cilat janĂ« karakteristikat qĂ« e bĂ«jnĂ« KDB+ shumĂ« tĂ« fuqishme, pĂ«rse kompanitĂ« janĂ« tĂ« gatshme tĂ« shpenzojnĂ« shuma tĂ« mĂ«dha pĂ«r tĂ«, dhe pĂ«rse nĂ« tĂ« vĂ«rtetĂ« nuk Ă«shtĂ« njĂ« bazĂ« tĂ« dhĂ«nash.
Â

Â
NĂ« kĂ«tĂ« artikull, do tĂ« pĂ«rpiqem tĂ« tregoj nĂ« pĂ«rgjithĂ«si se çfarĂ« pĂ«rfaqĂ«son KDB+, cilat janĂ« mundĂ«sitĂ« dhe kufizimet e saj, dhe cilat janĂ« pĂ«rfitimet e saj pĂ«r kompanitĂ« qĂ« dĂ«shirojnĂ« tĂ« pĂ«rpunojnĂ« volume tĂ« mĂ«dha tĂ« dhĂ«nash. Nuk do tĂ« hyj nĂ« detajet e implementimit tĂ« KDB+ dhe nĂ« detajet e gjuhĂ«s sĂ« saj tĂ« programimit Q. TĂ« dyja kĂ«to tema janĂ« shumĂ« tĂ« gjera dhe meritojnĂ« artikuj tĂ« veçantĂ«. ShumĂ« informacion mbi kĂ«to tema mund tĂ« gjendet nĂ« faqen code.kx.com, pĂ«rfshirĂ« librin mbi Q â Q For Mortals (shihni lidhjen mĂ« poshtĂ«).
Disa terma
- Baza e të dhënave në memory. Një bazë të dhënash që ruan të dhënat në memorien operative për të përshpejtuar qasjen. Avantazhet e një baze të tillë janë të qarta, ndërsa disavantazhi është mundësia e humbjes së të dhënave dhe nevoja për të pasur shumë memorje në server.
- Baza e të dhënave kolonale. Një bazë të dhënash ku të dhënat ruhen kolonë për kolonë, dhe jo rresht për rresht. Avantazhi kryesor i një baze të tillë është se të dhënat nga një kolonë ruhen së bashku në disk dhe në memorie, çka përshpejton qasjen në to dukshëm. Nuk ka nevojë të ngarkohet kolonat që nuk përdoren në kërkesë. Disavantazhi kryesor është se është e komplikuar të modifikosh dhe fshish shënime.
- SerisĂ« temporale. TĂ« dhĂ«nat me njĂ« kolonĂ« tĂ« tipit datĂ« ose kohĂ«. Si rregull, pĂ«r tĂ« tilla tĂ« dhĂ«na Ă«shtĂ« e rĂ«ndĂ«sishme renditja nĂ« kohĂ«, qĂ« tĂ« mund tĂ« pĂ«rcaktohet lehtĂ«sisht se cila shĂ«nim i paraprin ose i ndjek aktualin, apo pĂ«r tĂ« aplikuar funksione tĂ« cilat rezultati i tyre varet nga rendi i shĂ«nimeve. Bazat tradicionale tĂ« dhĂ«nash janĂ« ndĂ«rtuar mbi njĂ« parim krejtĂ«sisht tjetĂ«r â pĂ«rfaqĂ«simin e njĂ« grupi shĂ«nimesh si njĂ« shumĂ«, ku rendi i shĂ«nimeve nuk Ă«shtĂ« i pĂ«rcaktuar nĂ« parim.
- Vektori. NĂ« kontekstin e KDB+ â Ă«shtĂ« njĂ« listĂ« elementesh tĂ« njĂ« tipi atomik, pĂ«r shembull, numra. Me fjalĂ« tĂ« tjera, njĂ« masiv elementesh. Masivet, ndryshe nga listat, mund tĂ« ruhen nĂ« mĂ«nyrĂ« kompakte dhe tĂ« pĂ«rpunohen duke pĂ«rdorur instruksionet vektoriale tĂ« procesorit.
Â
Historiku
Kompania KX u themelua nĂ« vitin 1993 nga Arthur Whitney, i cili mĂ« parĂ« kishte punuar nĂ« bankĂ«n Morgan Stanley mbi gjuhĂ«n A+, trashĂ«gimtarin e APL â njĂ« gjuhĂ« shumĂ« origjinale dhe nĂ« atĂ« kohĂ« popullore nĂ« botĂ«n financiare. Natyrisht, nĂ« KX Arthur vazhdoi nĂ« tĂ« njĂ«jtin frymĂ« dhe krijoi gjuhĂ«n e programimit K, duke u udhĂ«hequr nga idetĂ« e minimalizmit radikal. Programet nĂ« K duken si njĂ« set kaotik i shenjave tĂ« ndihmĂ«s dhe simboleve speciale, ku kuptimi i shenjave dhe funksioneve varet nga konteksti, dhe çdo operacion ka shumĂ« mĂ« shumĂ« kuptim se zakonisht nĂ« gjuhĂ«t e programimit tĂ« njohura. PĂ«r shkak tĂ« kĂ«saj, njĂ« program nĂ« K zĂ« minimumin e hapĂ«sirĂ«s â disa rreshta mund tĂ« zĂ«vendĂ«sojnĂ« faqe tĂ« tĂ«ra teksti tĂ« gjuhĂ«ve tepĂ«r tĂ« gjata si Java â dhe Ă«shtĂ« njĂ« realizim super tĂ« pĂ«rqendruar tĂ« algoritmit.
Â
Një funksion në K, i cili realizon pjesën më të madhe të gjeneratorit LL1 parser 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),"]";""]]}Â Â
 Kjo filozofi e efikasitetit ekstrem me minimumin e lĂ«vizjeve u realizua nga Arturi edhe nĂ« KDB+, e cila u shfaq nĂ« vitin 2003 (mendoj se tani kuptoni se nga vjen letra K nĂ« emĂ«r) dhe nuk Ă«shtĂ« asgjĂ« tjetĂ«r veçse njĂ« interpretues i versionit tĂ« katĂ«rt tĂ« gjuhĂ«s K. NjĂ« version mĂ« i kĂ«ndshĂ«m pĂ«r syrin e pĂ«rdoruesit, i quajtur Q, Ă«shtĂ« shtuar mbi K. NĂ« Q Ă«shtĂ« shtuar gjithashtu mbĂ«shtetje pĂ«r njĂ« dialekt specifik tĂ« SQL â QSQL, dhe nĂ« interpretues â mbĂ«shtetje pĂ«r tabela si njĂ« tip tĂ« dhĂ«nash sistemore, mjete pĂ«r punĂ«n me tabela nĂ« memorje dhe nĂ« disk, etj.
Â
Pra, nga kĂ«ndvĂ«shtrimi i pĂ«rdoruesit, KDB+ Ă«shtĂ« thjesht njĂ« interpretues i gjuhĂ«s Q me mbĂ«shtetje pĂ«r tabela dhe shprehje qĂ« i ngjajnĂ« SQL-sĂ« nĂ« stilin LINQ nga C#. Kjo Ă«shtĂ« dallimi kryesor i KDB+ nga bazat e tjera tĂ« tĂ« dhĂ«nave dhe avantazhi i saj konkurrues kryesor, i cili shpesh kalon pa u vĂ«nĂ« re. Nuk Ă«shtĂ« njĂ« bazĂ« tĂ« dhĂ«nash + njĂ« gjuhĂ« ndihmĂ«se, por njĂ« gjuhĂ« programimi e plotĂ« dhe e fuqishme + mbĂ«shtetje e integruar pĂ«r funksionet e tĂ« dhĂ«nave. Ky dallim do tĂ« luajĂ« njĂ« rol vendimtar nĂ« renditjen e tĂ« gjitha avantazheve tĂ« KDB+. PĂ«r shembullâŠ
Â
Madhësia
NĂ« pĂ«rputhje me standartet moderne, KDB+ ka njĂ« madhĂ«si thjesht mikroskopike. NĂ« mĂ«nyrĂ« tĂ« dosido, Ă«shtĂ« njĂ« skedar i ekzekutueshĂ«m me njĂ« madhĂ«si mĂ« pak se njĂ« megabajt dhe njĂ« skedar tekstual tĂ« vogĂ«l me disa funksione sistemore. NĂ« tĂ« vĂ«rtetĂ« â 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 i lejon KDB+ tĂ« funksionojĂ« shkĂ«lqyer nĂ« çdo harduer â nga mikrokompjuterĂ«t Pi deri te serverĂ«t me terabajt tĂ« memories. Kjo nuk e ndikon nĂ« funksionalitet, madje, Q starton menjĂ«herĂ«, duke e bĂ«rĂ« tĂ« mundur pĂ«rdorimin e saj si njĂ« gjuhĂ« skriptuese.
- Me këtë madhësi, interpretuesi Q e plotëson tërësisht cache-in e procesorit, duke e përshpejtuar ekzekutimin e programeve.
- Me një madhësi të tillë të skedarit ekzekutues, procesi Q zë një hapësirë të papërfillshme në memorje, duke mundësuar ekzekutimin e tyre në qindra. Në të njëjtën kohë, Q mund të operojë edhe me dhjetëra deri në qindra gigabajt memoria brenda një procesi.
Universialiteti
Q Ă«shtĂ« jashtĂ«zakonisht i pĂ«rshtatshĂ«m pĂ«r njĂ« gamĂ« tĂ« gjerĂ« detyrash. Procesi Q mund tĂ« veprojĂ« si njĂ« bazĂ« tĂ« dhĂ«nash historike dhe tĂ« ofrojĂ« qasje tĂ« shpejtĂ« nĂ« terabajt tĂ« informacionit. PĂ«r shembull, ne kemi dhjetĂ«ra baza historike, nĂ« disa prej tĂ« cilave njĂ« ditĂ« tĂ« dhĂ«nash tĂ« pa kompresuara zĂ« mĂ« shumĂ« se 100 gigabajt. MegjithatĂ«, brenda kufijve tĂ« arsyeshĂ«m, njĂ« kĂ«rkesĂ« nĂ« bazĂ«n e tĂ« dhĂ«nave do tĂ« pĂ«rfundojĂ« brenda dhjetĂ«ra deri nĂ« qindra milisekonda. NĂ« pĂ«rgjithĂ«si, pĂ«r kĂ«rkesat e pĂ«rdoruesve kemi njĂ« kohĂ« universale limit â 30 sekonda â dhe ajo aktivizohet shumĂ« rrallĂ«.
Â
Me po aq lehtĂ«si, Q mund tĂ« bĂ«het njĂ« bazĂ« tĂ« dhĂ«nash nĂ« memorje. Shtimi i tĂ« dhĂ«nave tĂ« reja nĂ« tabelat nĂ« memorje ndodh aq shpejt, sa qĂ« faktor limitues janĂ« kĂ«rkesat e pĂ«rdoruesve. TĂ« dhĂ«nat nĂ« tabela ruhen pĂ«r kolona, prandaj çdo operacion mbi kolona do tĂ« pĂ«rdorĂ« cache-in e procesorit nĂ« maksimum. PĂ«rveç kĂ«saj, nĂ« KX u pĂ«rpoqĂ«n tĂ« realizojnĂ« tĂ« gjitha operacionet bazike si aritmetika pĂ«rmes instruksioneve vektoriale tĂ« procesorit, pĂ«r tĂ« maksimizuar shpejtĂ«sinĂ« e tyre. Q mund tĂ« kryejĂ« edhe detyra tĂ« padishme pĂ«r bazat e dhĂ«nash â pĂ«r shembull, tĂ« procesojĂ« tĂ« dhĂ«na rrjedhĂ«se dhe tĂ« llogarisĂ« nĂ« "kohĂ« reale" (me vonesĂ« nga disa milisekonda deri nĂ« disa sekonda, nĂ« varĂ«si tĂ« detyrĂ«s) funksione agreguese tĂ« ndryshme pĂ«r instrumentet financiare pĂ«r intervale tĂ« ndryshme tĂ« kohĂ«s, ose tĂ« ndĂ«rtojĂ« njĂ« model tĂ« ndikimit tĂ« njĂ« transaksioni tĂ« kryer nĂ« treg dhe ta profilizojĂ« pothuajse menjĂ«herĂ« pas kryerjes sĂ« tij. NĂ« kĂ«to detyra, zakonisht vonesa kryesore vjen nga nevoja pĂ«r tĂ« sinkronizuar tĂ« dhĂ«nat nga burime tĂ« ndryshme. ShpejtĂ«sia e lartĂ« arrihet falĂ« faktit se tĂ« dhĂ«nat dhe funksionet qĂ« i pĂ«rpunojnĂ« ato janĂ« nĂ« tĂ« njĂ«jtin proces, dhe pĂ«rpunimi reduktohet nĂ« ekzekutimin e disa shprehjeve QSQL dhe bashkimeve, tĂ« cilat nuk interpretohen, por ekzekutohen nĂ« kodin binar.
Â
Finalmente, me Q mund të shkruhen të gjitha proceset shërbyese. Për shembull, proceset Gateway, të cilat shpërndajnë automatikisht kërkesat e përdoruesve në bazat dhe serverët e nevojshëm. Programuesi ka lirinë e plotë për të implementuar çdo algoritëm për ekuilibrimin, prioritetizimin, qëndrueshmërinë, të drejtat e aksesit, kuotat dhe çfarëdo gjëje tjetër që dëshiron. Problemi kryesor këtu është se do të duhet ta realizoni gjithçka vetë.
Â
Për shembull, do të përmend disa lloje procesesh që kemi. Të gjitha këto janë aktivisht të përdorura dhe funksionojnë së bashku, duke bashkuar në një tërësi dhjetëra baza të ndryshme, duke përpunuar të dhëna nga shumë burime dhe duke shërbyer qindra përdoruesve dhe aplikacioneve.
- Konektorët (feedhandler) në burimet e të dhënave. Këto procese përdorin zakonisht biblioteka të jashtme, të cilat ngarkohen në Q. Interfesa C në Q është jashtëzakonisht e thjeshtë dhe lejon lehtësisht krijimin e funksioneve proxy për çdo bibliotekë C/C++. Q është mjaft i shpejtë për t'u bërë, për shembull, me përpunimin e rrjedhës së mesazheve FIX nga të gjitha bursat evropiane në të njëjtën kohë.
- Distribuuesit e të dhënave (tickerplant), të cilët shërbejnë si një lidhje ndërmjet lidhësve dhe konsumatorëve. Në të njëjtën kohë, ata shkruajnë të dhënat hyrëse në një log binar të veçantë, duke siguruar që konsumatorët të jenë të qëndrueshëm ndaj humbjeve të lidhjes ose ripërpunimeve.
- Baza të dhënash në kujtesë (rdb). Këto baza ofrojnë qasje shumë të shpejtë në të dhënat e freskëta duke i ruajtur ato në kujtesë. Zakonisht, ato grumbullojnë të dhënat në tabela gjatë ditës dhe i zerojnë ato natën.
- Bazat e të dhënave të qëndrushme (pdb). Këto baza sigurojnë ruajtjen e të dhënave për ditën e sotme në një bazë historike. Zakonisht, ndryshe nga rdb, ato nuk i ruajnë të dhënat në kujtesë, por përdorin një cache të veçantë në disk gjatë ditës dhe kopjojnë të dhënat në mesnatë në bazën historike.
- Bazat historike (hdb). Këto baza ofrojnë qasje në të dhënat për ditët, muajt dhe vitet e kaluara. Madhësia e tyre (në ditë) është e kufizuar vetëm nga madhësia e disqeve hard. Të dhënat mund të vendosen kudo, veçanërisht në disqe të ndryshme për të përshpejtuar qasjen. Ka mundësi për të kompaktuar të dhënat, duke përdorur disa algoritma për të zgjedhur. Struktura e bazës është mirë e dokumentuar dhe e thjeshtë, të dhënat ruhen kolonë për kolonë në skedarë të zakonshëm, kështu që ato mund të përpunohen gjithashtu përmes mjeteve të sistemit operativ.
- Bazat me informacion të agreguar. Ato ruajnë agregacione të ndryshme, zakonisht të grupuara sipas emrit të instrumentit dhe intervalit të kohës. Bazat në kujtesë përditësojnë gjendjen e tyre me çdo mesazh hyrës, ndërsa ato historike ruajnë të dhëna të parapërllogaritura për të përshpejtuar qasjen në të dhënat historike.
- MĂ« nĂ« fund, proceset gateway, qĂ« shĂ«rbejnĂ« aplikacioneve dhe pĂ«rdoruesve. Q lejon realizimin e pĂ«rpunimit tĂ«rĂ«sisht asinkron tĂ« mesazheve hyrĂ«se, shpĂ«rndarjen e tyre nĂ« baza, kontrollin e tĂ« drejtave tĂ« aksesit etj. Dua tĂ« theksoj se mesazhet nuk janĂ« tĂ« kufizuara dhe zakonisht nuk janĂ« shprehje SQL, siç ndodh nĂ« bazat e tjera tĂ« dhĂ«nash. Zakonisht shprehja SQL fshihet nĂ« njĂ« funksion tĂ« veçantĂ« dhe krijohet sipas parametrave tĂ« kĂ«rkuar nga pĂ«rdoruesi â kryhet konvertimi i kohĂ«s, filtrimi, tĂ« dhĂ«nat normalizohen (pĂ«r shembull, çmimi i aksioneve rregullohet nĂ«se ka pasur shpĂ«rndarje tĂ« dividentĂ«ve) etj.
Arkitektura tipike për një lloj të dhënash:

Shpejtësia
MegjithĂ«se Q Ă«shtĂ« njĂ« gjuhĂ« interpretuese, ajo Ă«shtĂ« njĂ«kohĂ«sisht njĂ« gjuhĂ« vektoriale. Kjo do tĂ« thotĂ« se shumĂ« funksione tĂ« integruara, nĂ« veçanti, ato aritmetike, pranojnĂ« argumente tĂ« çdo forme â numra, vektorĂ«, matrica, lista, dhe nga programatori pritet qĂ« ai tĂ« realizojĂ« programin si operacione mbi masivat. NĂ« njĂ« gjuhĂ« tĂ« tillĂ«, nĂ«se ju mbledhni dy vektorĂ« me njĂ« milion elemente, nuk ka rĂ«ndĂ«si qĂ« gjuha Ă«shtĂ« interpretuese, mbledhja do tĂ« bĂ«het me njĂ« funksion binar super tĂ« optimizuar. Duke pasur parasysh se pjesa mĂ« e madhe e kohĂ«s nĂ« programet Q shkon pĂ«r operacione me tabela qĂ« pĂ«rdorin kĂ«to funksione tĂ« bazuara nĂ« vektore, rezultati Ă«shtĂ« njĂ« shpejtĂ«si mjaft e mirĂ« pune, e cila lejon qĂ« tĂ« pĂ«rpunohen njĂ« sasi masive tĂ« dhĂ«nash edhe nĂ« njĂ« proces. Kjo Ă«shtĂ« e ngjashme me bibliotekat matematike nĂ« Python â megjithĂ«se vetĂ« Python Ă«shtĂ« njĂ« gjuhĂ« shumĂ« e ngadalshme, ajo ka shumĂ« biblioteka tĂ« shkĂ«lqyera si numpy, tĂ« cilat lejojnĂ« pĂ«rpunimin e tĂ« dhĂ«nave numerike me shpejtĂ«sinĂ« e njĂ« gjuhe tĂ« kompiluar (ngjashĂ«m, numpy Ă«shtĂ« ideologjikisht e afĂ«rt me Q).
Â
PĂ«rveç kĂ«saj, KX i Ă«shtĂ« qasur me shumĂ« kujdes projektimit tĂ« tabelave dhe optimizimit tĂ« punĂ«s me to. SĂ« pari, mbĂ«shteten disa lloje indeksesh, tĂ« cilat pĂ«rkrahĂ«n nga funksionet e ndĂ«rtuara dhe mund tĂ« aplikohen jo vetĂ«m nĂ« kolonat e tabelave, por edhe nĂ« çdo vektor â grupim, renditje, atribut unik dhe grupim tĂ« veçantĂ« pĂ«r bazat historike. Indeksi vendoset nĂ« mĂ«nyrĂ« elementare dhe korrigjohet automatikisht me shtimin e elementeve nĂ« kolonĂ«/vektor. Indeksit mund t'i aplikohet me suksesshĂ«m nĂ« kolonat e tabelave si nĂ« memorie, ashtu edhe nĂ« disk. GjatĂ« ekzekutimit tĂ« kĂ«rkesĂ«s QSQL, indekset pĂ«rdoren automatikisht, nĂ«se Ă«shtĂ« e mundur. SĂ« dyti, puna me tĂ« dhĂ«nat historike Ă«shtĂ« realizuar pĂ«rmes mekanizmit tĂ« hartimit tĂ« skedarĂ«ve tĂ« OS (memory map). Tabelat e mĂ«dha kurrĂ« nuk ngarkohen nĂ« memorie; nĂ« vend tĂ« kĂ«saj, kolonat e nevojshme hartohen drejtpĂ«rdrejt nĂ« memorie dhe ngarkohet vetĂ«m pjesa e tyre (kĂ«tu ndihmojnĂ« gjithashtu indekset), qĂ« Ă«shtĂ« e nevojshme. PĂ«r programatorin, nuk ka ndryshim nĂ«se tĂ« dhĂ«nat ndodhen nĂ« memorie apo jo; mekanizmi i punĂ«s me mmap Ă«shtĂ« plotĂ«sisht i fshehur nĂ« thellĂ«si tĂ« Q.
Â
KDB+ është një bazë të dhënash jo-relaçionale, tabelat mund të përmbajnë të dhëna të rastësishme; megjithatë, rendi i rreshtave në tabelë nuk ndryshon kur shtohen elemente të reja dhe mund të përdoret si dhe duhet gjatë shkruarjes së kërkesave. Kjo veçori është thelbësore për punën me seri të dhënash (të dhëna nga bursa, telemetri, log-e ngjarjesh), sepse nëse të dhënat janë të renditura sipas kohës, atëherë përdoruesi nuk ka nevojë të aplikojë asnjë truk SQL për të gjetur rreshtin e parë ose të fundit sipas kohës nga tabela ose N rreshta, për të përcaktuar se cili rresht vijon pas rreshtit N, etj. Edhe më shumë thjeshtohen bashkimet e tabelave; për shembull, gjetja e ofertës së fundit për 16000 transaksione VOD.L (Vodafone) në tabelën e 500 milion elementeve zgjat rreth një sekondë në disk dhe disa milisekonda në memorie.
Â
NjĂ« shembull i bashkimit sipas kohĂ«s â tabela quote Ă«shtĂ« hartuar nĂ« memorie, prandaj nuk ka nevojĂ« tĂ« specifikohet VOD.L nĂ« where; indeksi i kolonĂ«s sym pĂ«rdoret nĂ« mĂ«nyrĂ« implicit dhe fakti qĂ« tĂ« dhĂ«nat janĂ« tĂ« renditura sipas kohĂ«s. Pothuajse tĂ« gjitha bashkimet nĂ« Q janĂ« funksione tĂ« zakonshme dhe jo pjesĂ« e shprehjes select:
1. aj[`sym`time; select from trade where date=2019.03.26, sym=`VOD.L; select from quote where date=2019.03.26]Â Â
Në fund, duhet të theksohet se inxhinierët në KX, duke filluar nga Arthur Whitney, janë të obsesionuar për efikasitet dhe bëjnë përpjekje të gjtha për të nxjerrë maksimumin nga funksionet standarde të Q dhe për të optimizuar modelet më të shpeshta të përdorimit.
Â
Përfundimi
KDB+ Ă«shtĂ« popullore pĂ«r biznesin kryesisht pĂ«r shkak tĂ« shumĂ«llojshmĂ«risĂ« sĂ« saj pĂ«rjashtuar â ajo shĂ«rben njĂ«lloj si njĂ« bazĂ« in-memory, ashtu edhe si njĂ« bazĂ« pĂ«r ruajtjen e terabajtĂ«ve tĂ« tĂ« dhĂ«nave historike, dhe si njĂ« platformĂ« pĂ«r analizĂ«n e tĂ« dhĂ«nave. FalĂ« faktit se procesimi i tĂ« dhĂ«nave ndodh drejtpĂ«rdrejt nĂ« bazĂ«, arrihet njĂ« shpejtĂ«si e lartĂ« e punĂ«s dhe kursim burimesh. NjĂ« gjuhĂ« e plotĂ« programimi, e integruar me funksionet e bazĂ«s sĂ« tĂ« dhĂ«nave, e lejon realizimin e gjithĂ« procesit tĂ« nevojshĂ«m nĂ« njĂ« platformĂ« â nga marrja e tĂ« dhĂ«nave deri te pĂ«rpunimi i kĂ«rkesave tĂ« pĂ«rdoruesve.
Â
Informacione të tjera
Disavantazhet
Një mangësi e rëndësishme e KDB+/Q është prag i lartë i hyrjes. Gjuha ka një sintaksë të çuditshme; disa funksione janë shumë të tejngarkuara (p.sh., value ka rreth 11 variante përdorimi). E rëndësishmja, ajo kërkon një qasje radikalisht të ndryshme ndaj programimit. Në gjuhën vektoriale, është e nevojshme të mendohet vazhdimisht në terma të transformimeve të arrave, të realizohen të gjitha ciklet përmes disa varianteve të funksioneve map/reduce (të cilat quhen adverbs në Q) dhe kurrë të mos përpiqeni të kurseni duke zëvendësuar operacionet vektoriale me ato atomike. Për shembull, për të gjetur indeksin N-të të shfaqjes së një elementi në një grup duhet të shkruhet:
1. (where element=vector)[N]Â Â
ndonjëherë kjo duket jashtëzakonisht e paefektshme sipas standardeve C/Java (= krijon një vektor boolean, ku where kthen indeksat e elementeve true). Por kjo shprehje e bën kuptimin më të qartë dhe ju përdorni operacioneve vektoriale të shpejta në vend të atyre të ngadalta atomike. Diferenca konceptuale mes gjuhës vektoriale dhe të tjerave është e ngjashme me diferencën mes qasjeve imperativ dhe funksional në programim, dhe për këtë duhet të jeni të gatshëm.
Â
Disa disa përdorues janë të pakënaqur me QSQL. Arsyeja është se ai dukej si SQL i vërtetë, por në fakt është thjesht një interpretues i shprehjeve të ngjashme me SQL, që nuk mbështet optimizimin e pyetjeve. Përdoruesi duhet të shkruajë vetë pyetje optimal, dhe kjo ndodh në Q, diçka për të cilën shumë nuk janë të gatshëm. Nga ana tjetër, natyrisht gjithmonë mund të shkruash vetë një pyetje optimale, pa u mbështetur te optimizuesi i zi.
Â
NjĂ« avantazh Ă«shtĂ« se libri pĂ«r Q â Q For Mortals Ă«shtĂ« nĂ« dispozicion falas nĂ« , gjithashtu aty mblidhen shumĂ« materiale tĂ« tjera tĂ« dobishme.
Â
Një tjetër minusi i madh është kostoja e licencës. Kjo arrin në disa dhjetëra mijëra dollarë në vit për një CPU. Vetëm kompanitë e mëdha mund t'i përballojnë këto shpenzime. Së fundmi, KX ka bërë politikën e licencës më fleksibël dhe ofron mundësinë për të paguar vetëm për kohën e përdorimit ose për të marrë me qira KDB+ në re të Google dhe Amazon. Për më tepër, KX ofron për shkarkim (version 32-bit ose 64-bit me kërkesë).
Â
Konkurrentët
EkzistojnĂ« shumĂ« baza tĂ« specializuara tĂ« ndĂ«rtuara mbi parime tĂ« ngjashme â kolonjare, in-memory, tĂ« orientuara ndaj volumit tĂ« madh tĂ« tĂ« dhĂ«nave. Problemi Ă«shtĂ« se kĂ«to janĂ« tĂ« vĂ«rteta baza tĂ« specializuara tĂ« tĂ« dhĂ«nave. NjĂ« shembull i gjallĂ« Ă«shtĂ« Clickhouse. Kjo bazĂ« tĂ« dhĂ«nash ka njĂ« princip tĂ« ngjashĂ«m me KDB+ pĂ«r ruajtjen e tĂ« dhĂ«nave nĂ« disk dhe krijimin e indekseve, disa pyetje ajo i zgjidh mĂ« shpejt se KDB+, megjithatĂ« jo ndjeshĂ«m. Por edhe si njĂ« bazĂ« tĂ« dhĂ«nash, Clickhouse Ă«shtĂ« mĂ« e specializuar se KDB+ â analiza e web-it vs seri koherente tĂ« tĂ« dhĂ«nave (kjo ndarje Ă«shtĂ« shumĂ« e rĂ«ndĂ«sishme â pĂ«r shkak tĂ« saj, pĂ«r shembull, Clickhouse nuk ofron mundĂ«si pĂ«r tĂ« pĂ«rdorur renditjen e shĂ«nimeve). MegjithatĂ«, mĂ« e rĂ«ndĂ«sishmja, Clickhouse nuk ka univerzalitetin e KDB+, njĂ« gjuhĂ« qĂ« lejon pĂ«rpunimin e tĂ« dhĂ«nave direkt nĂ« bazĂ«, nĂ« vend qĂ« t'i ngarkojmĂ« ato paraprakisht nĂ« njĂ« aplikacion tĂ« veçantĂ«, tĂ« ndĂ«rtosh shprehje SQL sipas nevojĂ«s, tĂ« aplikosh funksione arbitrare nĂ« pyetje, tĂ« krijosh procese qĂ« nuk janĂ« tĂ« lidhura me ekzekutimin e funksioneve tĂ« bazĂ«s historike. Prandaj, Ă«shtĂ« e vĂ«shtirĂ« tĂ« krahasosh KDB+ me baza tĂ« tjera, ato mund tĂ« jenĂ« mĂ« tĂ« mira nĂ« skenarĂ« tĂ« caktuar pĂ«rdorimi ose thjesht mĂ« tĂ« mira kur flitet pĂ«r detyrat e bazave klasike tĂ« tĂ« dhĂ«nave, por nuk njoh njĂ« tjetĂ«r mjet kaq efektiv dhe universal pĂ«r pĂ«rpunimin e tĂ« dhĂ«nave temporale.
Â
Integrimi me Python
PĂ«r tĂ« thjeshtuar punĂ«n me KDB+ pĂ«r ata qĂ« nuk janĂ« tĂ« njohur me teknologjinĂ«, KX krijoi biblioteka pĂ«r integrim tĂ« ngushtĂ« me Python brenda tĂ« njĂ«jtit proces. Mund tĂ« thĂ«rrisni çdo funksion python nga Q, ashtu si dhe anasjelltas â tĂ« thĂ«rrisni çdo funksion Q nga Python (veçanĂ«risht shprehjet QSQL). Bibliotekat konvertojnĂ« nĂ«se Ă«shtĂ« e nevojshme (pĂ«r efikasitetin nuk Ă«shtĂ« gjithmonĂ«). Si rezultat, Q dhe Python jetojnĂ« nĂ« njĂ« simbiozĂ« kaq tĂ« ngushtĂ«, saqĂ« kufijtĂ« mes tyre zhduken. PĂ«rfundimisht, programuesi, nga njĂ«ra anĂ«, ka qasje tĂ« plotĂ« nĂ« njĂ« shumĂ«llojshmĂ«ri bibliotekash tĂ« dobishme Python, dhe nga ana tjetĂ«r, ai merr njĂ« bazĂ« tĂ« shpejtĂ« tĂ« integruar nĂ« Python pĂ«r punĂ«n me tĂ« dhĂ«na tĂ« mĂ«dha, qĂ« veçanĂ«risht i shĂ«rben atyre qĂ« merren me tĂ« mĂ«suarit e makinerive ose modelimin.
Â
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)Â Â
Linke
Faqja e kompanisĂ« â
Faqja pĂ«r zhvilluesit â
Libri Q For Mortals (nĂ« anglisht) â
Artikuj mbi aplikacionet e KDB+/Q nga punonjĂ«sit e kx â
Burimi: habr.com
