KDB+á áá¯áá¹ááá®áá¯ááºáá¯ááº
á€áá±á¬ááºážáá«ážááœáẠKDB+ ááẠá¡áááºá¡áá¬á áááºážá á
áœááºážáá±á¬ááºáááºááŸáá·áº ááá·áºáááºáá»ááºáá»á¬ážááŸáá·áº áá±áá¬ááá¬ááá»á¬ážá
áœá¬ááᯠáá¯ááºáá±á¬ááºááá¯áá±á¬ áá¯áá¹ááá®áá»á¬ážá¡ááœáẠáááºážá á¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážááᯠáá±áá¯áá»á¡á¬ážááŒáá·áº ááŒá±á¬ááŒááẠááŒáá¯ážá
á¬ážáá«áááºá KDB+ á á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡áá±ážá
ááẠááá¯á·ááá¯áẠáááºážá Q áááá¯ááááºážáááºážáá¬áá¬á
áá¬ážá á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá»áœááºá¯ááºááá«áááºáá«á á€á¡ááŒá±á¬ááºážá¡áá¬ááŸá
áºáá¯áá¯á¶ážááẠá¡ááœááºáá»ááºááŒáá·áºááŒá®áž áá®ážááŒá¬ážáá±á¬ááºážáá«ážáá»á¬ážááŸáá·áº ááá¯ááºáááºáá«áááºá Q - Q For Mortals á
á¬á¡á¯ááºá¡áá«á¡ááẠá€á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºá¡áá»á¬ážá¡ááŒá¬ážááᯠcode.kx.com ááœáẠááŸá¬ááœá±á·ááá¯ááºáá«áááºá
áá±á«áá¬áá¡áá»áá¯á·
- áááºááá¯áá®áá±áá¬áá±á·á áºá ááá¯ááá¯ááŒááºáááºá áœá¬ áááºáá±á¬ááºááá¯ááºá á±áááºá¡ááœáẠRAM ááœáẠáá±áá¬ááááºážáááºážááá·áº áá±áá¬áá±á·á áºá ááá¯áá²á·ááá¯á·áá±á¬ áá±áá¬áá±á·á áºá á¡á¬ážáá¬áá»ááºáá»á¬ážááŸá¬ ááŸááºážáááºážáá±á¬áºáááºáž á¡á¬ážáááºážáá»ááºáá»á¬ážááŸá¬ áá±áá¬áá¯á¶ážááŸá¯á¶ážááŸá¯ ááŒá áºááá¯ááºááŒá±ááŸáá·áº áá¬áá¬ááœáẠmemory á¡áá»á¬ážá¡ááŒá¬ážááŸáááẠááá¯á¡ááºááŒááºáž ááŒá áºáááºá
- áá±á¬áºáá¶áá±áá¬áá±á·á áºá áá±áá¬ááᯠáá±á¬áºáá¶á¡ááá¯áẠááááºážáááºážáá¬ážááá·áº áá±áá¬áá±á·á áºááẠááŸááºáááºážááŒáá·áº ááŸááºáááºážáááºááŒááºážááẠááá¯áá²á·ááá¯á·áá±á¬ áá±áá¬áá±á·á áºá á¡ááá á¡á¬ážáá¬áá»ááºááŸá¬ áá±á¬áºáá¶áá áºáá¯á០áá±áá¬áá»á¬ážááᯠáá áºááºááŸáá·áº áááºááá¯áá®ááœáẠá¡áá°ááᜠááááºážáááºážáá¬ážááŒááºážááŒá áºááŒá®áž áááºážááᯠáááºáá±á¬ááºááá¯ááºááŸá¯ áááááá¬áᬠááŒááºáááºá á±áááºá áá±ážááŒááºážááŸá¯ááœáẠá¡áá¯á¶ážáááŒá¯áá±á¬ áá±á¬áºáá¶áá»á¬ážááᯠáááºááẠáááá¯á¡ááºáá«á á¡áááá¡á¬ážáááºážáá»ááºááŸá¬ ááŸááºáááºážáá»á¬ážááᯠááŒá¯ááŒááºáááºááŸáá·áº áá»ááºáááºáááºáá²ááŒááºážáááºááŒá áºáááºá
- á¡áá»áááºá á®ážáá®ážá áááºá áœá² ááá¯á·ááá¯áẠá¡áá»áááºáá±á¬áºáá¶ááŸáá·áºá¡áá° áá±áá¬á áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá á¡áá»áááºá¡áááá·áºá á¬ááẠááá¯áá²á·ááá¯á·áá±á¬áá±áá¬á¡ááœáẠá¡áá±ážááŒá®ážáááºá ááá¯á·ááŒá±á¬áá·áº áááºááá·áºááŸááºáááºážá ááŸá±á·ááá¯á· ááá¯á·ááá¯áẠáááºááŸááá±á¬ááºááá¯á· ááá¯ááºáááºááᯠá¡ááœááºááá° áá¯á¶ážááŒááºááá¯ááºá á±áááºá ááá¯á·ááá¯áẠááŸááºáááºážáá»á¬ážá á¡á á®á¡á á¥áºáá±á«áºáá°áááºá ááááºáá»á¬ážááᯠá¡áá¯á¶ážáá»ááẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºááŒá áºáááºá ááá¹ááááºáá±áá¬áá±á·á áºáá»á¬ážááẠáá¯á¶ážáááœá²ááŒá¬ážááá·áºáááá¬ááá áºáá¯áá±á«áºááœáẠáááºáá±á¬ááºáá¬ážááẠ- ááŸááºáááºážáá»á¬ážáá¡á á®á¡á á¥áºááá¯áá°á¡áá áááºááŸááºááá¬ážáá±á¬ á¡á á¯áá áºáá¯á¡áá±ááŒáá·áº ááŸááºáááºážáá»á¬ážá á¯á ááºážááŸá¯ááᯠááá¯ááºá á¬ážááŒá¯áááºá
- á¡áá»á¯á¶ážáááºáááºá KDB+ áá¡ááŒá±á¬ááºážá¡áá¬ááœááºá áááºážááẠáá°áá®áá±á¬á¡áá¯ááŒá°á¡áá»áá¯ážá¡á á¬ážá á¥ááá¬á áá¶áá«ááºáá»á¬ážá á¬áááºážááŒá áºáááºá áá áºáááºážá¡á¬ážááŒáá·áº ááŒááºá ááºáá áºáá¯ááŒá áºáááºá á á¬áááºážáá»á¬ážááŸáá·áºááá°áá² Array áá»á¬ážááᯠvector processor ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá»á áºáá áºááááºáááºážá áœá¬ ááááºážáááºážááá¯ááºááŒá®áž á á®áá¶áá±á¬ááºááœááºááá¯ááºáá«áááºá
áááá¯ááºážááá¯ááºáá¬ááááºážá¡áá»ááºá¡áááºáá»á¬áž
KX ááᯠA+ áá¬áá¬á
áá¬ážááŒáá·áº Morgan Stanley Bank ááœáẠááááºá áá¯ááºááá¯ááºáá²á·áá°ážáá±á¬ Arthur Whitney á០1993 áá¯ááŸá
áºááœáẠá
áááºáááºáá±á¬ááºáá²á·ááŒá®áž APL á áá°áááºážááŸáá·áº áá
áºáá»áááºá áá°ááŒáá¯ááºáá»á¬ážáá±á¬ áá¬áá¬á
áá¬ážááŒá
áºááá·áº APL ááᯠáááºáá¶áá²á·áááºá áá¯ááºáá«áááºá KX ááŸá¬ Arthur á áá°áá®áá²á· á
áááºáá¬ááºáá²á· áááºááŒá®áž á¡á
áœááºážáá±á¬áẠá¡áááºážáááºáá»áŸáá¬áá«ááá²á· á¡ááœá±ážá¡áá±á«áºááœá±ááᯠáááºážááœáŸááºáá¬ážáá²á· vector-functional language K ááᯠáááºáá®ážáá²á·áá«áááºá K áááá¯ááááºáá»á¬ážááẠáááºáá¯á¶áááºáá¯á¶ááŸáá·áº á¡áá°ážá¡áá¹ááá¬áá»á¬ážáá²á·ááá¯á· ááŸá¯ááºááœá±ážáá±áá¯á¶áááŒá®áž áááºá¹áá±ááá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá á¡áááá¹áá¬ááºááẠáááºá
ááºá¡ááŒá±á¬ááºážá¡áá¬á¡áá±á«áº áá°áááºááŒá®áž áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯á
á®ááẠááá¬ážááá¯ážáá» áááá¯ááááºážáááºážáá¬áá¬á
áá¬ážáá»á¬ážááẠáá»á¬ážá
áœá¬ááá¯á á¡áááá¹áá«ááºááŸááá«áááºá ááá¯á·á¡ááœááºááŒá±á¬áá·áº K áááá¯ááááºáá
áºáá¯ááẠá¡áááºážáááºáá»áŸáá¬áá±áá¬áá°áááºâá
á¬ááŒá±á¬ááºážá¡áááºážáááºááẠá
á¬áá»ááºááŸá¬áá»á¬ážááᯠJava áá²á·ááá¯á· á
áá¬ážááŒááºážáá¬áá¬á
áá¬ážááŒáá·áº á¡á
á¬ážááá¯ážááá¯ááºáááºâááŸáá·áº á¡ááºáááá¯áá®áááºááᯠá¡ááœááºá¡á¬áá¯á¶á
áá¯ááºáá¯ááºáá±á¬ááºááŸá¯áá
áºáá¯ááŒá
áºáááºá
áá±ážáá¬ážáá±á¬ááá¹áá«á¡á LL1 parser generator á¡áá»á¬ážá
á¯ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº K á¡ááœááºážááŸá function áá
áºáá¯-
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 ááẠ2003 áá¯ááŸá
áºááœááºááœááºááŸááá²á·áá±á¬ KDB+ ááœáẠááá¹áá¬ááá¯ááºááŸá¯ááºááŸá¬ážááŸá¯ á¡áááºážáá¯á¶ážááŒáá·áº ááœááºáá²áááá±á¬ááºááŸá¯ááŸááá±á¬ á€áá¿áááᯠááá¯ááºáá±á¬áºáá²á·ááẠ(ááá¯á¡áá»áááºááœáẠK áá°áá±á¬á¡áááºááẠáááºááá·áºáá±áá¬ááá¬áááºááᯠááŸááºážááŸááºážáááºážáááºážáááºááŒááºáááááº) ááŸáá·áº K á á
áá¯áá¹ááá¬ážááŸááºážá á
áá¬ážááŒááºáá
áºáŠážááẠááá¯áááºááá¯ááºáá«á áá¬áá¬á
áá¬ážá Q K áá¯áá±á«áºáá±á¬ K K á ááááºááœáẠááá¯ááá¯á¡áá¯á¶ážááŒá¯áááœááºáá°áá±á¬ áá¬ážááŸááºážááᯠááá·áºááœááºážáá¬ážááŒá®áž Q. Q á áá®ážááŒá¬ážáá±áááá
áá¬ážá¡ááœáẠSQL - QSQL ááŸáá·áº á
áá¬ážááŒáẠ- á
áá
áºáá±áá¬á¡áá»áá¯ážá¡á
á¬ážá¡ááŒá
Ạááá¬ážáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯á ááá¬ážáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááẠáááááá¬áá»á¬áž Memory ááŸáá·áº Disk á
áááºááá¯á·ááœááºá
ááá¯á·ááŒá±á¬áá·áº á¡áá¯á¶ážááŒá¯áá°áááŸá¯áá±á¬áá·áºááŸááŒáá·áºáá»áŸáẠKDB+ ááẠC# á០ááá¬ážáá»á¬ážááŸáá·áº SQL-like LINQ-á
ááá¯ááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážáá±ážáá±á¬ Q language á
áá¬ážááŒááºááŒá
áºáááºá áááºážááẠKDB+ ááŸáá·áº á¡ááŒá¬ážáá±áá¬áá±á·á
áºáá»á¬ážááŒá¬áž á¡áá±ážá¡ááŒá®ážáá¯á¶áž ááŒá¬ážáá¬ážáá»ááºááŒá
áºááŒá®áž áááŒá¬áá áá»á
áºáá»á°ááŸá¯áá¶áááá·áº áááºážá á¡ááá ááŸááºááŒáá¯ááºááŸá¯ á¡á¬ážáá¬áá»ááºááŒá
áºáááºá áááºážááẠáá±áá¬áá±á·á
Ạ+ ááááºáá¬ážáá±á¬ á¡áááºáá¬áá¬á
áá¬ážááá¯ááºáá±á¬áºáááºáž ááŒáá·áºá
á¯á¶á¡á¬ážáá±á¬ááºážáá±á¬ áááá¯ááááºážáááºážáá¬áá¬á
áá¬áž + áá±áá¬áá±á·á
áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááœáẠáááºáááºáá¬ážáá±á¬ áá¶á·ááá¯ážááŸá¯áá
áºáá¯ááŒá
áºáááºá á€áá°ážááŒá¬ážáá»ááºááẠKDB+ á á¡áá»áá¯ážáá»á±ážáá°ážá¡á¬ážáá¯á¶ážááᯠá
á¬áááºážááŒá¯á
á¯áá¬ááœáẠá¡áá¯á¶ážá¡ááŒááºáá±ážááá·áº á¡áááºážááá¹áá០áá«áááºáááºááŒá
áºáááºá á¥ááá¬á¡á¬ážááŒááºá·âŠ
á¡ááœááº
áá±ááºáá®á á¶ááŸá¯ááºážá¡á KDB+ ááẠááá¯ážááŸááºážáá±á¬ á¡áá¯ááŒáá·áºá¡ááœááºá¡á á¬ážááŒá áºáááºá áááºážááẠá á¬áá¬ážá¡ááá¯ááºáž áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áá®áá«ááá¯ááºááœá²áá áºááá¯ááºááŸáá·áº á áá áºáá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯á·áá«ááŸááá±á¬ áá±ážáááºáá±á¬ á á¬áá¬ážááá¯ááºáá áºáá¯ááŒá áºáááºá áááºááœá±á·ááœáẠ- áá áºáá®áá«ááá¯ááºáááºáááºážáá±á¬ á€áááá¯ááááºá¡ááœáẠáá¯áá¹ááá®áá»á¬ážááẠáá¬áá¬áá±á«áºááŸá áááá¯áááºáá¬áá áºáá¯á¶ážá¡ááœáẠáá áºááŸá áºáá»áŸáẠáá±á«áºáá¬áá±á¬ááºážáá»á®áá±ážááááºá
- á€á¡ááœááºá¡á á¬ážááẠKDB+ á¡á¬áž Pi microcomputer á០terabytes memory ááŸááá±á¬ áá¬áá¬áá»á¬ážá¡áá áááºááá·áº hardware ááœááºáááᯠáá±á¬ááºážááœááºá áœá¬áá¶á á¬ážááá¯ááºá á±áá«áááºá áááºážááẠáááºááá·áºáááºážááŒáá·áºáá»áŸ áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠáááááá¯ááºá á±áá«á ááá¯á·á¡ááŒáẠQ ááẠáááºážááᯠscripting language áá áºáá¯á¡ááŒá Ạá¡ááŒá¬ážá¡áá¬áá»á¬ážááŒá¬ážááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºááẠááœáá·áºááŒá¯áá±ážáá±á¬ áá»ááºáá»ááºážá áááºáá«áááºá
- á€á¡ááœááºá¡á á¬ážááœááºá Q á áá¬ážááŒááºááẠáááá¯ááááºáá¯ááºáá±á¬ááºááŸá¯ááᯠá¡ááŸáááºááŒáŸáá·áºáá±ážááá·áº áááá¯áááẠcache ááœáẠáá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬áž á¡á¶áááºááœááºáá»ááŒá áºáááºá
- executable file á á€á¡ááœááºá¡á á¬ážááŒáá·áºá Q áá¯ááºáááºážá ááºááẠááŸááºáá¬ááºáá²ááœáẠáá±á«á·áá±á«á·áá«ážáá«áž áá±áá¬ááœááºáá»á¬áž áá°áá±á¬ááºáá¬ááŒá®áž áááºážááá¯á·ááᯠáá¬ááŸáá·áºáá»á®á áá¯ááºáá±á¬ááºááá¯ááºáááºá ááá¯á·á¡ááŒááºá ááá¯á¡ááºáá«á Q ááẠáá¯ááºáááºážá ááºáá áºáá¯áááºážá¡ááœááºáž ááŸááºáá¬ááºáááºááááºáž ááá¯á·ááá¯áẠáá¬ááŸáá·áºáá»á®áá±á¬ áá áºáá«ááá¯ááºáá»á¬ážááŒáá·áº áááºáááºááá¯ááºáááºá
áááºá á¯á¶
Q ááẠáá»ááºááŒáá·áºáá±á¬ application áá»á¬ážá¡ááœáẠáá±á¬ááºážááœááºáááºá Process Q ááẠáááá¯ááºážáááºáá±áá¬áá±á·á
áºáá
áºáá¯á¡ááŒá
Ạáá¯ááºáá±á¬ááºááá¯ááºááŒá®áž á¡áá»ááºá¡áááºáá»á¬ážá terabytes ááá¯á· á¡ááŒááºáááºáá±á¬ááºááœáá·áºááᯠáá±ážá
áœááºážááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠáá±áá¬áá»á¯á¶á·ááá¬ážáá±á¬áá±á·áá
áºáá±á·ááœáẠ100 áá
áºáá«ááá¯ááºáááºááá¯áá±á¬ á¡áá»áá¯á·áá±á¬ áááá¯ááºážáááºáá±áá¬áá±á·á
áºáá»á¬ážá
áœá¬ááŸááááºá ááá¯á·áá¬ááœááºá áá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºáá±á¬ ááá·áºáááºáá»ááºáá»á¬ážá¡á±á¬ááºááœááºá áá±áá¬áá±á·á
áºááá¯á· áá±ážááŒááºážááŸá¯áá
áºáá¯ááẠáááºááááºážá០áá¬ááŸáá·áºáá»á®áá±á¬ áá®áá®á
áá¹ááá·áºá¡ááœááºáž ááŒá®ážáá¯á¶ážáááºááŒá
áºáááºá áá±áá°áá»á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡áá¯á¶ážááŒá¯áá°áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá¡ááœáẠá
áá¹ááá·áº 30 ááŒá¬áá»áááºááŸááááºá áááºážááẠá¡ááœááºááŸá¬ážáá«áááºá
Q ááẠáááºááá¯áá®á¡ááœááºážáá±áá¬áá±á·á
áºáá
áºáá¯áá²á·ááá¯á·ááẠá¡ááœááºááá°ááŒá
áºááá¯ááºáááºá áá±áá¬á¡áá
áºáá»á¬ážááᯠáááºááá¯áá®á¡ááœááºáž ááá¬ážáá»á¬ážá¡ááœááºážááá¯á· áá»ááºááŒááºá
áœá¬ ááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áº á¡áá¯á¶ážááŒá¯áá° áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááẠááá·áºáááºáá»ááºááŒá
áºáááºá ááá¬ážáá»á¬ážááŸá áá±áá¬ááᯠáá±á¬áºáá¶áá»á¬ážááœáẠááááºážáááºážáá¬ážááŒá®áž ááá¯ááá¯áááºááŸá¬ áá±á¬áºáá¶áá
áºáá¯áá±á«áºááŸá áááºááá·áºáá¯ááºáá±á¬ááºáá»ááºáááᯠáááá¯áááºáᬠáááºááŸáºááᯠá
áœááºážáááºá¡ááŒáá·áºááŒáá·áº á¡áá¯á¶ážááŒá¯áááºááŒá
áºáááºá áááºážá¡ááŒáẠKX ááẠáááá¯áááºáá¬á vector ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸáá
áºááá·áº ááááºážáááºá¹áá»á¬áá²á·ááá¯á·áá±á¬ á¡ááŒá±áá¶áá¯ááºáá±á¬ááºáá»ááºá¡á¬ážáá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáᬠáááºážááá¯á·áá¡ááŒááºááŸá¯ááºážááᯠá¡ááŒáá·áºáá¯á¶ážááŒáŸáá·áºáááºááẠááŒáá¯ážá
á¬ážáá²á·áááºá Q ááẠáá±áá¬áá±á·á
áºáá»á¬ážá¡ááœáẠáá¯á¶ááŸááºááá¯ááºááá·áº á¡áá¯ááºáá»á¬ážááá¯áááºáž áá¯ááºáá±á¬ááºááá¯ááºááẠ- á¥ááá¬á áá±áá¬áá¯ááºááœáŸáá·áºááŒááºážááᯠáá¯ááºáá±á¬ááºááŒá®áž "á¡áá»áááºááŸáá·áºáááŒá±ážáá®" ááŒáá·áº ááœááºáá»ááºááŒááºáž (áá¯ááºáááºážáá±á«áºáá°áááºá áááºááááºážá០á
áá¹ááá·áºáá»á¬ážá
áœá¬á¡áá ááŸá±á¬áá·áºááŸá±ážááŒááºážááŒáá·áº) ááœá±ááŒá±ážááá¯ááºáᬠáá°áááá¬áá»á¬ážá¡ááœáẠááá°áá®áá±á¬á¡áá»áááºáá»á¬ážá¡ááœáẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ áá±á«ááºážá
ááºáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž ááŒá¬ážáá¬ááá»á¬áž ááá¯á·ááá¯áẠá
á»á±ážááœááºááá¯á· ááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ á¡áá±á¬ááºážá¡áááºáá»á¬ážá ááœáŸááºážááá¯ážááŸá¯áá¯á¶á
á¶ááᯠáááºáá±á¬ááºááŒá®áž áááºážá áááá¯ááá¯ááºááᯠá¡ááŒá®ážáááºááŒá®ážááŒá®ážáá»ááºážáá®ážáá«áž áá¯ááºáá±á¬ááºáá«á ááá¯ááá¯á·áá±á¬ áá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážááœáẠá¡áá»á¬ážá¡á¬ážááŒáá·áº á¡áá»áááºááŒáá·áºááŒá¬ááŸá¯ááẠQ ááá¯ááºáá±á¬áºáááºáž ááá°áá®áá±á¬ á¡áááºážá¡ááŒá
áºáá»á¬ážá០áá±áá¬áá»á¬ážááᯠáááºáá°ááŒá¯ááẠááá¯á¡ááºáááºá áá±áá¬ááŸáá·áº áááºážááá¯á·ááᯠá
á®áá¶áá±á¬ááºááœááºáá±ážááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠáá¯ááºáááºážá
ááºáá
áºáá¯ááœáẠááŸááááºáá°áá±á¬á¡áá»ááºááŒá±á¬áá·áº ááŒááºááŸá¯ááºážááŒáá·áºáááŸáááŒá®áž áááºážááᯠá¡áááá¹áá«ááºáááœáá·áºááá¯áá±á¬áºáááºáž binary áá¯ááºááŒáá·áº áá¯ááºáá±á¬ááºááá·áº QSQL á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŸáá·áº áá»áááºáááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒááºážá០áá¯ááºáá±á¬ááºááŒááºážááá¯á· áá»áŸá±á¬á·áá»ááá¯ááºáá«áááºá
áá±á¬ááºáá¯á¶ážááœáẠáááºááẠQ ááœáẠáááºááá·áºáááºáá±á¬ááºááŸá¯áá¯ááºáááºážá
ááºáá»á¬ážááá¯áááᯠáá±ážááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡áá¯á¶ážááŒá¯áá°áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠááá¯á¡ááºáá±á¬áá±áá¬áá±á·á
áºáá»á¬ážááŸáá·áº áá¬áá¬áá»á¬ážááá¯á· á¡ááá¯á¡áá»á±á¬ááºááŒáá·áºáá±áá±ážááá·áº Gateway áá¯ááºáááºážá
ááºáá»á¬ážá áááá¯ááááºáá¬ááẠáá»áááºááœááºáá»áŸá¬ááŸááááºá áŠážá
á¬ážáá±ážáááºááŸááºááŸá¯á á¡ááŸá¬ážáá¶ááá¯ááºáááºááŸáááŸá¯á áá¯á¶ážá
áœá²ááœáá·áºá¡ááœáá·áºá¡áá±ážá ááœá²áááºážááŸáá·áº á¡ááŒá±áá¶á¡á¬ážááŒáá·áº áá°áá
áááºááá¹áááá¹ááá»á¬ážááᯠáá»áááºááœááºáá»áŸá¬ááŸááááºá¡ááœáẠáááºááá·áº algorithm ááá¯áááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠá¡ááŒáá·áºá¡áááœááºáááºááœáá·áºááŸááááºá á€áá±áá¬ááœáẠá¡áááááŒá¿áá¬ááŸá¬ á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºááá¯ááºááá¯áẠá¡áá±á¬ááºá¡ááẠáá±á¬áºááááºááŒá
áºáá«áááºá
á¥ááá¬á¡áá±áá²á·á áá»áœááºáá±á¬áºááá¯á·ááŸá¬ áááºááᯠProcess á¡áá»áá¯ážá¡á
á¬ážááœá±ááŸááá²ááá¯áᬠáá±á¬áºááŒáá«áááºá áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠááá°áá®áá±á¬áá±áá¬áá±á·á
áºáá»á¬ážá
áœá¬ááᯠáá
áºáá¯áááºážá¡ááŒá
Ạáá±á«ááºážá
ááºááŒá®áž á¡áááºážá¡ááŒá
áºáá»á¬ážá
áœá¬á០áá±áá¬áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒá®áž áá¬ááŸáá·áºáá»á®áá±á¬ áá¯á¶ážá
áœá²áá°áá»á¬ážááŸáá·áº á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáááºáá±á¬ááºááŸá¯áá±ážáᬠáááºážááá¯á·á¡á¬ážáá¯á¶ážááᯠáááºááŒáœá
áœá¬á¡áá¯á¶ážááŒá¯ááŒá®áž á¡áá°áááœáá¯ááºáá±á¬ááºááŒáááºá
- áá±áá¬áááºážááŒá áºáá»á¬ážááá¯á· áá»áááºáááºáááááá¬áá»á¬áž (feedhandler)á á€áá¯ááºáááºážá ááºáá»á¬ážááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº Q ááœáẠáááºáá¬ážáá±á¬ ááŒááºáá á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá Q ááŸá C interface ááẠá¡ááœááºááá¯ážááŸááºážááŒá®áž áááºááá·áº C/C++ á á¬ááŒáá·áºááá¯ááºá¡ááœááºáááᯠááá±á¬ááºá á®áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡ááœááºááá° áááºáá®ážááá¯ááºá á±áá«áááºá Q ááẠá¥ááá¬á¡á¬ážááŒáá·áºá á¥áá±á¬áá áá±á¬á·á¡áááºáá»áááºážá¡á¬ážáá¯á¶ážá០FIX áááºáá±á·áá»áºáá»á¬ážááᯠáá áºááŒáá¯ááºáááºáááºáž áá¯ááºáá±á¬ááºááẠáá¯á¶áá±á¬ááºáááºá
- áá±áá¬ááŒáá·áºááŒá°ážáá°áá»á¬áž (tickerplant)á áááºážááẠáá»áááºáááºáá°áá»á¬ážááŸáá·áº á á¬ážáá¯á¶ážáá°áá»á¬ážááŒá¬áž á¡áááºá¡áááºáá»áááºáááºááŸá¯áá áºáá¯á¡ááŒá Ạáá±á¬ááºááœááºáááºá áá áºáá»áááºáááºážááŸá¬áááºá áááºážááá¯á·ááẠáá»áááºáááºááŸá¯ áá¯á¶ážááŸá¯á¶ážááŸá¯ ááá¯á·ááá¯áẠááŒááºáááºá áááºááŒááºážá០áá¯á¶ážá áœá²áá°áá»á¬ážá¡ááœáẠááŒá¶á·ááá¯ááºááŸá¯ááᯠáá±ážá áœááºážááá·áº á¡áá°áž binary ááŸááºáááºážáá áºáá¯ááœáẠá¡áááºáá±áá¬ááᯠáá±ážáá±ážáááºá
- áááºááá¯áá®áá±áá¬áá±á·á Ạ(rdb)á á€áá±áá¬áá±á·á áºáá»á¬ážááẠáááºááá¯áá®ááœáẠááááºážáááºážáá¬ážááŒááºážááŒáá·áº áá¯ááºááŒááºážááŸáá·áº áááºáááºáá±á¬áá±áá¬áá»á¬ážááá¯á· á¡ááŒááºáá¯á¶ážáááºáá±á¬ááºááá¯ááºá á±áá«áááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá áááºážááá¯á·ááẠáá±á·áááºááœáẠááá¬ážáá»á¬ážááœáẠáá±áá¬á á¯áá±á¬ááºážááŒá®áž áá¡áá»áááºááœáẠáááºážááá¯á·ááᯠááŒááºáááºáááºááŸááºáááºá
- áááºááŸááá±áá±á¬áá±áá¬áá±á·á (pdb)á á€áá±áá¬áá±á·á áºáá»á¬ážááẠááá±á·á¡ááœáẠá¡áá»ááºá¡áááºáá»á¬ážááᯠáááá¯ááºážáááºáá±áá¬áá±á·á áºáá áºáá¯ááœáẠááááºážáááºážáá¬ážááŒá±á¬ááºáž áá±áá»á¬á á±áááºá á ááºážáááºážá¡ááá¯ááºážá rdb ááŸáá·áºááá°áá²á áááºážááá¯á·ááẠáá±áá¬áá»á¬ážááᯠááŸááºáá¬ááºááœáẠááááºážáááºážááá¬ážáá±á¬áºáááºáž áá±á·áááºážáááºááœáẠdisk áá±á«áºááœáẠá¡áá°áž cache ááá¯á¡áá¯á¶ážááŒá¯áᬠáááºážáá±á«ááºáá¶á¡áá»áááºááœáẠáá±áá¬ááᯠáááá¯ááºážáá±áá¬áá±á·á áºááá¯á· áá°ážáá°áá«á
- áááá¯ááºážááá¯ááºáá¬áá±áá¬áá±á·á áºáá»á¬áž (hdb)á á€áá±áá¬áá±á·á áºáá»á¬ážááẠááááºáááºáá»á¬ážá ááá»á¬ážááŸáá·áº ááŸá áºáá»á¬ážá¡ááœáẠáá±áá¬ááᯠá¡áá¯á¶ážááŒá¯ááœáá·áº áá±ážáá«áááºá áááºážááá¯á·áá¡ááœááºá¡á á¬áž (áááºáá»á¬ážááœááº) ááẠhard drive áá»á¬ážáá¡ááœááºá¡á á¬ážá¡á¬ážááŒáá·áºáá¬ááá·áºáááºáá¬ážáááºá áá±áá¬áááºáá±á¬ááºááŸá¯ááᯠá¡ááŸáááºááŒáŸáá·áºááẠá¡áá°ážáááŒáá·áº ááá°áá®áá±á¬ disk áá»á¬ážááœáẠáá±áá¬ááᯠáááºááá·áºáá±áá¬ááœááºáááᯠáá¬ážááŸáááá¯ááºáááºá ááœá±ážáá»ááºááẠalgorithms á¡áá»á¬ážá¡ááŒá¬ážááᯠá¡áá¯á¶ážááŒá¯á áá±áá¬ááᯠáá»á¯á¶á·ááá¯ááºáááºá áá±áá¬áá±á·á áºááœá²á·á ááºážáá¯á¶ááẠáá±á¬ááºážááœááºá áœá¬ ááŸááºáááºážáááºáá¬ážááŒá®áž ááá¯ážááŸááºážáááºá áá±áá¬ááᯠáá¯á¶ááŸááºááá¯ááºáá»á¬ážááœáẠáá±á¬áºáá¶á¡ááá¯áẠááááºážáááºážáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠáááºáááºááŸá¯á áá áºááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááºá
- á¡áá»ááºá¡áááºáá±á«ááºážá á¯áá¬ážáá±á¬ áá±áá¬áá±á·á áºáá»á¬ážá áááºážááá¯á·ááẠáá°áááá¬á¡áááºááŸáá·áº á¡áá»áááºáá¬áá¡ááá¯ááºážá¡ááŒá¬ážá¡ááá¯áẠá¡á¯ááºá á¯ááœá²á·áá¬ážáá±á¬ á¡áá»áá¯ážáá»áá¯ážáá±á¬ á á¯á ááºážááŸá¯áá»á¬ážááᯠááááºážáááºážáá¬ážáááºá áááºááá¯áá®á¡ááœááºážáá±áá¬áá±á·á áºáá»á¬ážááẠá¡áááºáááºáá±á·áá»áºáá áºáá¯á á®ááŒáá·áº áááºážááá¯á·áá¡ááŒá±á¡áá±ááᯠá¡ááºááááºáá¯ááºáᬠáááá¯ááºážááá¯ááºáá¬áá±áá¬áá»á¬ážááᯠááŒááºáááºá áœá¬áááºáá±á¬ááºááá¯ááºááẠááŒáá¯áááºááœááºáá»ááºáá¬ážáá±á¬áá±áá¬áá»á¬ážááᯠááááºážáááºážáá¬ážáááºá
- áá±á¬ááºáá¯á¶ážáá±á¬á· áá¶áá«ážáá±á«ááºáá¯ááºáááºážá ááºáá»á¬ážá¡ááá®áá±ážááŸááºážáá»á¬ážááŸáá·áº áá¯á¶ážá áœá²áá°áá»á¬ážááᯠáááºáá±á¬ááºááŸá¯áá±ážáááºá Q ááẠááá·áºá¡á¬áž á¡áááºáááºáá±á·áá»áºáá»á¬ážááᯠáá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬áž áá»áááºááá¯ááºáá¯ááºáá±á¬ááºááŒááºážá áááºážááá¯á·ááᯠáá±áá¬áá±á·á áºáá»á¬ážá¡ááœááºáž ááŒáá·áºáá±ááŒááºážá áááºáá±á¬ááºááœáá·áºáá»á¬ážááᯠá á áºáá±ážááŒááºážá áááºááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºá á±áá«áááºá áááºáá±á·áá»áºáá»á¬ážááẠá¡ááá·áºá¡áááºáááŸáááŒá áºááŒá®áž á¡áá»á¬ážá á¯ááŸá¬ á¡ááŒá¬ážáá±á¬áá±áá¬áá±á·á áºáá»á¬ážáá²á·ááá¯á·ááẠSQL á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááá¯ááºááŒá±á¬ááºáž áááááŒá¯áá«á á¡áá»á¬ážá á¯ááŸá¬á SQL á áá¬ážáááºááᯠá¡áá°ážáá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááœáẠááŸááºáá¬ážááŒá®áž á¡áá¯á¶ážááŒá¯áá°áá±á¬ááºážááá¯áá¬ážááá·áº ááá·áºáááºáá±á¬ááºáá»á¬ážáá±á«áºááœáẠá¡ááŒá±áá¶á áááºáá±á¬ááºáá¬ážááẠ- á¡áá»áááºááᯠááŒá±á¬ááºážáá²áááºá á á áºáá¯ááºáááºá áá±áá¬ááᯠáá¯á¶ááŸááºááŒá áºá á±ááẠ(á¥ááá¬á á¡ááŒááºáá±á á¯áá±ážáá±á¬ááºáá«á á áá±á¬á·á á»á±ážááŸá¯ááºážááẠáá®áá»áŸáááº) á áááºááá¯á·ááŒá áºáááºá
áá±áá¬á¡áá»áá¯ážá¡á á¬ážáá áºáá¯á¡ááœáẠááá¯ážááá¯ážáááá¯áá¬-
á¡ááŸáááº
Q ááẠáá¬áá¬ááŒááºáá¬áá¬á
áá¬ážááŒá
áºáá±á¬áºáááºážá áááºážááẠvector language áá
áºáá¯ááŒá
áºáááºá ááá¯ááá¯áááºááŸá¬ built-in áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá
áœá¬á á¡áá°ážáááŒáá·áº ááááºážáááºá¹áá»á¬áá»á¬ážááẠáááºááá·áºáá¯á¶á
ᶠ- áá¶áá«ááºáá»á¬ážá vectorsá matricesá lists á ááŒááºážáá¯á¶ááŸá¯áá»á¬ážááᯠáá°ááŒááŒá®áž áááá¯ááááºáá¬ááẠáááá¯ááááºááᯠarray áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááŒá
Ạá¡áá±á¬ááºá¡áááºáá±á«áºááẠáá»áŸá±á¬áºááá·áºáá«áááºá ááá¯ááá¯á·áá±á¬áá¬áá¬á
áá¬ážááœááºá áááºááẠááŒááºá
ááºáá
áºáááºážá vector ááŸá
áºáá¯ááᯠááá·áºáá«áá áá¬áá¬á
áá¬ážááᯠá¡áááá¹áá¬ááºááŒááºááá¯ááŒááºážááŸá¬ á¡áá±ážáááŒá®ážáá±á¬á·áá«á áááºážááᯠááœááºá
áœá¬áá±á¬ááºážááœááºáá±á¬ binary function ááŒáá·áº áá¯ááºáá±á¬ááºáááºááŒá
áºáááºá Q áááá¯ááááºáá»á¬ážááœáẠááŒááºá¹áá±á·áá¡áá»áááºáá±á
á¯ááᯠá€á¡ááŒá±áᶠvectorized functions áá»á¬ážá¡áá¯á¶ážááŒá¯ááá·áº tables áá»á¬ážááŸáá·áº operations áá»á¬ážááœáẠáá¯á¶ážá
áœá²áá±á¬ááŒá±á¬áá·áº output ááẠá¡ááœááºáá»á±á¬ááºáááºáá±á¬áááºáááºááŸá¯ááºážááŒá
áºááŒá®ážá process áá
áºáá¯ááœááºááẠdata á¡áá»á¬ážá¡ááŒá¬ážááᯠprocess áá¯ááºááá¯ááºá
á±áá«áááºá áááºážááẠPython ááŸá áááºá¹áá»á¬á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááŸáá·áº áááºáá°ááẠ- Python ááá¯ááºááá¯ááºá á¡ááœááºááŸá±ážááœá±ážáá±á¬ áá¬áá¬á
áá¬ážááŒá
áºáá±á¬áºáááºážá áááºážááœáẠnumpy áá²á·ááá¯á· áá±á¬ááºážááœááºáá±á¬ ááááºážááá¬ááºážá¡áá»ááºá¡áááºáá»á¬ážááᯠá
á¯á
ááºážáá¬ážáá±á¬áá¬áá¬á
áá¬ážáá
áºáá¯á á¡ááŸáááºááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºá
á±ááá·áº numpy áá²á·ááá¯á·áá±á¬ á¡ááœááºáá±á¬ááºážááœááºáá±á¬ á
á¬ááŒáá·áºááá¯ááºáá»á¬áž (áááºážáááºážá¡á¬ážááŒáá·áºá numpy ááẠQ ááŸáá·áº ááá±á¬ááá¬ážá¡á áá®ážá
ááºáá«áááºá )
ááá¯á·á¡ááŒáẠKX ááẠá
á¬ážááœá²áá»á¬ážááᯠáá®ááá¯ááºážááœá²áᬠáááºážááá¯á·ááŸáá·áº á¡áá¯ááºááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá
áºá¡á±á¬ááºáá¯ááºááẠá¡ááœááºááá¯áá
áá¯ááºáá»ááºážáááºáá²á·áááºá ááááŠážá
áœá¬á Built-in áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒáá·áº áá¶á·ááá¯ážáá±ážáá¬ážááá·áº á¡ááœáŸááºážá¡áá»áá¯ážá¡á
á¬ážáá»á¬ážá
áœá¬ááᯠáá¶á·ááá¯ážáá¬ážááŒá®áž ááá¬ážáá±á¬áºáá¶áá»á¬ážááœááºáá¬áá áááºááá·áº vector áá»á¬ážááœááºáááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºááẠ- á¡á¯ááºá
á¯ááœá²á·ááŒááºážá á
á®ááŒááºážá áá°ážááŒá¬ážááŸá¯ áááºááœáŸááºážáá»ááºááŸáá·áº áááá¯ááºážáá±áá¬áá±á·á
áºáá»á¬ážá¡ááœáẠá¡áá°ážá¡á¯ááºá
á¯ááœá²á·ááŒááºážááá¯á·ááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºá á¡ááœáŸááºážááᯠááá¯ážááá¯ážááŸááºážááŸááºáž á¡áá¯á¶ážáá»ááŒá®áž áá±á¬áºáá¶/áááºáá¬ááá¯á· á¡á
áááºá¡ááá¯ááºážáá»á¬ážááá·áºááá·áºá¡áá« á¡ááá¯á¡áá»á±á¬ááºáá»áááºááŸááááºá á¡ááœáŸááºážáá»á¬ážááᯠáááºááá¯áá®ááŸáá·áº áá
áºááºáá±á«áºááœáẠááá¬ážáá±á¬áºáá¶áá»á¬ážááœáẠá¡áá®á¡áá»áŸ á¡á±á¬ááºááŒááºá
áœá¬ á¡áá¯á¶ážáá»ááá¯ááºáááºá QSQL áá±ážááŒááºážááŸá¯ááᯠáá¯ááºáá±á¬ááºáá±á¬á¡áá« ááŒá
áºááá¯ááºáá»áŸáẠá¡ááœáŸááºážááááºážáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠá¡áá¯á¶ážááŒá¯áá«áááºá áá¯áááá¡áá±ááŒáá·áºá OS ááá¯ááºáá»á¬áž (ááŸááºáá¬ááºááŒá±áá¯á¶) ááá¯ááŒááááºááá¹ááá¬ážá¡á¬ážááŒáá·áºáááá¯ááºážááá¯ááºáá¬á¡áá»ááºá¡áááºáá»á¬ážááŸáá·áºá¡áá¯ááºáá¯ááºáááºá ááŒá®ážáá¬ážáá±á¬ááá¬ážáá»á¬ážááᯠáááºááá¯áá®áá²ááá¯á· áááºáá±á¬á¡áá«á០ááááºáá«ááŸáá·áºá áááºážá¡á
á¬áž ááá¯á¡ááºáá±á¬áá±á¬áºáá¶áá»á¬ážááᯠááŸááºáá¬ááºááœáẠááá¯ááºááá¯ááºáá¯á¶áá±á¬áºáá¬ážááŒá®áž áááºážááá¯á·áá²á០áá
áºá
áááºáá
áºááá¯ááºážááá¯áᬠá¡ááŸááºááááºáááºáá¬ážááẠ(á¡ááœáŸááºážááááºážáá»á¬ážáááºáááºáž á€áá±áá¬ááœáẠáá°áá®áá±ážáááº)á áá±áá¬ááẠáááºááá¯áá®ááœááºááŸááááŸáá áááŸááááºááŒá
áºá
á± áááá¯ááááºáá¬á¡ááœáẠááœá¬ááŒá¬ážáá»ááºáááŸááá«á mmap ááŸáá·áº áá¯ááºáá±á¬ááºááá·áº ááá¹ááá¬ážááẠQ áá¡ááááºá¡áááºááœáẠáá¯á¶ážá ááŸááºáá¬ážáááºá
KDB+ ááẠáááºá
ááºáá±áá¬áá±á·á
áºáá
áºáá¯ááá¯ááºáá«á ááá¬ážáá»á¬ážááœáẠááááºážááá¬ááºážá¡áá»ááºá¡áááºáá»á¬ážáá«áááºááá¯ááºáá±á¬áºáááºáž ááá¬ážááŸáá¡áááºážáá»á¬ážáá¡á
á®á¡á
á¥áºááẠáááŒá±á¬ááºážáá²áá² ááŒááºá
ááºá¡áá
áºáá»á¬ážááá¯ááá·áºááœááºážááá·áºá¡áá«ááœááºá áá±ážááœááºážáá»á¬ážáá±ážáá¬ážááá·áºá¡áá«ááœáẠá¡áá¯á¶ážááŒá¯ááá·áºáááºá áá±áá¬ááᯠá¡áá»áááºá¡ááá¯ááºá
á®áááºááá¯áá«áá ááááááºáž ááá¯á·ááá¯áẠáá±á¬ááºáá¯á¶ážá¡áááºáž ááá¯á·ááá¯áẠN ááá¯ááŸá¬ááœá±ááẠSQL ááŸáá·áºááœááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠáááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº á€á¡ááºá¹áá«áááºááẠá¡áá»áááºá
á®ážáá®áž (áááŸááºááŸá¯á áááºáá®áá®áá¬á ááŒá
áºáááºááŸááºáááºážáá»á¬áž) ááŸáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠá¡áá±ážáááŒá®ážááá¯á¡ááºáá«áááºá ááá¬ážááŸá á¡áááºážáá»á¬ážá áááºááá·áºáá»ááºážááŒá±á¬ááºáž Nth ááá¯ááºážáá±á¬ááºááœáẠá
áááºááá¯á·ááᯠáá¯á¶ážááŒááºáá«á ááá¬ážáá»áááºáááºááŸá¯áá»á¬ážááᯠááá¯ááá¯ááá¯ážááŸááºážá
á±áááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¥ááá¬á¡á¬ážááŒáá·áºá ááŒááºá
ááºáá±á«ááºáž áááºáž 16000 ááŸááá±á¬ ááá¬ážáá
áºáá¯ááŸá 500 VOD.L (Vodafone) á¡ááœáẠáá±á¬ááºáá¯á¶ážááá¯ážáá¬ážáá»ááºááᯠááŸá¬ááœá±ááŒááºážááẠáá
áºááºáá±á«áºááœáẠáá
áºá
áá¹ááá·áºááŸáá·áº áá®áá®á
áá¹ááá·áº áááºááááºážááá·áº ááŒá¬áááºá
time join á á¥ááá¬áá
áºáᯠ- quote table ááᯠmemory ááœáẠáá¯á¶áá±á¬áºáá¬ážáááºá ááá¯á·ááŒá±á¬áá·áº VOD.L ááẠáááºááá·áºáá±áá¬ááœááºá sym áá±á¬áºáá¶áá±á«áºááŸá á¡ááœáŸááºážááŸáá·áº data áá»á¬ážááᯠá¡áá»áááºá¡ááá¯áẠááœá²ááŒááºážá
áááºááŒá¬áá¬ážáááºáá°áá±á¬á¡áá»ááºááᯠááœááºááá¯ááºáá±á¬áááºážááŒáá·áº á¡áá¯á¶ážááŒá¯áááºáá°áá±á¬á¡áá»ááºááᯠVOD.L áááºááŸááºááẠáááá¯á¡ááºáá«á Q ááœááºáá«áááºááŸá¯á¡á¬ážáá¯á¶ážáá®ážáá«ážááẠááœá±ážáá»ááºáá¬ážáá±á¬áá±á¬áºááŒáá»ááºáá
áºáá¯áá¡á
áááºá¡ááá¯ááºážááá¯ááºáá² áá¯á¶ááŸááºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒá
áºáááº-
1. aj[`sym`time;select from trade where date=2019.03.26, sym=`VOD.L;select from quote where date=2019.03.26]
áá±á¬ááºáá¯á¶ážá¡áá±áá²á·á Arthur Whitney ááá¯ááºááá¯ááºá á
áááºááŒá®áž KX ááŸá¬ááŸááá²á· á¡ááºáá»ááºáá®áá¬ááœá±áᬠá
áœááºážáá±á¬ááºáááºááᯠá¡ááŸááºáááẠá¡á
áœá²á¡áááºážááŒá®ážáá±ááŒá®áž Q áá²á· á
á¶á¡ááºá¹áá«áááºááœá±ááá± á¡áá±á¬ááºážáá¯á¶ážááá°ááŒá®áž á¡áá¯á¶ážá¡áá»á¬ážáá¯á¶áž á¡áá¯á¶ážááŒá¯ááŸá¯áá¯á¶á
á¶ááœá±ááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá
áºá¡á±á¬áẠáá¯ááºáá±á¬ááºáá±áá¬ááŒá
áºááŒá±á¬ááºáž ááŸááºáá¬ážááá¯ááºáá«áááºá
ááááº
KDB+ ááẠáááºážáááŒáœááºážáá»ááºááŒá
áºáá±á¬ áááºá
á¯á¶á
áœááºážáá±á¬ááºááá¯ááºááŸá¯ááŒá±á¬áá·áº á¡áááá¡á¬ážááŒáá·áº á
á®ážááœá¬ážáá±ážáá¯ááºáááºážáá»á¬ážááŒá¬ážááœáẠáá±áááºážá
á¬ážááẠ- áááºážááẠin-memory áá±áá¬áá±á·á
áºá áááá¯ááºážáááºá¡áá»ááºá¡áááºáá»á¬ážá terabytes áá»á¬ážááᯠááááºážáááºážáááºá¡ááœáẠáá±áá¬áá±á·á
áºá¡ááŒá
áºááŸáá·áº áá±áá¬ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯á¡ááœáẠááááºáá±á¬ááºážáá
áºáá¯á¡ááŒá
Ạáááºážáá±á¬ááºáž áá±á¬ááºááœááºáá±ážáá«áááºá Data processing ááẠdatabase ááœáẠááá¯ááºááá¯ááºááŒá
áºáá±á«áºáááºááá¯áá±á¬á¡áá»ááºááŒá±á¬áá·áºá á¡áá¯ááºá á¡ááŸáááºá¡áá¯ááºááŒáá·áºááŒá®áž á¡áááºážá¡ááŒá
áºááᯠáá»áœá±áá¬ááá¯ááºááẠá áá±áá¬áá±á·á
áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸáá·áº áá±á«ááºážá
ááºáá¬ážáá±á¬ ááŒáá·áºá
á¯á¶ááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ áááá¯ááááºážáááºážáá¬áá¬á
áá¬ážááẠááá·áºá¡á¬áž áá±áá¬áááºáá¶áááŸáááŒááºážá០áá¯á¶ážá
áœá²áá°áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒááºážá¡áá ááááºáá±á¬ááºážáá
áºáá¯áá±á«áºááœáẠááá¯á¡ááºáá±á¬áá¯ááºáááºážá
ááºáá»á¬ážá¡á
á¯á¡áá±ážáá
áºáá¯áá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºá
á±áááºááŒá
áºáááºá
ááá¯ááá¯ááááŸáááá¯áá«á,
áá»áá¯á·ááœááºážáá»ááº
KDB+/Q á áááá¬áááºááŸá¬ážáá±á¬á¡á¬ážáááºážáá»ááºááŸá¬ ááŒáá·áºáá¬ážáá±á¬áááºáá±á¬ááºááŸá¯á¡ááá·áºááŒá áºáááºá áá¬áá¬á áá¬ážááœáẠáá°ážáááºážáá±á¬ syntax ááŸáááŒá®áž á¡áá»áá¯á·áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠá¡ááœááºááá±áá«ááẠ(á¥ááá¬á á¡áá¯á¶ážááŒá¯ááŸá¯ 11 áá¯ááá·áºááŸááááº)á á¡áá±ážá¡ááŒá®ážáá¯á¶ážááŸá¬á áááºážááẠáááá¯ááááºáá±ážáá¬ážááŒááºážá¡ááœáẠá¡ááœááºááœá²ááŒá¬ážáá±á¬áá»ááºážáááºááŸá¯ ááá¯á¡ááºáá«áááºá vector language áá áºáá¯ááœááºá array á¡ááœááºááŒá±á¬ááºážááŒááºážááá¯ááºáᬠáá±á«áá¬ááá»á¬ážááᯠá¡ááŒá²áááºážá ááºážá á¬ážááááºááŒá áºááŒá®ážá ááŒá±áá¯á¶/á¡áá»áŸá±á¬á·áá±ážááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž (Q ááœáẠááŒááá¬áááá±áá áá¯áá±á«áºáááº) á áá»áá¯ážááœá²áá»á¬ážá áœá¬ááŒáá·áº ááœááºážáááºá¡á¬ážáá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáᬠá¡ááºáááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡ááºáááºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸáá·áº á¡á á¬ážááá¯ážááŒááºážááŒáá·áº áááºááá·áºá¡áá«áá»áŸ ááœá±á á¯áááºáááŒáá¯ážá á¬ážáá«á á¥ááá¬á¡á¬ážááŒáá·áºá array áá áºáá¯ááŸá element áá áºáá¯á Nth áá±á«áºáá±á«ááºááŒááºážáá¡ááœáŸááºážááá¯ááŸá¬áááºá áááºáá±ážááá·áºáááº-
1. (where element=vector)[N]
C/Java á
á¶ááŸá¯ááºážáá»á¬ážááŒáá·áº á¡ááœááºáááá±á¬ááºááŸá¯ áááŸááᯠáááºááá±á¬áºáááºáž (= áááºážááŸá ááŒááºá
ááºáá»á¬ážá á
á
áºááŸááºáá±á¬ á¡ááœáŸááºážááááºážáá»á¬ážááᯠááŒááºáá±ážááá·áº boolean vector áá
áºáá¯ááᯠáááºáá®ážáááº)á ááá¯á·áá±á¬áº á€á¡ááŸááºá¡áá¬ážááẠá
áá¬ážáááºáá¡áááá¹áá¬ááºááᯠááá¯ááá¯ááŸááºážáááºážá
á±ááŒá®áž ááŸá±ážááœá±ážáá±á¬ á¡áá¯ááŒá°áá¯á¶ážáá»á¬ážá¡á
á¬áž áá»ááºááŒááºáá±á¬ vector áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáááºá¡áá¯á¶ážááŒá¯áááºá vector language ááŸáá·áº á¡ááŒá¬ážáá°áá»á¬ážááŒá¬áž á¡áá°á¡á ááœá¬ááŒá¬ážáá»ááºááẠáááá¯ááááºážáááºážá¡ááœáẠáááŸááááŒá
áºááá¯á¡ááºáá±á¬ ááŸáá·áº áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áá»ááºážáááºááŸá¯áá»á¬ážááŒá¬áž ááŒá¬ážáá¬ážáá»ááºááŸáá·áº ááŸáá¯ááºážááŸááºááá¯ááºááŒá®áž áááºážá¡ááœáẠáááºááŒááºáááºáá¬ážááẠááá¯á¡ááºáá«áááºá
á¡áá»áá¯á·áá±á¬á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠQSQL ááá¯á
áááºááááºá
á¬ážáá«á á¡áááá¡áá»ááºááŸá¬ áááºážááẠSQL á¡á
á
áºá¡ááŸááºááŸáá·áºáá¬áá°áááºá áááºááœá±á·ááœááºá áááºážááẠquery optimization ááá¯ááá¶á·ááá¯ážáá±á¬ SQL-like expressions áá
áá¬ážááŒááºáá
áºáá¯áá»áŸáá¬ááŒá
áºáááºá á¡áá¯á¶ážááŒá¯áá°ááẠá¡áá±á¬ááºážáá¯á¶ážáá±ážááœááºážáá»á¬ážááᯠááá¯ááºááá¯ááºáá±ážáá¬ážááááºááŒá
áºááŒá®áž á¡áá»á¬ážá¡ááŒá¬ážá¡ááœáẠá¡áááºááá·áºáááŒá
áºáá±ážááá·áº Q ááœáẠáá±ážáá¬ážááááºááŒá
áºáááºá á¡ááŒá¬ážáá
áºáááºááœááºá áááºááẠblack-box optimizer ááᯠá¡á¬ážááá¯ážááá·áºá¡á
á¬áž á¡áá±á¬ááºážáá¯á¶ážáá±ážááœááºážááᯠáááºááá¯ááºááá¯áẠá¡ááŒá²áááºážáá±ážáá¬ážááá¯ááºáááºá
ááá¯á·á¡ááŒáẠQ - Q For Mortals áá«á
á¬á¡á¯ááºááᯠá¡ááá²á·ááá°ááá¯ááºáá«áááºá
áá±á¬ááºááẠááŒá®ážáá¬ážáá²á· á¡á¬ážáááºážáá»ááºááá±á¬á· ááá¯ááºá
ááºáá¯ááºáá»á
ááááºáá«á áááºážááẠCPU áá
áºáá¯á¶ážáá»áŸáẠáá
áºááŸá
áºáá»áŸáẠáá±á«áºáᬠáá±á¬ááºážááŸáá·áºáá»á®ááŸááááºá áá¯áá¹ááá®ááŒá®ážáá»á¬ážááᬠááá¯áá²á·ááá¯á·áá±á¬ á¡áá¯á¶ážá
ááááºáá»á¬ážááᯠáááºááá¯ááºááŒáááºá áááŒá¬áá±ážáá®áá KX ááẠáááºážáááá¯ááºá
ááºáá°áá«áááᯠááá¯ááá¯ááŒá±á¬ááºážááœááºááŒááºááœááºááŒá
áºá
á±ááŒá®áž Google ááŸáá·áº Amazon clouds áá»á¬ážááœáẠKDB+ ááᯠá¡áá¯á¶ážááŒá¯áá»ááẠááá¯á·ááá¯áẠááŸá¬ážáááºážááá·áºá¡áá»áááºá¡ááœááºáᬠáá±ážáá»á±áááºá¡ááœáá·áºá¡áá±ážááᯠáá±ážáá±á¬ááºáá¬ážáááºá KX ááá¯áááºáž áá±á«ááºážáá¯ááºáá¯ááºáá±ážáá¬ážáá«áááºá
ááŒáá¯ááºáááºáá»á¬áž
á¡áá¬ážáá°á¡ááŒá±áá¶áá°áá»á¬ážáá±á«áºááœááºáááºáá±á¬ááºáá¬ážáá±á¬ á¡áá°ážááŒá¯áá±áá¬áá±á·á
áºá¡áááºážáááºááŸáááẠ- columnará in-memory ááẠá¡ááœááºááŒá®ážáá¬ážáá±á¬áá±áá¬ááá¬áá¡áá±á«áºá¡á¬áá¯á¶á
áá¯ááºáááºá ááŒá¿áá¬á áá«ááœá±á á¡áá°ážááŒá¯áá±áá¬áá±á·á
áºááœá±áá«á áááºááŸá¬ážáá±á¬ á¥ááá¬ááŸá¬ Clickhouse ááŒá
áºáááºá á€áá±áá¬áá±á·á
áºááœáẠáá±áá¬ááááºážáááºážáááºááŸáá·áº á¡ááœáŸááºážáá
áºáá¯áááºáá±á¬ááºáááºá¡ááœáẠKDB+ ááŸáá·áº á¡ááœááºáááºáá°áá±á¬ áááá¬ááá
áºáá¯ááŸáááŒá®áž áááºážááẠáááááá¬áá¬ááá¯ááºáá±á¬áºáááºáž KDB+ ááẠá¡áá»áá¯á·áá±á¬áá±ážááœááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá ááá¯á·áá±á¬áº áá±áá¬áá±á·á
áá
áºáá¯á¡áá±ááŒáá·áºáááºá Clickhouse ááẠKDB+ ááẠááá¯ááá¯áá°ážááŒá¬ážááẠ- áááºááœá²ááŒááºážá
áááºááŒá¬áá»ááºááŸáá·áº áááá¬ážáá±á¬á¡áá»áááºá
á®ážáá®ážáá»á¬áž (á€ááŒá¬ážáá¬ážáá»ááºááẠá¡ááœááºá¡áá±ážááŒá®ážááẠ- á¥ááá¬á¡á¬ážááŒáá·áº Clickhouse ááœáẠááŸááºáááºážáá»á¬ážááᯠá
á®á
á¥áºááŒááºážá¡á¬áž á¡áá¯á¶ážááŒá¯ááááá«)á ááá¯á·áá±á¬áº á¡áá±ážá¡ááŒá®ážáá¯á¶ážááŸá¬á Clickhouse ááœáẠáá®ážááŒá¬ážá¡ááá®áá±ážááŸááºážáá
áºáá¯ááá¯á· áŠážá
áœá¬áááºááŒááºážááẠáá±áá¬áá±á·á
áºááœáẠáá±áá¬áá»á¬ážááᯠááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºááœáá·áºááŒá¯ááá·áº KDB+ á áááºá
á¯á¶á
áœááºážáá±á¬ááºááá¯ááºááŸá¯áá»áá¯ážáááŸááá±á áááá¯ááºážááá¯ááºáá¬áá±áá¬áá±á·á
áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááá¯áá¯ááºáá±á¬ááºááŒááºážááŸáá·áºááááºááá¯ááºáá«á ááá¯á·ááŒá±á¬áá·áºá KDB+ ááᯠá¡ááŒá¬ážáá±áá¬áá±á·á
áºáá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºááẠáááºáá²áááºá á¡áá»áá¯á·áá±á¬á¡áá¯á¶ážááŒá¯ááŸá¯ááá
á¹á
áá»á¬ážááœáẠáááºážááá¯á·ááẠááá¯áá±á¬ááºážááá¯ááºááẠááá¯á·ááá¯áẠááá¹ááááºáá±áá¬áá±á·á
áºá¡áá¯ááºáá»á¬ážááŸáá·áºáááºáááºáá¬áá»áŸáẠáááºážááá¯á·ááẠááá¯áá±á¬ááºážááá¯ááºáááºá ááá¯á·áá±á¬áº áá¬áá®áá±áá¬ááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠáááºáá°áááºáá»áŸ áááá±á¬ááºááŒá®áž á
áœááºá
á¯á¶áá¯á¶ážááá¯ááºáá±á¬ á¡ááŒá¬ážáááááá¬ááᯠáá»áœááºá¯ááºááááá«á
Python áá±á«ááºážá ááºááŸá¯
áááºážááá¬ááŸáá·áº ááááºážááŸá®ážáá±á¬áá°áá»á¬ážá¡ááœáẠKDB+ ááᯠááá¯ááá¯ááœááºáá°á
áœá¬ á¡áá¯á¶ážááŒá¯ááá¯ááºááẠKX ááẠáá¯ááºáááºážá
ááºáá
áºáá¯áááºážá¡ááœááºáž Python ááŸáá·áº áááºážáááºážáá»ááºáá»áẠáá±á«ááºážá
ááºážááẠá
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáááºáá®ážáá²á·áááºá áááºááẠáááºááá·áº Python áá¯ááºáá±á¬ááºáá»ááºááá¯áááᯠQ ááŸáá±á«áºááá¯ááá¯ááºáááºá ááá¯á·ááá¯áẠá¡ááŒááºá¡ááŸááºá¡á¬ážááŒáá·áº áááºááá·áº Q function ááá¯áááᯠPython (á¡áá°ážáááŒáá·áº QSQL expressions) ááŸáá±á«áºááá¯ááá¯ááºáááºá á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááẠááá¯á¡ááºáá«á (á¡ááŒá²áááºážáááá±á¬ááºááŸá¯á¡ááœááºááá¯ááºáá«) áá±áá¬ááᯠáá¬áá¬á
áá¬ážáá
áºáá¯ááá±á¬áºáááºá០á¡ááŒá¬ážáá±á¬áºáááºááá¯á· ááŒá±á¬ááºážáá±ážáááºá ááááºá¡áá±ááŒáá·áº Q ááŸáá·áº Python ááá¯á·ááẠáááºážááá¯á·ááŒá¬ážááŸá áááºááááááºáá»á¬ážááᯠááŸá¯ááºáá«ážááœá¬ážá
á±ááá·áº áá®ážáááºáá±á¬áá±á«ááºážá
ááºááŸá¯ááœáẠáá±ááá¯ááºááŒáááºá ááááºá¡áá±ááŒáá·áº áááá¯ááááºáá¬ááẠáá
áºáááºááœáẠá¡áá¯á¶ážáááºáá±á¬ Python á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠá¡ááŒáá·áºá¡ááááºáá±á¬ááºááá¯ááºáááºá á¡ááŒá¬ážáá
áºáááºááœááºáá° Python ááœáẠáá±áá¬ááŒá®ážááŒá®ážáá¬ážáá¬ážáá±á«ááºážá
ááºážááŸá¯ááŒáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠáá»ááºááŒááºáá±á¬á¡ááŒá±áá¶ááᯠáááŸááááºá áááºážááẠmachine learning ááœááºáá«áááºáá°áá»á¬ážá¡ááœáẠá¡áá°ážá¡áá¯á¶ážáááºáááºá ááá¯á·ááá¯áẠáá±á¬áºáááºáá¯ááºááŒááºážá
Python ááœáẠQ ááŸáá·áº á¡áá¯ááºáá¯ááºáááº-
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')
ááá¯ážáá¬áž
áá¯áá¹ááá®ááá¯ááº-
developer áá»á¬ážá¡ááœáẠáááºááá¯áẠ-
Book Q For Mortals (á¡ááºá¹áááááºááá¯) -
kx áááºáááºážáá»á¬ážáá¶á០KDB+/Q á¡ááá®áá±ážááŸááºážáá»á¬ážááá¯ááºáᬠáá±á¬ááºážáá«ážáá»á¬áž -
source: www.habr.com