Baza e të dhënave KDB+: nga financat deri te "Formula 1"

KDB+, produkt i kompanisĂ« KX — Ă«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.
 
Baza e të dhënave KDB+: nga financat deri te "Formula 1"
 
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:

Baza e të dhënave KDB+: nga financat deri te "Formula 1"

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Ă« faqen e kompanisĂ«, 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 një version falas për qëllime jo komerciale (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Ă« — https://kx.com/
Faqja pĂ«r zhvilluesit — https://code.kx.com/v2/
Libri Q For Mortals (nĂ« anglisht) — https://code.kx.com/q4m3/
Artikuj mbi aplikacionet e KDB+/Q nga punonjĂ«sit e kx — https://code.kx.com/v2/wp/

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster