KDB+, ์์ฌ์ ํ
์ด ๊ธฐ์ฌ์์๋ KDB+๊ฐ ๋ฌด์์ธ์ง, ์ด๋ค ๊ธฐ๋ฅ๊ณผ ํ๊ณ๊ฐ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ ๊ธฐ์
์ ์ด๋ค ์ด์ ์ด ์๋์ง์ ๋ํด ์ ๋ฐ์ ์ผ๋ก ์ค๋ช
ํ๋ ค๊ณ ํฉ๋๋ค. KDB+ ๊ตฌํ์ด๋ Q ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ ์ธ๋ถ ์ฌํญ์ ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค. ์ด ๋ ์ฃผ์ ๋ ๋งค์ฐ ๊ด๋ฒ์ํ๋ฏ๋ก ๋ณ๋์ ๊ธฐ์ฌ๋ฅผ ์ธ ๊ฐ์น๊ฐ ์์ต๋๋ค. Q - Q For Mortals์ ๊ดํ ์ฑ
(์๋ ๋งํฌ ์ฐธ์กฐ)์ ํฌํจํ์ฌ ์ด๋ฌํ ์ฃผ์ ์ ๋ํ ๋ง์ ์ ๋ณด๋ฅผ code.kx.com์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ผ๋ถ ์ฉ์ด
- ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค. ๋ ๋น ๋ฅธ ์ก์ธ์ค๋ฅผ ์ํด RAM์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฅ์ ์ ๋ถ๋ช ํ์ง๋ง ๋จ์ ์ ๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ๊ณผ ์๋ฒ์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค.
- ์ด ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค. ๋ฐ์ดํฐ๊ฐ ๋ ์ฝ๋ ๋จ์๊ฐ ์๋ ์ด ๋จ์๋ก ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ํ ์ด์ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ์ ํจ๊ป ์ ์ฅ๋์ด ์ก์ธ์ค ์๋๊ฐ ํฌ๊ฒ ๋นจ๋ผ์ง๋ค๋ ๊ฒ์ ๋๋ค. ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋์ง ์๋ ์ด์ ๋ก๋ํ ํ์๊ฐ ์์ต๋๋ค. ๊ฐ์ฅ ํฐ ๋จ์ ์ ๊ธฐ๋ก ์์ ๋ฐ ์ญ์ ๊ฐ ์ด๋ ต๋ค๋ ์ ์ด๋ค.
- ์๊ณ์ด. ๋ ์ง ๋๋ ์๊ฐ ์ด์ด ์๋ ๋ฐ์ดํฐ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ๋ฐ์ดํฐ์๋ ์๊ฐ ์์๊ฐ ์ค์ํ๋ฏ๋ก ์ด๋ค ๋ ์ฝ๋๊ฐ ํ์ฌ ๋ ์ฝ๋๋ณด๋ค ์์ด๋ ๋ค์ธ์ง ์ฝ๊ฒ ๊ฒฐ์ ํ๊ฑฐ๋ ๋ ์ฝ๋ ์์์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ํจ์๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. ํด๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ํ ๋ค๋ฅธ ์์น์ ๋ฐ๋ผ ๊ตฌ์ถ๋์์ต๋๋ค. ์ฆ, ๋ ์ฝ๋ ๋ชจ์์ ์งํฉ์ผ๋ก ํํํ๋ฉฐ ์์น์ ์ผ๋ก ๋ ์ฝ๋์ ์์๋ ์ ์๋์ง ์์ต๋๋ค.
- ๋ฒกํฐ. KDB+์ ๋งฅ๋ฝ์์ ์ด๊ฒ์ ๋์ผํ ์์ ์ ํ์ ์์ ๋ชฉ๋ก์ ๋๋ค(์: ์ซ์). ์ฆ, ์์์ ๋ฐฐ์ด์ ๋๋ค. ๋ชฉ๋ก๊ณผ ๋ฌ๋ฆฌ ๋ฐฐ์ด์ ๋ฒกํฐ ํ๋ก์ธ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฉํธํ๊ฒ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ญ์ฌ ์ ๋ณด
KX๋ ์ด์ ์ Morgan Stanley Bank์์ A+ ์ธ์ด๋ก ๊ทผ๋ฌดํ๋ Arthur Whitney์ ์ํด 1993๋
์ ์ค๋ฆฝ๋์์ต๋๋ค. A+ ์ธ์ด๋ ๋งค์ฐ ๋
์ฐฝ์ ์ด๊ณ ํ๋ ๊ธ์ต๊ณ์์ ์ธ๊ธฐ ์์๋ ์ธ์ด์ธ APL์ ํ์ ์ธ์ด์
๋๋ค. ๋ฌผ๋ก KX์์ Arthur๋ ๋์ผํ ์ ์ ์ ์ด์ด๊ฐ๋ฉฐ ๊ธ์ง์ ์ธ ๋ฏธ๋๋ฉ๋ฆฌ์ฆ์ ์์ด๋์ด์ ๋ฐ๋ผ ๋ฒกํฐ ๊ธฐ๋ฅ ์ธ์ด K๋ฅผ ๋ง๋ค์์ต๋๋ค. K ํ๋ก๊ทธ๋จ์ ๊ตฌ๋์ ๊ณผ ํน์ ๋ฌธ์๊ฐ ๋ค์์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ๊ธฐํธ์ ๊ธฐ๋ฅ์ ์๋ฏธ๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ ๊ฐ ์์
์ ๊ธฐ์กด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์๋ฏธ๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ด๋ก ์ธํด K ํ๋ก๊ทธ๋จ์ ์ต์ํ์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ฉฐ(Java์ ๊ฐ์ ์ฅํฉํ ์ธ์ด์ ํ
์คํธ ํ์ด์ง๋ฅผ ๋ช ์ค๋ก ๋์ฒดํ ์ ์์) ์๊ณ ๋ฆฌ์ฆ์ ๋งค์ฐ ์ง์ค์ ์ผ๋ก ๊ตฌํํฉ๋๋ค.
์ฃผ์ด์ง ๋ฌธ๋ฒ์ ๋ฐ๋ผ ๋๋ถ๋ถ์ LL1 ํ์ ์์ฑ๊ธฐ๋ฅผ ๊ตฌํํ๋ K์ ํจ์:
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๊ฐ ์ด๋์ ์๋์ง ๋ถ๋ช
ํด์ง ๊ฒ ๊ฐ์ต๋๋ค) KDB+์ ๋ค ๋ฒ์งธ ๋ฒ์ ์ ํด์์์ ์ง๋์ง ์์ต๋๋ค. K K ์์ Q๋ผ๋ ๋์ฑ ์ฌ์ฉ์ ์นํ์ ์ธ ๋ฒ์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. Q๋ ๋ํ ํน์ SQL ๋ฐฉ์ธ์ธ QSQL์ ๋ํ ์ง์๊ณผ ์ธํฐํ๋ฆฌํฐ(์์คํ
๋ฐ์ดํฐ ์ ํ์ผ๋ก ํ
์ด๋ธ ์ง์, ํ
์ด๋ธ ์์
๋๊ตฌ)๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋์คํฌ ๋ฑ์์
๋ฐ๋ผ์ ์ฌ์ฉ์ ๊ด์ ์์ ๋ณด๋ฉด KDB+๋ C#์ ํ
์ด๋ธ๊ณผ SQL๊ณผ ์ ์ฌํ LINQ ์คํ์ผ ํํ์์ ์ง์ํ๋ ๋จ์ํ Q ์ธ์ด ํด์๊ธฐ์
๋๋ค. ์ด๋ KDB+์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฅ ์ค์ํ ์ฐจ์ด์ ์ด์ ์ฃผ์ ๊ฒฝ์ ์ฐ์์ด์ง๋ง ์ข
์ข
๊ฐ๊ณผ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค + ๋นํ์ฑํ๋ ๋ณด์กฐ ์ธ์ด๊ฐ ์๋๋ผ ๋ณธ๊ฒฉ์ ์ธ ๊ฐ๋ ฅํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด + ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฅ์ ๋ํ ๋ด์ฅ ์ง์์
๋๋ค. ์ด๋ฌํ ๊ตฌ๋ณ์ KDB+์ ๋ชจ๋ ์ด์ ์ ๋์ดํ๋ ๋ฐ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ดโฆ
ํฌ๊ธฐ
ํ๋ ํ์ค์ผ๋ก ๋ณผ ๋ KDB+๋ ํฌ๊ธฐ๊ฐ ์์ฃผ ์์ต๋๋ค. ๋ง ๊ทธ๋๋ก ๋ฉ๊ฐ๋ฐ์ดํธ ๋ฏธ๋ง์ ์คํ ํ์ผ ํ๋์ ์ผ๋ถ ์์คํ ๊ธฐ๋ฅ์ด ํฌํจ๋ ์์ ํ ์คํธ ํ์ผ ํ๋์ ๋๋ค. ์ค์ ๋ก๋ 1MB ๋ฏธ๋ง์ด๋ฉฐ ์ด ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ํ์ฌ๋ ์๋ฒ์ ํ๋ก์ธ์ ํ๋์ ๋ํด ์ฐ๊ฐ ์๋ง ๋ฌ๋ฌ๋ฅผ ์ง๋ถํฉ๋๋ค.
- ์ด ํฌ๊ธฐ๋ฅผ ํตํด KDB+๋ Pi ๋ง์ดํฌ๋ก์ปดํจํฐ๋ถํฐ ํ ๋ผ๋ฐ์ดํธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ถ ์๋ฒ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ํ๋์จ์ด์์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฐํํ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ค ์์ผ๋ก๋ ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉฐ Q๋ ์ฆ์ ์์๋๋ฏ๋ก ๋ฌด์๋ณด๋ค๋ ์คํฌ๋ฆฝํ ์ธ์ด๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ด ํฌ๊ธฐ์์๋ Q ์ธํฐํ๋ฆฌํฐ๊ฐ ํ๋ก์ธ์ ์บ์์ ์์ ํ ๋ค์ด๊ฐ๋ฏ๋ก ํ๋ก๊ทธ๋จ ์คํ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค.
- ์ด ํฌ๊ธฐ์ ์คํ ํ์ผ์ ์ฌ์ฉํ๋ฉด Q ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฌด์ํ ์ ์๋ ๊ณต๊ฐ์ ์ฐจ์งํ๋ฏ๋ก ์๋ฐฑ ๊ฐ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ํ์ํ๋ค๋ฉด Q๋ ๋จ์ผ ํ๋ก์ธ์ค ๋ด์์ ์์ญ, ์๋ฐฑ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์๋ํ ์๋ ์๋ค.
Universalism
Q๋ ๋ค์ํ ์์ฉ ๋ถ์ผ์ ์ ํฉํฉ๋๋ค. ํ๋ก์ธ์ค Q๋ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญํ ์ ํ๋ฉฐ ํ
๋ผ๋ฐ์ดํธ๊ธ ์ ๋ณด์ ๋ํ ๋น ๋ฅธ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ ์์ญ ๊ฐ์ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ ๊ทธ ์ค ์ผ๋ถ๋ ์์ถ๋์ง ์์ ํ๋ฃจ์ ๋ฐ์ดํฐ๊ฐ 100GB ์ด์์ ์ฐจ์งํฉ๋๋ค. ๊ทธ๋ฌ๋ ํฉ๋ฆฌ์ ์ธ ์ ํ์ด ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ๋ ์์ญ์์ ์๋ฐฑ ๋ฐ๋ฆฌ์ด ๋ด์ ์๋ฃ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์์ฒญ์ ๋ํ ๋ณดํธ์ ์ธ ์๊ฐ ์ด๊ณผ(30์ด)๊ฐ ์์ผ๋ฉฐ ์ด๋ ๊ฑฐ์ ์๋ํ์ง ์์ต๋๋ค.
Q๋ ์ฝ๊ฒ ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ ์ ์์ต๋๋ค. ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ธ๋ฉ๋ชจ๋ฆฌ ํ
์ด๋ธ์ ๋๋ฌด ๋นจ๋ฆฌ ์ถ๊ฐ๋๋ฏ๋ก ์ฌ์ฉ์ ์์ฒญ์ด ์ ํ ์์๊ฐ ๋ฉ๋๋ค. ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ ์ด์ ์ ์ฅ๋ฉ๋๋ค. ์ฆ, ์ด์ ๋ํ ๋ชจ๋ ์์
์ ํ๋ก์ธ์ ์บ์๋ฅผ ์ ์ฒด ์ฉ๋์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ์ธ์๋ KX๋ ์ฐ์ฐ ๋ฑ ๋ชจ๋ ๊ธฐ๋ณธ ์ฐ์ฐ์ ํ๋ก์ธ์์ ๋ฒกํฐ ๋ช
๋ น์ ํตํด ๊ตฌํํด ์๋๋ฅผ ๊ทน๋ํํ๋ ค ๋
ธ๋ ฅํ๋ค. Q๋ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๋ฐ์ ์ด์ง ์์ ์์
์ ์ํํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ "์ค์๊ฐ"์ผ๋ก ๊ณ์ฐํฉ๋๋ค(์์
์ ๋ฐ๋ผ ์์ญ ๋ฐ๋ฆฌ์ด์์ ๋ช ์ด๊น์ง ์ง์ฐ๋จ). ๋ค์ํ ์๊ฐ์ ๋ํ ๊ธ์ต ์ํ์ ๋ํ ๋ค์ํ ์ง๊ณ ๊ธฐ๋ฅ ์๋ฒฝํ ๊ฑฐ๋๊ฐ ์์ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๋ํ ๋ชจ๋ธ์ ๊ตฌ์ถํ๊ฑฐ๋ ์๋ฃ ํ ๊ฑฐ์ ์ฆ์ ํ๋กํ์ผ๋ง์ ์ํํฉ๋๋ค. ์ด๋ฌํ ์์
์์ ๋๋ถ๋ถ์ ์ฃผ์ ์๊ฐ ์ง์ฐ์ Q๊ฐ ์๋๋ผ ๋ค์ํ ์์ค์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํด์ผ ํ๋ ํ์์ฑ์
๋๋ค. ๋ฐ์ดํฐ์ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ํ๋์ ํ๋ก์ธ์ค์ ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์๋๊ฐ ๋ฌ์ฑ๋๋ฉฐ ์ฒ๋ฆฌ๋ ํด์๋์ง ์๊ณ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ์คํ๋๋ ์ฌ๋ฌ QSQL ํํ์ ๋ฐ ์กฐ์ธ ์คํ์ผ๋ก ์ถ์๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก Q์์ ๋ชจ๋ ์๋น์ค ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ์์ฒญ์ ํ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์๋ฒ์ ์๋์ผ๋ก ๋ฐฐํฌํ๋ ๊ฒ์ดํธ์จ์ด ํ๋ก์ธ์ค๊ฐ ์์ต๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ ๊ท ํ ์กฐ์ , ์ฐ์ ์์ ์ง์ , ๋ด๊ฒฐํจ์ฑ, ์ก์ธ์ค ๊ถํ, ํ ๋น๋ ๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๋ ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ ์๋ ์์ ํ ์์ ๋ฅผ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์ด ๋ชจ๋ ๊ฒ์ ์ง์ ๊ตฌํํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค.
์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ํ๋ก์ธ์ค ์ ํ์ ๋์ดํ๊ฒ ์ต๋๋ค. ์ด๋ค ๋ชจ๋๋ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ํจ๊ป ์๋ํ์ฌ ์์ญ ๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋๋ก ๊ฒฐํฉํ๊ณ ์ฌ๋ฌ ์์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์๋ฐฑ ๋ช
์ ์ฌ์ฉ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ค์ ๋ํ ์ปค๋ฅํฐ(ํผ๋ํธ๋ค๋ฌ). ์ด๋ฌํ ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก Q์ ๋ก๋๋๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. Q์ C ์ธํฐํ์ด์ค๋ ๋งค์ฐ ๊ฐ๋จํ๋ฉฐ ๋ชจ๋ C/C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํ๋ก์ ํจ์๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. Q๋ ์๋ฅผ ๋ค์ด ๋ชจ๋ ์ ๋ฝ ์ฆ๊ถ ๊ฑฐ๋์์์ ๋์์ ์์์ง๋ FIX ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฑ์ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ ๋งํผ ๋น ๋ฆ ๋๋ค.
- ๋ฐ์ดํฐ ๋ถ๋ฐฐ์(ํฐ์ปคํ๋ํธ), ์ปค๋ฅํฐ์ ์๋น์ ์ฌ์ด์ ์ค๊ฐ ๋งํฌ ์ญํ ์ ํฉ๋๋ค. ๋์์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ํน์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๊ธฐ๋กํ์ฌ ์๋น์์๊ฒ ์ฐ๊ฒฐ ์์ค์ด๋ ์ฌ์์์ ๋ํ ๊ฒฌ๊ณ ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค(rdb). ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ฌ ๊ฐ์ฅ ๋น ๋ฅธ ์๋๋ก ์ก์ธ์คํ ์ ์๋๋ก ํด์ค๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฎ์๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํ๊ณ ๋ฐค์๋ ์ฌ์ค์ ํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค(pdb)๋ฅผ ์ ์งํฉ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ค๋์ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก rdb์ ๋ฌ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๊ณ ๋ฎ์๋ ๋์คํฌ์ ํน์ ์บ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณต์ฌํฉ๋๋ค.
- ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค(hdb). ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด์ ์ผ, ์, ์ฐ๋์ ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ํฌ๊ธฐ(์ผ์)๋ ํ๋ ๋๋ผ์ด๋ธ ํฌ๊ธฐ์ ์ํด์๋ง ์ ํ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ ์ด๋์๋, ํนํ ์ก์ธ์ค ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋ค๋ฅธ ๋์คํฌ์ ์์ ์ ์์ต๋๋ค. ์ ํํ ์ ์๋ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ถํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ ์ ๋ฌธ์ํ๋์ด ์๊ณ ๋จ์ํ๋ฉฐ, ๋ฐ์ดํฐ๋ ์ผ๋ฐ ํ์ผ์ ํ ์ด์ฉ ์ ์ฅ๋๋ฏ๋ก ์ด์ ์ฒด์ ๋ฑ์ ํตํด ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ง๊ณ๋ ์ ๋ณด๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค. ์ผ๋ฐ์ ์ผ๋ก ๊ณ์ธก๊ธฐ ์ด๋ฆ ๋ฐ ์๊ฐ ๊ฐ๊ฒฉ๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ๋ค์ํ ์ง๊ณ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ค์ด์ค๋ ๋ฉ์์ง๋ง๋ค ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฏธ๋ฆฌ ๊ณ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ๊ธฐ๋ก ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค ์๋๋ฅผ ๋์ ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก, ๊ฒ์ดํธ์จ์ด ํ๋ก์ธ์ค์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. Q๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ด์ค๋ ๋ฉ์์ง์ ์์ ํ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฉ์์ง๋ฅผ ๋ฐฐํฌํ๊ณ ์ก์ธ์ค ๊ถํ์ ํ์ธํ๋ ๋ฑ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๋ฉ์์ง๋ ์ ํ๋์ง ์์ผ๋ฉฐ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ์ฒ๋ผ SQL ํํ์์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๊ฐ์ฅ ๋ง์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ SQL ํํ์์ ํน์ ํจ์์ ์จ๊ฒจ์ ธ ์์ผ๋ฉฐ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋งค๊ฐ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฆ, ์๊ฐ ๋ณํ, ํํฐ๋ง, ๋ฐ์ดํฐ ์ ๊ทํ(์: ๋ฐฐ๋น๊ธ ์ง๊ธ ์ ์ฃผ๊ฐ ๊ท ๋ฑํ) ๋ฑ์ด ์์ต๋๋ค.
ํ ๊ฐ์ง ๋ฐ์ดํฐ ์ ํ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ํคํ ์ฒ:
์๋
Q๋ ํด์ ์ธ์ด์ด์ง๋ง ๋ฒกํฐ ์ธ์ด์ด๊ธฐ๋ ํฉ๋๋ค. ์ด๋ ๋ง์ ๋ด์ฅ ํจ์, ํนํ ์ฐ์ ํจ์๊ฐ ์ซ์, ๋ฒกํฐ, ํ๋ ฌ, ๋ชฉ๋ก ๋ฑ ๋ชจ๋ ํ์์ ์ธ์๋ฅผ ์ทจํ๊ณ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋ก๊ทธ๋จ์ ๋ฐฐ์ด ์ฐ์ฐ์ผ๋ก ๊ตฌํํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ์ธ์ด์์๋ ๋ฐฑ๋ง ๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋ ๋ ๊ฐ์ ๋ฒกํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ์ธ์ด๊ฐ ํด์๋๋ ๊ฒ์ ๋ ์ด์ ์ค์ํ์ง ์์ผ๋ฉฐ ์ถ๊ฐ๋ ๋งค์ฐ ์ต์ ํ๋ ์ด์ง ํจ์์ ์ํด ์ํ๋ฉ๋๋ค. Q ํ๋ก๊ทธ๋จ์์ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ด ์ด๋ฌํ ๊ธฐ๋ณธ ๋ฒกํฐํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ํ
์ด๋ธ ์์
์ ์๋น๋๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅ์ ๋งค์ฐ ๊ด์ฐฎ์ ์์
์๋๋ก ๋จ์ผ ํ๋ก์ธ์ค์์๋ ์์ฒญ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ Python์ ์ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฌํฉ๋๋ค. Python ์์ฒด๋ ๋งค์ฐ ๋๋ฆฐ ์ธ์ด์ด์ง๋ง ์ปดํ์ผ๋ ์ธ์ด์ ์๋๋ก ์์น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ numpy์ ๊ฐ์ ์ฐ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง์ด ์์ต๋๋ค(๊ทธ๋ฐ๋ฐ numpy๋ ์ด๋
์ ์ผ๋ก Q์ ๊ฐ๊น์ต๋๋ค). ).
๋ํ KX๋ ํ
์ด๋ธ์ ๋์์ธํ๊ณ ์์
์ ์ต์ ํํ๋ ๋ฐ ๋งค์ฐ ์ ์คํ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ์ต๋๋ค. ์ฒซ์งธ, ๋ด์ฅ ํจ์์ ์ํด ์ง์๋๊ณ ํ
์ด๋ธ ์ด๋ฟ๋ง ์๋๋ผ ๊ทธ๋ฃนํ, ์ ๋ ฌ, ๊ณ ์ ์ฑ ์์ฑ ๋ฐ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ํน์ ๊ทธ๋ฃนํ์ ๊ฐ์ ๋ชจ๋ ๋ฒกํฐ์๋ ์ ์ฉํ ์ ์๋ ์ฌ๋ฌ ์ ํ์ ์ธ๋ฑ์ค๊ฐ ์ง์๋ฉ๋๋ค. ์ธ๋ฑ์ค๋ ๊ฐ๋จํ๊ฒ ์ ์ฉ๋๋ฉฐ ์ด/๋ฒกํฐ์ ์์๋ฅผ ์ถ๊ฐํ ๋ ์๋์ผ๋ก ์กฐ์ ๋ฉ๋๋ค. ์ธ๋ฑ์ค๋ ๋ฉ๋ชจ๋ฆฌ์ ๋์คํฌ ๋ชจ๋์ ํ
์ด๋ธ ์ด์ ๋์ผํ๊ฒ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉ๋ ์ ์์ต๋๋ค. QSQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ๊ฐ๋ฅํ๋ฉด ์ธ๋ฑ์ค๊ฐ ์๋์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋์งธ, ๊ธฐ๋ก ๋ฐ์ดํฐ ์์
์ OS ํ์ผ(๋ฉ๋ชจ๋ฆฌ ๋งต) ํ์ ๋ฉ์ปค๋์ฆ์ ํตํด ์ํ๋ฉ๋๋ค. ํฐ ํ
์ด๋ธ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋์ง ์์ต๋๋ค. ๋์ ํ์ํ ์ด์ด ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ๋งคํ๋๊ณ ๊ทธ ์ค ํ์ํ ๋ถ๋ถ๋ง ์ค์ ๋ก ๋ก๋๋ฉ๋๋ค(์ธ๋ฑ์ค๋ ์ฌ๊ธฐ์ ๋์์ด ๋จ). ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ์ฌ๋ถ๋ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์๋ฌด๋ฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค. mmap์ ์ฌ์ฉํ๋ ๋ฉ์ปค๋์ฆ์ Q ๊น์ด์ ์์ ํ ์จ๊ฒจ์ ธ ์์ต๋๋ค.
KDB+๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋๋๋ค. ํ
์ด๋ธ์ ์์์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ง๋ง ํ
์ด๋ธ์ ํ ์์๋ ์ ์์๊ฐ ์ถ๊ฐ๋ ๋ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ ์ ์๊ณ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์๊ณ์ด(๊ตํ, ์๊ฒฉ ์ธก์ , ์ด๋ฒคํธ ๋ก๊ทธ์ ๋ฐ์ดํฐ) ์์
์ ๊ธด๊ธํ๊ฒ ํ์ํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์๊ฐ๋ณ๋ก ์ ๋ ฌ๋๋ฉด ์ฌ์ฉ์๊ฐ ์ฒซ ๋ฒ์งธ ๋๋ ๋ง์ง๋ง ํ ๋๋ N์ ์ฐพ๊ธฐ ์ํด SQL ํธ๋ฆญ์ ์ฌ์ฉํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ํ
์ด๋ธ์ ํ, N๋ฒ์งธ ์ค ๋ค์์ ์ค๋ ์ค ๋ฑ์ ๊ฒฐ์ ํฉ๋๋ค. ํ
์ด๋ธ ์กฐ์ธ์ ํจ์ฌ ๋ ๋จ์ํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด 16000์ต ๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋ ํ
์ด๋ธ์์ 500๊ฐ์ VOD.L(Vodafone) ํธ๋์ญ์
์ ๋ํ ๋ง์ง๋ง ๊ฒฌ์ ์ ์ฐพ๋ ๋ฐ๋ ๋์คํฌ์์๋ ์ฝ XNUMX์ด, ๋ฉ๋ชจ๋ฆฌ์์๋ ์์ญ ๋ฐ๋ฆฌ์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
์๊ฐ ์กฐ์ธ์ ์ - ๊ฒฌ์ ํ
์ด๋ธ์ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ๋๋ฏ๋ก VOD.L์ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ Sym ์ด์ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๊ฐ ์๊ฐ๋ณ๋ก ์ ๋ ฌ๋๋ค๋ ์ฌ์ค์ด ์์์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. 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+๋ ์ฃผ๋ก ํ์ํ ๋ค์ฉ์ฑ์ผ๋ก ์ธํด ๊ธฐ์
๋ค ์ฌ์ด์์ ์ธ๊ธฐ๊ฐ ๋์ต๋๋ค. ์ด๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ
๋ผ๋ฐ์ดํธ๊ธ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๋ฐ์ดํฐ ๋ถ์์ ์ํ ํ๋ซํผ์ผ๋ก์์ ์ญํ ์ ๋์ผํ๊ฒ ์ํํฉ๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๊ณ ์ ์ด์๊ณผ ์์ ์ ์ฝ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฅ๊ณผ ํตํฉ๋ ๋ณธ๊ฒฉ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์์ ๋ถํฐ ์ฌ์ฉ์ ์์ฒญ ์ฒ๋ฆฌ๊น์ง ํ์ํ ํ๋ก์ธ์ค์ ์ ์ฒด ์คํ์ ํ๋์ ํ๋ซํผ์์ ๊ตฌํํ ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์,
์ ํ
KDB+/Q์ ์ค์ํ ๋จ์ ์ ์ง์ ๋ฌธํฑ์ด ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ธ์ด์ ์ด์ํ ๊ตฌ๋ฌธ์ด ์๊ณ ์ผ๋ถ ํจ์์ ๊ณผ๋ถํ๊ฐ ๋ง์ด ๊ฑธ๋ ธ์ต๋๋ค(์๋ฅผ ๋ค์ด value์๋ ์ฝ 11๊ฐ์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค). ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํ๋ก๊ทธ๋จ ์์ฑ์ ์์ด์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฒกํฐ ์ธ์ด์์๋ ํญ์ ๋ฐฐ์ด ๋ณํ์ ๊ด์ ์์ ์๊ฐํด์ผ ํ๊ณ , map/reduce ํจ์(Q์์๋ ๋ถ์ฌ๋ผ๊ณ ํจ)์ ์ฌ๋ฌ ๋ณํ์ ํตํด ๋ชจ๋ ๋ฃจํ๋ฅผ ๊ตฌํํด์ผ ํ๋ฉฐ, ๋ฒกํฐ ์ฐ์ฐ์ ์์ ์ฐ์ฐ์ผ๋ก ๋์ฒดํ์ฌ ๋น์ฉ์ ์ ์ฝํ๋ ค๊ณ ํ๋ฉด ์ ๋ ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์์ N๋ฒ์งธ๋ก ๋ํ๋๋ ์์์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด์ผ ํฉ๋๋ค.
1. (where element=vector)[N]
C/Java ํ์ค์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ ๋งค์ฐ ๋นํจ์จ์ ์ผ๋ก ๋ณด์
๋๋ค(= ์์์ ์ค์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ ๋ถ์ธ ๋ฒกํฐ๋ฅผ ์์ฑํฉ๋๋ค). ๊ทธ๋ฌ๋ ์ด ํ๊ธฐ๋ฒ์ ํํ์ ์๋ฏธ๋ฅผ ๋ ๋ช
ํํ๊ฒ ๋ง๋ค๊ณ ๋๋ฆฐ ์์ ์ฐ์ฐ ๋์ ๋น ๋ฅธ ๋ฒกํฐ ์ฐ์ฐ์ ์ฌ์ฉํฉ๋๋ค. ๋ฒกํฐ ์ธ์ด์ ๋ค๋ฅธ ์ธ์ด ๊ฐ์ ๊ฐ๋
์ ์ฐจ์ด๋ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๋ช
๋ นํ ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ธฐ๋ฅ์ ์ ๊ทผ ๋ฐฉ์์ ์ฐจ์ด์ ๋น์ทํ๋ฉฐ ์ด์ ๋๋นํด์ผ ํฉ๋๋ค.
์ผ๋ถ ์ฌ์ฉ์๋ QSQL์ ๋ง์กฑํ์ง ์์ต๋๋ค. ์์ ์ ์ค์ SQL์ฒ๋ผ ๋ณด์ธ๋ค๋ ๊ฒ์
๋๋ค. ์ค์ ๋ก๋ ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ์ง์ํ์ง ์๋ SQL๊ณผ ์ ์ฌํ ํํ์์ ํด์๊ธฐ์ผ ๋ฟ์
๋๋ค. ์ฌ์ฉ์๋ ์ค์ค๋ก ์ต์ ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ, ๋ง์ ์ฌ๋๋ค์ด ์์ง ์ค๋นํ์ง ๋ชปํ Q ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด์, ๋ธ๋๋ฐ์ค ์ต์ ํ ํ๋ก๊ทธ๋จ์ ์์กดํ์ง ์๊ณ ์ธ์ ๋ ์ง ์ต์ ์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ ์ ์์ต๋๋ค.
๊ฒ๋ค๊ฐ Q - Q For Mortals์ ๊ดํ ์ฑ
์ ๋ค์์์ ๋ฌด๋ฃ๋ก ์ ๊ณต๋ฉ๋๋ค.
๋ ๋ค๋ฅธ ํฐ ๋จ์ ์ ๋ผ์ด์ผ์ค ๋น์ฉ์
๋๋ค. ์ด๋ CPU๋น ์ฐ๊ฐ ์๋ง ๋ฌ๋ฌ์ ๋ฌํ๋ ๊ธ์ก์
๋๋ค. ๋๊ธฐ์
๋ง์ด ๊ทธ๋ฌํ ๋น์ฉ์ ๊ฐ๋นํ ์ ์์ต๋๋ค. ์ต๊ทผ KX๋ ๋ผ์ด์ ์ค ์ ์ฑ
์ ๋์ฑ ์ ์ฐํ๊ฒ ๋ง๋ค์ด Google ๋ฐ Amazon ํด๋ผ์ฐ๋์์ ์ฌ์ฉ ์๊ฐ์ ๋ํด์๋ง ๋น์ฉ์ ์ง๋ถํ๊ฑฐ๋ KDB+๋ฅผ ์๋ํ ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. KX๋ ๋ค์ด๋ก๋๋ ์ ๊ณตํฉ๋๋ค.
๊ฒฝ์
๋งค์ฐ ๋ง์ ์์ ๋ฐ์ดํฐ์ ์ด์ ์ ๋ง์ถ ์ปฌ๋ผํ, ๋ฉ๋ชจ๋ฆฌ ๋ด ์ ์ฌํ ์์น์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ฝค ๋ง์ด ์์ต๋๋ค. ๋ฌธ์ ๋ ์ด๊ฒ์ด ์ ๋ฌธํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๋ ์ ์ด๋ค. ๋์ ๋๋ ์๋ Clickhouse์
๋๋ค. ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์์ด์ KDB+์ ๋งค์ฐ ์ ์ฌํ ์๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋น๋ก ํฌ๊ฒ๋ ์๋์ง๋ง ์ผ๋ถ ์ฟผ๋ฆฌ๋ฅผ KDB+๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก์๋ Clickhouse๋ KDB+๋ณด๋ค ๋ ์ ๋ฌธ์ ์
๋๋ค. ์น ๋ถ์๊ณผ ์์์ ์๊ณ์ด์
๋๋ค(์ด ์ฐจ์ด์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Clickhouse์์๋ ๋ ์ฝ๋ ์์๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค). ๊ทธ๋ฌ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ Clickhouse์๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๋ณ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ก๋ํ๊ณ , ์์์ SQL ํํ์์ ์์ฑํ๊ณ , ์ฟผ๋ฆฌ์ ์์์ ํจ์๋ฅผ ์ ์ฉํ๊ณ , ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์ธ์ด์ธ KDB+์ ๋ค๊ธฐ๋ฅ์ฑ์ด ์๋ค๋ ์ ์
๋๋ค. ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฅ์ ์คํ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ KDB+๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๊ตํ๋ ๊ฒ์ ์ด๋ ต์ต๋๋ค. ํน์ ์ฌ์ฉ ์ฌ๋ก์์๋ ๋ ๋์ ์๋ ์๊ณ ์ ํต์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์์ด์๋ ๋ ๋์ ์๋ ์์ง๋ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋๊ฐ์ด ํจ๊ณผ์ ์ด๊ณ ๋ค์ฌ๋ค๋ฅํ ๋ค๋ฅธ ๋๊ตฌ๋ ์์ต๋๋ค.
ํ์ด์ฌ ํตํฉ
๊ธฐ์ ์ ์ต์ํ์ง ์์ ์ฌ๋๋ค์ด KDB+๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก KX๋ ๋จ์ผ ํ๋ก์ธ์ค ๋ด์์ Python๊ณผ ๊ธด๋ฐํ๊ฒ ํตํฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์์ต๋๋ค. Q์์ Python ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ๊ทธ ๋ฐ๋๋ก ํธ์ถํ ์ ์์ต๋๋ค. Python์์ Q ํจ์(ํนํ QSQL ํํ์)๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ํ ๊ฒฝ์ฐ(ํญ์ ํจ์จ์ฑ์ ์ํด ๊ทธ๋ฐ ๊ฒ์ ์๋) ํ ์ธ์ด ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ์ธ์ด ํ์์ผ๋ก ๋ณํํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก Q์ Python์ ๊ฒฝ๊ณ๊ฐ ๋ชจํธํ ์ ๋๋ก ๊ธด๋ฐํ ๊ณต์ ๊ด๊ณ๋ฅผ ์ ์งํ๊ณ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋ก๊ทธ๋๋จธ๋ ์๋ง์ ์ ์ฉํ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ์ฒด ์ก์ธ์ค ๊ถํ์ ๊ฐ๊ฒ ๋๋ฉฐ, ๋ค๋ฅธ ํํธ์ผ๋ก๋ Python์ ํตํฉ๋ ๋น
๋ฐ์ดํฐ ์์
์ ์ํ ๋น ๋ฅธ ๊ธฐ๋ฐ์ ์ป๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ธฐ๊ณ ํ์ต์ ๊ด๋ จ๋ ์ฌ๋๋ค์๊ฒ ํนํ ์ ์ฉํฉ๋๋ค. ๋๋ ๋ชจ๋ธ๋ง.
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')
์ฐธ์กฐ
ํ์ฌ ์ฌ์ดํธ -
๊ฐ๋ฐ์๋ฅผ ์ํ ์น์ฌ์ดํธ -
Q For Mortals ์์ฝ (์์ด) -
kx ์ง์์ด ์ ํ๋ KDB+/Q ์ง์ ๊ด๋ จ ๊ธฐ์ฌ -
์ถ์ฒ : habr.com