แแฅแแแ แจแแแแซแแแแ แฌแแแแแแฎแแ แ แ แแ แแก KDB+ แแแแ, Q แแ แแแ แแแแ แแแแก แแแ, แ แ แแ แแก แแแแ แซแแแแ แ แแ แกแฃแกแขแ แแฎแแ แแแแ แฉแแแก แฌแแแ
แจแแกแแแแแ
KDB+ แแ แแก แกแแแขแแแแแ แแแแแชแแแแ แแแแ, แ แแแแแแช แแ แแแแขแแ แแแฃแแแ แแแแแชแแแแ แซแแแแแ แแแ แ แแแแแแแแแแ, แแแแแแแแฃแแแ แแแแแ แแขแฃแแ แแแแ (แซแแ แแแแแแ แแ แแแก แแแฎแแแแแ). แแแ แซแแ แแแแแแ แแแแแแงแแแแแ แคแแแแแกแฃแ แแแกแขแแขแฃแขแแแจแ - แแแแแแแจแ, แกแแแแแแกแขแแชแแ แคแแแแแแจแ, แกแแแแแฆแแแแ แแแแแแแแแแจแ. Q แแแ แแ แแก KDB+-แแก แจแแแ แแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแคแแฅแขแฃแ แแ แแแฃแจแแแ แแ แแแแแชแแแแแแแ. Q แแแแแแแแแ แแ แแก แแแแแแฃแ แแแ แแ แแคแแฅแขแฃแ แแแ, แฎแแแ แกแแชแฎแแแ แแฌแแ แแแ. แแก แแแแแ แแแแแฃแแแ แแแแ, แ แแ แแแฅแขแแ แฃแแ แแแแก แแแแแแ แแแแแกแแแแ แจแแแแฎแแแแแจแ แ แแฃแแ แแฅแแแแ, แฎแแแ แฉแแแแฌแแ แแก แกแแแแแแ แแ แกแแแแแแ แ แกแแจแฃแแแแแแก แแแซแแแแ แแแฎแแ แแ แแแ แแแแก แแแชแแแแแแ แแแแ แแแฌแแแ แแ แ แแแ แแแแ, แ แแช แกแแแแแแแ แแแแแแแแแก แแแก แแแแแแแก.
แแ แกแขแแขแแแจแ แฉแแแ แแแแแแฎแแ แชแแแแแแ แกแ แฃแแคแแกแแแแ แแ แแแ แแแแก Q-แจแ แแ แจแแแซแแแแ แแแแแแแแ แกแชแแแแ แแแ. แแแแกแแแแแก แแแแญแแ แแแแแ แคแแฅแขแแแ แแแ Q. แจแแแแซแแแแ แฉแแแแขแแแ แแแ แฃแคแแกแ 32-แแแขแแแแ แแแ แกแแ kx แแแแแแแแแก แแแแกแแแขแแ โ
แแ แแแแแแแก แจแแกแแฎแแ แแแแชแฎแแแแแ
แแ แแก แฌแงแแ แ, แ แแแแแแช แแแแแแแแก แชแฎแ แแแก แแแแแชแแแแแแ แงแแแแ 25 แแแแแฌแแแจแ. แแแแแแแแ KDB+ แซแแ แแแแแแ แแแแแแงแแแแแ แคแแแแแกแแแจแ, แฉแแแ แแแแแ แแฃแแแแ, แ แแ แแก แแ แแก แขแ แแแแแฅแชแแแแแก แชแฎแ แแแ (แแแญแ แแแ), แ แแแแแกแแช แแฅแแก แจแแแแแแ แกแแแขแแแ: แแ แ (แแ แ แแแแแฌแแแแแจแ), sym (แแแแแแแแแก แแฆแแแจแแแ แกแแคแแแแ แแแ แแแแ - IBM, AAPL,โฆ), แคแแกแ (แคแแกแ, แ แแแแแแแช แจแแแซแแแ แแฅแชแแแแ), แแแแ (แขแ แแแแแฅแชแแแก แแแแ). 25 แแแแแฌแแแแแแ แแแขแแ แแแแ แแแแแแแแฃแ แแ, แแ แช แแกแ แแชแแ แ แแ แแ แช แซแแแแแ แแ แซแแแ. แแแกแ แแ แกแแแแแ แแแจแแแแก, แ แแ แแแแแชแแแแแ แกแแ แแแกแจแ แฃแแแ แแฃแคแแ แแ แแแฃแแแ. แแแ แขแแแ แแฅแแแแ แแฃแคแแ แแ แแแแก แแแแแ แแแ แกแแ แแแกแแก แแฎแแ แแก, แแแ แจแแ แแก แแแแแแแฃแ แ แแฃแคแแ แแ แแแ แแแแแแแแ แ แแแขแแแ แแแแก แแแฎแแแแแ, แแแแ แแ แกแแแแ แขแแแแกแแแแก แฉแแแ แงแฃแ แแแฆแแแแก แแแแแแแฎแแแแแแ แคแแฅแกแแ แแแฃแ แแแขแแ แแแแแ.
แกแแ แแแกแแ แฃแแแ แแแแแแแแแก แงแแแแ แฌแฃแแก sym แกแแแขแแแแ แแแแแแฃแแ แจแแแแแแแแแ แกแแแแแแแกแแแแก แคแฃแแฅแชแแแแแก แแแแ แแแแแแก แแแแ แแแ - แแแฅแกแแแแแฃแ แ แคแแกแ, แกแแจแฃแแแ แคแแกแ, แฏแแแแก แแแแ แแ แ.แจ. แแแแแกแแแแแ แแแคแแ แแแชแแ. แกแแแแ แขแแแแกแแแแก, แฉแแแ แแแแแ แแฃแแแแ, แ แแ แงแแแแ แคแฃแแฅแชแแแก แแแแแแแแ แจแแกแแซแแแแแแแ แแแแแแแแแแแแ, แ.แ. แแฎแแแ แแแแจแแแแแแแแก แแแกแแฆแแแแ, แกแแแแแ แแกแแ แแชแแแแ แแ แ แ แแชแฎแแ - แซแแแแ แแ แจแแแแแแแแแ แแแแจแแแแแแแแแ. แแแแแแแแแ, แคแฃแแฅแชแแแแก max, แกแแจแฃแแแ, sum แแฅแแก แแก แแแแกแแแ, แแแแ แแ แแแแแแแ แคแฃแแฅแชแแแก แแ แ.
แฉแแแ แแกแแแ แแแแแ แแฃแแแแ, แ แแ แจแแแแแแแแแ แแแแแชแแแแ แแแแแแ แแ แแก แแ แแจแ แจแแแแแแแแ. แแก แแแแแชแแแก แจแแกแแซแแแแแแแแก แแแแฃแจแแแ แแฎแแแแ แแแแ แฌแฃแแแแ. แแ แแฅแขแแแแจแ แกแแแแแ แแกแแ แแแแแแแแ แ แแ แฌแแแ แฌแฃแแแแแแ แแฃแจแแแแ, แแฃ แ แแแแ แแแแแฎแแแแ แแแแแแแแแแฃแแแ. แกแแแแ แขแแแแกแแแแก, แฉแแแ แแ แแแแแแฎแแแแแ แแ แจแแแแฎแแแแแก.
แแแ แแแแชแแแก แคแฃแแฅแชแแแแ
แกแแญแแ แ แแแ แแแแชแแแก แคแฃแแฅแชแแแแ แฉแแแแแแแแแแ แฅแแแแแ. แ แแช แจแแแซแแแแ แแแขแ แแแแแแแ แแแแฆแ แกแแ แแแกแแ แแแขแแแ แแแแก แแแกแแแ แแแแแ:
- แแแฆแแแ โ แแแฅแกแแแแแฃแ แ แคแแกแ โ แแแฅแกแแแแแฃแ แ แคแแกแ แฌแฃแแจแ.
- แแแแแแ โ แแแแแแแแฃแ แ แคแแกแ โ แแแแแแแแฃแ แ แคแแกแ แฌแฃแแจแ.
- แแแ แแแแ แคแแกแ โ แแแ แแแแ แคแแกแ โ แแแ แแแแ แคแแกแ แฌแฃแแจแ.
- lastPrice โ แแแแ แคแแกแ โ แแแแ แคแแกแ แฌแฃแแจแ.
- firstSize โ แแแ แแแแ แแแแ โ แแแ แแแแ แแแญแ แแแแก แแแแ แฌแฃแแจแ.
- lastSize - แแแแ แแแแ - แแแแ แแแญแ แแแแก แแแแ แฌแฃแแจแ.
- numTrades โ count i โ แแแ แแแแแแแแก แ แแแแแแแแ แฌแฃแแจแ.
- แแแชแฃแแแแ โ แฏแแแแก แแแแ โ แแแญแ แแแแก แแแแแก แฏแแแ แฌแฃแแจแ.
- pvolume โ แฏแแแแก แคแแกแ โ แคแแกแแแแก แฏแแแ แฌแฃแแจแ, แกแแญแแ แแ avgPrice-แกแแแแก.
- โ แฏแแแฃแ แ แแ แฃแแแแก แคแแกแ*แแแแ โ แขแ แแแแแฅแชแแแแแก แฏแแแฃแ แ แแแชแฃแแแแ แฌแฃแแจแ.
- avgPrice โ pvolume%numTrades โ แกแแจแฃแแแ แคแแกแ แฌแฃแแจแ.
- avgSize โ แแแชแฃแแแแ%numTrades โ แแแญแ แแแแก แกแแจแฃแแแ แแแแ แฌแฃแแจแ.
- vwap โ แแ แฃแแแ%แแแชแฃแแแแ โ แกแแจแฃแแแ แคแแกแ แฌแฃแแจแ แขแ แแแแแฅแชแแแก แแแแแก แแแฎแแแแแ.
- cumVolume โ แฏแแแแก แแแชแฃแแแแ โ แขแ แแแแแฅแชแแแแแก แแแแ แแแแแ แแแแ แแแแแ แแ แแแก แแแแแแแแแแแจแ.
แแแแแ แแแฃแงแแแแแแแแ แแแแแแฎแแแแ แแ แแ แแ แแแจแแแ แ แแฃแแฅแขแ - แ แแแแ แแแแแฎแแแแแ แแ แกแแแขแแแแก แแแแชแแแแแแแชแแ แแแ แแแแแ แแ แงแแแแแ แแแแแแแแ แฌแฃแแแกแแแแก. แแแ แแแแPrice แขแแแแก แแแแแแ แแ แกแแแขแ แงแแแแ แฏแแ แแ แฃแแแ แแงแแก แแแแชแแแแแแแแฃแแ แแฃแแแแแ; แแแแ แแแแจแแแแแแแ แแแแฃแกแแแฆแแ แแแแ. แแแชแฃแแแแแก แกแฎแแ แขแแแแแ แงแแแแแแแแก แฃแแแ แแงแแก 0-แแ. แแกแแแ แแ แแก แกแแแขแแแ, แ แแแแแแแช แกแแญแแ แแแแแ แแแแแแแแ แแแฃแ แแแแแแแแก - แแแแแแแแแ, cumVolume แฃแแแ แแแแแแแ แแแก แฌแแแ แฌแฃแแแแแ, แฎแแแ แแแ แแแแแกแแแแก แแแแงแแแแ 0-แแ. แแแแแ แแแแแงแแแแ แงแแแแ แแก แแแ แแแแขแ แ แแแฅแกแแแแแแก แแแแแชแแแแแแก แแแแแงแแแแแแ. แขแแแ (แฉแแแแฌแแ แแก แแแแแแแ):
// list ! list โ ัะพะทะดะฐัั ัะปะพะฒะฐัั, 0n โ float null, 0N โ long null, `sym โ ัะธะฟ ัะธะผะฒะพะป, `sym1`sym2 โ ัะฟะธัะพะบ ัะธะผะฒะพะปะพะฒ
initWith:`sym`time`high`low`firstPrice`lastPrice`firstSize`lastSize`numTrades`volume`pvolume`turnover`avgPrice`avgSize`vwap`cumVolume!(`;00:00;0n;0n;0n;0n;0N;0N;0;0;0.0;0.0;0n;0n;0n;0);
aggCols:reverse key[initWith] except `sym`time; // ัะฟะธัะพะบ ะฒัะตั
ะฒััะธัะปัะตะผัั
ะบะพะปะพะฝะพะบ, reverse ะพะฑัััะฝะตะฝ ะฝะธะถะต
แแแฎแแ แฎแแแฃแแแแแกแแแแก แแแฅแกแแแแแก แแแแแแแขแ sym แแ แแ แ, แแฎแแ initWith แแ แแก แแแ แกแขแ แแฅแแแ แกแแแแแแ แแแ แแแแ แแแฃแแ แชแฎแ แแแแแแ, แกแแแแช แ แฉแแแ แกแฌแแ แ แกแแแแแแแก แแ แแ แแแก แแแงแแแแแ. แแฅแแแ แจแแแแซแแแแ แแแแแแงแแแแ แแแ แชแฎแ แแแจแ แแฎแแแ แกแขแ แแฅแแแแแแก แแแกแแแแขแแแแแ.
แแแ แแแแชแแแก แคแฃแแฅแชแแแก แจแแฅแแแแกแแก แแแแแญแแ แแแแ aggCols. แกแแ แฃแแแ แแงแแก แจแแแ แฃแแแแฃแแ Q-แจแ แแแแแกแแฎแฃแแแแแแแก แจแแคแแกแแแแก แแแแแแแแแแ แแแแก แแแแ (แแแ แฏแแแแแแ แแแ แชแฎแแแ). แแแแแแแ แฃแแ แฃแแแแแงแแก, แ แแ แแแแแแแ แแจแแแ แแแแแแแแแก แแแฆแแแแแแ cumVolume-แแแ, แ แแแแแ แแแแแแ แแ แกแแแขแ แแแแแแแแแแฃแแแ แฌแแแ แกแแแขแแแแ.
แกแแแขแแแ, แ แแแแแแแช แฃแแแ แแแแแแแ แแแก แฌแแแ แฌแฃแแจแ แแฎแแ แฌแฃแแจแ, แแแฎแแ แฎแแแฃแแแแแกแแแแก แแแแขแแแ sym แกแแแขแ:
rollColumns:`sym`cumVolume;
แแฎแแ แแแแแ แแแแงแแ แกแแแขแแแ แฏแแฃแคแแแแ แแแแก แแแฎแแแแแ, แแฃ แ แแแแ แฃแแแ แแแแแฎแแแแก. แจแแแซแแแแ แแแแแแกแฎแแแแแ แกแแแ แขแแแ:
- แแแฃแแฃแแแขแแ แแแ (แแแชแฃแแแแ, แแ แฃแแแ,..) โ แจแแแแแแแแแ แแแแจแแแแแแแ แฃแแแ แแแแฃแแแขแแ แฌแแแแก.
- แกแแแชแแแแฃแ แ แฌแแ แขแแแแ (แแแฆแแแ, แแแแแแ, ..) โ แฌแฃแแจแ แแแ แแแแ แแแแจแแแแแแแ แแฆแแแฃแแแ แจแแแแกแฃแแ แแแแแชแแแแแแแแ, แแแแแ แฉแแแ แแแแแแแแแแแ แคแฃแแฅแชแแแก แแแแแงแแแแแแ.
- แแแแกแแแแ. แงแแแแแแแแก แแแแแแแแแแแ แคแฃแแฅแชแแแก แแแแแงแแแแแแ.
แแแแแ แแแแแกแแแฆแแ แแ แชแแแแแแแ แแ แแแแกแแแแกแแแแก:
accumulatorCols:`numTrades`volume`pvolume`turnover;
specialCols:`high`low`firstPrice`firstSize;
แแแแแแแ แแจแแแแก แแ แซแแแแแ
แฉแแแ แแแแแแแฎแแแแ แกแแแ แแ แชแฎแ แแแก แแ แแขแแแแ. แแคแแฅแขแฃแ แแแแกแแแแก, แฉแแแ แฏแแ แจแแแแแชแแ แแแ แจแแแแแแแแ แชแฎแ แแแก แแกแ, แ แแ แแแแแแฃแ แกแแแแแแแกแ แแ แฌแฃแแจแ แแงแแก แแฎแแแแ แแ แแ แแฌแแ แแแ. แแก แคแแฅแขแ, แ แแ แฉแแแแ แงแแแแ แคแฃแแฅแชแแ แแ แแก แแแแแขแแแแแ แแ แแกแแชแแแชแแฃแ แ, แแแ แแแขแแแก แแซแแแแ, แ แแ แแ แแแแแขแแแแแ แแแแแฏแแก แจแแแแแ แแ แจแแแชแแแแแ. แชแฎแ แแแแก แจแแแชแแ แแแ แจแแแแซแแแแ แจแแ แฉแแแแก แแแแแงแแแแแแ:
select high:max price, low:min price โฆ by sym,time.minute from table
แแ แแแแแแก แแฅแแก แแแแฃแกแ - แแแแแแแแแแ แกแแแขแแแแก แแแแ แแแ แฌแแแแกแฌแแ แแ แแก แแแแกแแแฆแแ แฃแแ. แกแแแแแแแแ แแ, Q-แจแ select แแกแแแ แแแแฎแแ แชแแแแแแฃแแแ แ แแแแ แช แคแฃแแฅแชแแ, แกแแแแช แจแแแแซแแแแ แฉแแแแแชแแแแ แแแแแแแฃแ แแ แจแแฅแแแแแ แแ แแฃแแแแขแแแ:
?[table;whereClause;byClause;selectClause]
แแ แแฃแแแแขแแแแก แคแแ แแแขแก แแแขแแแฃแ แแ แแ แแฆแแฌแแ , แฉแแแแก แจแแแแฎแแแแแจแ แแฎแแแแ แแแแแแแแฅแแแแแแ by แแ select แแฅแแแแ แแ แแขแ แแแแแแฃแ แ แแ แแกแแแ แฃแแแ แแงแแก แคแแ แแแก แกแแแขแแแแก!แแแแแแแแฅแแแแแแแก แแแฅแกแแแแแแแ. แแแ แแแแ, แจแแแชแแ แแแแก แคแฃแแฅแชแแ แจแแแซแแแแ แแแแแกแแแฆแแ แแก แจแแแแแแแแแ แแ:
selExpression:`high`low`firstPrice`lastPrice`firstSize`lastSize`numTrades`volume`pvolume`turnover!parse each ("max price";"min price";"first price";"last price";"first size";"last size";"count i";"sum size";"sum price";"sum price*size"); // each ััะพ ััะฝะบัะธั map ะฒ Q ะดะปั ะพะดะฝะพะณะพ ัะฟะธัะบะฐ
preprocess:?[;();`sym`time!`sym`time.minute;selExpression];
แกแแชแฎแแแแกแแแแก แแ แแแแแแแงแแแ แแแ แฉแแแแก แคแฃแแฅแชแแ, แ แแแแแแช แแฅแชแแแก Q แแแแแกแแฎแฃแแแแแ แกแขแ แแฅแแแก แแแแจแแแแแแแแ, แ แแแแแแช แจแแแซแแแแ แแแแแแชแแก eval แคแฃแแฅแชแแแก แแ แ แแแแแแช แกแแญแแ แแ แคแฃแแฅแชแแแก แจแแ แฉแแแแจแ. แแกแแแ แแแแแแแแแกแฌแแแแ, แ แแ แฌแแแแกแฌแแ แ แแ แแชแแกแ แแแแแกแแแฆแแ แแแ, แ แแแแ แช แแ แแแฅแชแแ (แแแฃ แคแฃแแฅแชแแ แแแฌแแแแแ แแ แแแแกแแแฆแแ แฃแแ แแ แแฃแแแแขแแแแ) แจแแ แฉแแฃแแ แคแฃแแฅแชแแแก, แแ แแ แแ แแฃแแแแขแ (แชแฎแ แแแ) แแแแแ. แแฃ แชแฎแ แแแแ แแแแแแแงแแแแแ แฌแแแแกแฌแแ แแ แแชแแกแก, แแแแแฆแแแ แจแแแฃแแจแฃแ แชแฎแ แแแก.
แแแแ แ แแขแแแ แแ แแก แแแ แแแแ แแแฃแแ แชแฎแ แแแแก แแแแแฎแแแแ. แแแแแ, แฏแแ แแแแฌแแ แแ แแแแแ แแแแ แคแกแแแแแแแแจแ:
for each sym in inputTable
idx: row index in agg table for sym+currentTime;
aggTable[idx;`high]: aggTable[idx;`high] | inputTable[sym;`high];
aggTable[idx;`volume]: aggTable[idx;`volume] + inputTable[sym;`volume];
โฆ
Q-แจแ แฎแจแแ แแ แ แฃแแแก/แจแแแชแแ แแแแก แคแฃแแฅแชแแแแแก แแแแแงแแแแแ แแแ แงแฃแแแแแก แแแชแแแแ. แแแแ แแ แ แแแแแ Q แแ แแก แแแฅแขแแ แฃแแ แแแ แแ แฉแแแ แจแแแแแซแแแ แแแ แขแแแแ แแแแแแแงแแแแ แงแแแแ แแแแ แแชแแ แแ แแแ แแฃแแแ แงแแแแ แกแแแแแแแแ, แแแจแแ แแแ แแแแ แแแแฎแแแแแ แจแแแแแซแแแ แแแแแแแแแ แแแ แงแฃแแแก แแแ แแจแ, แแแแ แแชแแแแแก แจแแกแ แฃแแแแ แงแแแแ แกแแแแแแแแ แแ แแแ แแฃแแแ:
idx:calcIdx inputTable;
row:aggTable idx;
aggTable[idx;`high]: row[`high] | inputTable`high;
aggTable[idx;`volume]: row[`volume] + inputTable`volume;
โฆ
แแแแ แแ แฉแแแ แจแแแแแซแแแ แฃแคแ แ แจแแ แก แฌแแแแแแ, Q-แก แแฅแแก แฃแแแแแแฃแ แ แแ แฃแแแแฃแ แแกแแ แซแแแแ แ แแแแ แแขแแ แ - แแแแแแแแแแแฃแแ แแแแแแแแแก แแแแ แแขแแ แ. แแก แกแแจแฃแแแแแแก แแแซแแแแ แจแแชแแแแแ แแแแจแแแแแแแแแแก แแแแ แแแ แแแแแชแแแแ แแแแแแแฅแกแฃแ แกแขแ แฃแฅแขแฃแ แแจแ แแแแแฅแกแแแแก, แคแฃแแฅแชแแแแแก แแ แแ แแฃแแแแขแแแแก แกแแแก แแแแแงแแแแแแ. แฉแแแแก แจแแแแฎแแแแแจแ แแก แแกแ แแแแแแงแฃแ แแแ:
idx:calcIdx inputTable;
rows:aggTable idx;
// .[target;(idx0;idx1;..);function;argument] ~ target[idx 0;idx 1;โฆ]: function[target[idx 0;idx 1;โฆ];argument], ะฒ ะฝะฐัะตะผ ัะปััะฐะต ััะฝะบัะธั โ ััะพ ะฟัะธัะฒะฐะธะฒะฐะฝะธะต
.[aggTable;(idx;aggCols);:;flip (row[`high] | inputTable`high;row[`volume] + inputTable`volume;โฆ)];
แกแแแฌแฃแฎแแ แแ, แชแฎแ แแแแกแแแแก แแแแแญแแแแกแแแแก แกแแญแแ แแ แกแขแ แแฅแแแแแแก แกแแ แแ แแ แ แกแแแขแแแ แแ แแฅแแแ แฃแแแ แแแแแแขแแแแ แแแขแ แแชแ (แกแแแขแแแแก แกแแ แแฌแแ แแแแแแก แกแแแจแ) Flip แคแฃแแฅแชแแแก แแแแแงแแแแแแ. แแก แซแแแ แแ แแแแ แชแฎแ แแแแกแแแแก, แแแแขแแ แฉแแแ แแแงแแแแแ แแแแแแแแแแแฃแ แแแแแแแแแก แแแแแแฃแ แกแแแขแแ แชแแ-แชแแแแ แ แฃแแแก แคแฃแแฅแชแแแก แแแแแงแแแแแแ (แ แแแแแแช แแแแกแขแ แแคแก แฐแแแแก):
.[aggTable;;:;]'[(idx;)each aggCols; (row[`high] | inputTable`high;row[`volume] + inputTable`volume;โฆ)];
แฉแแแ แแแแแ แแแงแแแแแ แคแฃแแฅแชแแแก แแ แแแฅแชแแแก. แแกแแแ แแแแแแแแแกแฌแแแแ, แ แแ Q-แจแ แกแแแก แจแแฅแแแ แแกแแแ แคแฃแแฅแชแแแ แแ แจแแแแแซแแแ แแแก แแฃแฌแแแแ แงแแแแแ(map) แคแฃแแฅแชแแแก แแแแแงแแแแแแ แกแแแแแก แกแแแก แแแกแแฆแแแแ.
แแแแก แฃแแ แฃแแแแแกแแงแแคแแ, แ แแ แแแแแแแแแแ แกแแแขแแแแก แแแแ แแแ แแ แแ แแก แแแคแแฅแกแแ แแแฃแแ, แฉแแแ แจแแแฅแแแแ แแแแแฎแกแแแแแฃแ แแแแแแแแฅแแแแก แแแแแแแฃแ แแ. แแแแแ, แฏแแ แแแแแกแแแฆแแ แแ แคแฃแแฅแชแแแแ แแแแแแฃแแ แกแแแขแแก แแแแแกแแแแแแแแ, แแฌแแ แแแแก แแ inp แชแแแแแแแแก แแแแแงแแแแแแ แแแ แแแแ แแแฃแแ แแ แจแแงแแแแแแ แแแแแชแแแแแแก แแแแแแแแแกแแแแก:
aggExpression:`high`low`firstPrice`lastPrice`firstSize`lastSize`avgPrice`avgSize`vwap`cumVolume!
("row[`high]|inp`high";"row[`low]&inp`low";"row`firstPrice";"inp`lastPrice";"row`firstSize";"inp`lastSize";"pvolume%numTrades";"volume%numTrades";"turnover%volume";"row[`cumVolume]+inp`volume");
แแแแแแ แแ แกแแแขแ แแแแกแแแฃแแ แแแฃแแแ; แแแแ แแแ แแแแ แแแแจแแแแแแแ แแ แฃแแแ แแแแแแแแแแแก แคแฃแแฅแชแแแ. แฉแแแ แจแแแแแซแแแ แแแแแกแแแฆแแ แแ, แ แแ แแก แแแ แแแแแ แแฌแแ แแแแก [`numTrades] แกแแแขแแ - แแฃ แแก แจแแแชแแแก 0-แก, แแแจแแ แแแแจแแแแแแแ แแ แแก แแแ แแแแ. Q-แก แแฅแแก แแ แฉแแแแก แคแฃแแฅแชแแ - ?[Boolean list;list1;list2] - แ แแแแแแช แแ แฉแแแก แแแแจแแแแแแแแก 1 แแ 2 แกแแแแแ แแแ แแแ แแ แแฃแแแแขแจแ แแ แกแแแฃแแ แแแแแแแ แแแแแก แแแฎแแแแแ:
// high -> ?[isFirst;inp`high;row[`high]|inp`high]
// @ - ัะพะถะต ะพะฑะพะฑัะตะฝะฝะพะต ะฟัะธัะฒะฐะธะฒะฐะฝะธะต ะดะปั ัะปััะฐั ะบะพะณะดะฐ ะธะฝะดะตะบั ะฝะตะณะปัะฑะพะบะธะน
@[`aggExpression;specialCols;{[x;y]"?[isFirst;inp`",y,";",x,"]"};string specialCols];
แแฅ แแแแแแแซแแฎแ แแแแแแแแแแแฃแแ แแแแแแแแ แฉแแแ แคแฃแแฅแชแแแ (แแแแแฎแแขแแ แฎแแแฃแแ แแ แแแแขแแแจแ). แแก แแฆแแแก แแแแแแแแ แ แแแแจแแแแแแแแก (แแแ แแแแ แแ แแฃแแแแขแ) แแ แแแแแขแแแแ แแ แแฃแแแแขแก, แ แแแแแกแแช แแ แแแแแแชแแ แแ-4 แแแ แแแแขแ แจแ.
แแแแแ แชแแแแ แแแแแแแขแแ แแแขแแ แแแก แแแแแแแแแแ, แ แแแแแ แคแฃแแฅแชแแ แแแแแแแก แแแแแแ:
// volume -> row[`volume]+inp`volume
aggExpression[accumulatorCols]:{"row[`",x,"]+inp`",x } each string accumulatorCols;
แแก แแ แแก แฉแแแฃแแแแ แแแ แแแแแแแแ Q แกแขแแแแแ แขแแแแ, แแแแ แแ แแ แแ แแแ แแฃแแแ แแแซแแแ แแแแจแแแแแแแแแแก แฉแแแแแแแแแแก. แแ แแแแแก, แแแแแ แจแแแฅแแแแ แแแแแแ แ แคแฃแแฅแชแแ:
// ":",/:aggExprs ~ map[{":",x};aggExpr] => ":row[`high]|inp`high" ะฟัะธัะฒะพะธะผ ะฒััะธัะปะตะฝะฝะพะต ะทะฝะฐัะตะฝะธะต ะฟะตัะตะผะตะฝะฝะพะน, ะฟะพัะพะผั ััะพ ะฝะตะบะพัะพััะต ะบะพะปะพะฝะบะธ ะทะฐะฒะธััั ะพั ัะถะต ะฒััะธัะปะตะฝะฝัั
ะทะฝะฐัะตะฝะธะน
// string[cols],'exprs ~ map[,;string[cols];exprs] => "high:row[`high]|inp`high" ะทะฐะฒะตััะธะผ ัะพะทะดะฐะฝะธะต ะฟัะธัะฒะฐะธะฒะฐะฝะธั. ,โ ัะฐััะธััะพะฒัะฒะฐะตััั ะบะฐะบ map[concat]
// ";" sv exprs โ String from Vector (sv), ัะพะตะดะธะฝัะตั ัะฟะธัะพะบ ัััะพะบ ะฒััะฐะฒะปัั โ;โ ะฟะพััะตะดะธะฝะต
updateAgg:value "{[aggTable;idx;inp] row:aggTable idx; isFirst_0=row`numTrades; .[aggTable;;:;]'[(idx;)each aggCols;(",(";"sv string[aggCols],'":",/:aggExpression aggCols),")]}";
แแ แแแแแแแแฅแแแแแ แแ แแแแแแแฃแ แแ แแฅแแแ แคแฃแแฅแชแแแก แกแขแ แแฅแแแแแแ, แ แแแแแแช แจแแแชแแแก แแแแแ แแแชแแแฃแ แแแแแแแแฅแแแแก. แจแแแแแ แแกแ แแแแแแงแฃแ แแแ:
{[aggTable;idx;inp] rows:aggTable idx; isFirst_0=row`numTrades; .[aggTable;;:;]'[(idx;)each aggCols ;(cumVolume:row[`cumVolume]+inp`cumVolume;โฆ ; high:?[isFirst;inp`high;row[`high]|inp`high])]}
แกแแแขแแก แจแแคแแกแแแแก แแแแแแแแแแ แแแ แแแแแ แกแแฃแแแ, แ แแแแแ Q-แจแ แจแแคแแกแแแแก แแแแแแแแแแ แแแ แแ แแก แแแ แฏแแแแแแ แแแ แชแฎแแแ.
แแฎแแ แฉแแแ แแแแฅแแก แแ แ แซแแ แแแแแ แคแฃแแฅแชแแ, แ แแแแแแช แแฃแชแแแแแแแแ แแแแแแแแแแแกแแแแก, แฃแแ แแแแ แฃแแแ แแแแแแแขแแ แแชแแ แ แแแคแ แแกแขแ แฃแฅแขแฃแ แ แแ แกแแ แแแกแ แแแแ แแ แแก.
แกแแแแแแ แแแแแฏแแแ
แฉแแแ แแแแฅแแก แฌแแแแกแฌแแ แ แแแแฃแจแแแแแแก แแ แแแแแฎแแแแแก แคแฃแแฅแชแแแแ, แ แแแแแแแช แแกแ แฃแแแแก แงแแแแ แกแแแฃแจแแแก. แแแแ แแ แแแแแช แแฃแชแแแแแแแแ แฌแฃแแแแจแ แกแฌแแ แ แแแแแกแแแแก แฃแแ แฃแแแแแกแแงแแคแแ แแ แแแ แแแแชแแแก แแแแแฅแกแแแแก แแแแแแแแ. แฃแแแ แแแแแก แงแแแแแกแ, แแแแแ แแแแแกแแแฆแแ แแ init แคแฃแแฅแชแแ:
init:{
tradeAgg:: 0#enlist[initWith]; // ัะพะทะดะฐะตะผ ะฟััััั ัะธะฟะธะทะธัะพะฒะฐะฝะฝัั ัะฐะฑะปะธัั, enlist ะฟัะตะฒัะฐัะฐะตั ัะปะพะฒะฐัั ะฒ ัะฐะฑะปะธัั, ะฐ 0# ะพะทะฝะฐัะฐะตั ะฒะทััั 0 ัะปะตะผะตะฝัะพะฒ ะธะท ะฝะตะต
currTime::00:00; // ะฝะฐัะฝะตะผ ั 0, :: ะพะทะฝะฐัะฐะตั, ััะพ ะฟัะธัะฒะฐะธะฒะฐะฝะธะต ะฒ ะณะปะพะฑะฐะปัะฝัั ะฟะตัะตะผะตะฝะฝัั
currSyms::`u#`symbol$(); // `u# - ะฟัะตะฒัะฐัะฐะตั ัะฟะธัะพะบ ะฒ ะดะตัะตะฒะพ, ะดะปั ััะบะพัะตะฝะธั ะฟะพะธัะบะฐ ัะปะตะผะตะฝัะพะฒ
offset::0; // ะธะฝะดะตะบั ะฒ tradeAgg, ะณะดะต ะฝะฐัะธะฝะฐะตััั ัะตะบััะฐั ะผะธะฝััะฐ
rollCache:: `sym xkey update `u#sym from rollColumns#tradeAgg; // ะบัั ะดะปั ะฟะพัะปะตะดะฝะธั
ะทะฝะฐัะตะฝะธะน roll ะบะพะปะพะฝะพะบ, ัะฐะฑะปะธัะฐ ั ะบะปััะพะผ sym
}
แฉแแแ แแกแแแ แแแแแกแแแฆแแ แแแ แ แแแแก แคแฃแแฅแชแแแก, แ แแแแแแช แจแแชแแแแก แแแแแแแแ แ แฌแฃแแก:
roll:{[tm]
if[currTime>tm; :init[]]; // ะตัะปะธ ะฟะตัะตะฒะฐะปะธะปะธ ะทะฐ ะฟะพะปะฝะพัั, ัะพ ะฟัะพััะพ ะฒัะทะพะฒะตะผ init
rollCache,::offset _ rollColumns#tradeAgg; // ะพะฑะฝะพะฒะธะผ ะบัั โ ะฒะทััั roll ะบะพะปะพะฝะบะธ ะธะท aggTable, ะพะฑัะตะทะฐัั, ะฒััะฐะฒะธัั ะฒ rollCache
offset::count tradeAgg;
currSyms::`u#`$();
}
แแฎแแแ แกแแแแแแแแแแก แแแกแแแแขแแแแแ แแแแแญแแ แแแแ แคแฃแแฅแชแแ:
addSyms:{[syms]
currSyms,::syms; // ะดะพะฑะฐะฒะธะผ ะฒ ัะฟะธัะพะบ ะธะทะฒะตััะฝัั
// ะดะพะฑะฐะฒะธะผ ะฒ ัะฐะฑะปะธัั sym, time ะธ rollColumns ะฒะพัะฟะพะปัะทะพะฒะฐะฒัะธัั ะพะฑะพะฑัะตะฝะฝัะผ ะฟัะธัะฒะฐะธะฒะฐะฝะธะตะผ.
// ะคัะฝะบัะธั ^ ะฟะพะดััะฐะฒะปัะตั ะทะฝะฐัะตะฝะธั ะฟะพ ัะผะพะปัะฐะฝะธั ะดะปั roll ะบะพะปะพะฝะพะบ, ะตัะปะธ ัะธะผะฒะพะปะฐ ะฝะตั ะฒ ะบััะต. value flip table ะฒะพะทะฒัะฐัะฐะตั ัะฟะธัะพะบ ะบะพะปะพะฝะพะบ ะฒ ัะฐะฑะปะธัะต.
`tradeAgg upsert @[count[syms]#enlist initWith;`sym`time,cols rc;:;(syms;currTime), (initWith cols rc)^value flip rc:rollCache ([] sym: syms)];
}
แแ แแแแแก, upd แคแฃแแฅแชแแ (แแ แคแฃแแฅแชแแแก แขแ แแแแชแแฃแแ แกแแฎแแแ Q แกแแ แแแกแแแแกแแแแก), แ แแแแแกแแช แแแแแแขแ แฃแฌแแแแแก แแแแแชแแแแแแก แแแกแแแแขแแแแแ:
upd:{[tblName;data] // tblName ะฝะฐะผ ะฝะต ะฝัะถะฝะพ, ะฝะพ ะพะฑััะฝะพ ัะตัะฒะธั ะพะฑัะฐะฑะฐััะฒะฐะตั ะฝะตัะบะพะปัะบะพ ัะฐะฑะปะธั
tm:exec distinct time from data:() xkey preprocess data; // preprocess & calc time
updMinute[data] each tm; // ะดะพะฑะฐะฒะธะผ ะดะฐะฝะฝัะต ะดะปั ะบะฐะถะดะพะน ะผะธะฝััั
};
updMinute:{[data;tm]
if[tm<>currTime; roll tm; currTime::tm]; // ะฟะพะผะตะฝัะตะผ ะผะธะฝััั, ะตัะปะธ ะฝะตะพะฑั
ะพะดะธะผะพ
data:select from data where time=tm; // ัะธะปัััะฐัะธั
if[count msyms:syms where not (syms:data`sym)in currSyms; addSyms msyms]; // ะฝะพะฒัะต ัะธะผะฒะพะปั
updateAgg[`tradeAgg;offset+currSyms?syms;data]; // ะพะฑะฝะพะฒะธะผ ะฐะณัะตะณะธัะพะฒะฐะฝะฝัั ัะฐะฑะปะธัั. ะคัะฝะบัะธั ? ะธัะตั ะธะฝะดะตะบั ัะปะตะผะตะฝัะพะฒ ัะฟะธัะบะฐ ัะฟัะฐะฒะฐ ะฒ ัะฟะธัะบะต ัะปะตะฒะฐ.
};
แฒกแฃแ แแก แแ แแก. แแฅ แแ แแก แฉแแแแ แกแแ แแแกแแก แกแ แฃแแ แแแแ, แ แแแแ แช แแแแแ แแแ, แแฎแแแแ แ แแแแแแแแ แกแขแ แแฅแแแ:
initWith:`sym`time`high`low`firstPrice`lastPrice`firstSize`lastSize`numTrades`volume`pvolume`turnover`avgPrice`avgSize`vwap`cumVolume!(`;00:00;0n;0n;0n;0n;0N;0N;0;0;0.0;0.0;0n;0n;0n;0);
aggCols:reverse key[initWith] except `sym`time;
rollColumns:`sym`cumVolume;
accumulatorCols:`numTrades`volume`pvolume`turnover;
specialCols:`high`low`firstPrice`firstSize;
selExpression:`high`low`firstPrice`lastPrice`firstSize`lastSize`numTrades`volume`pvolume`turnover!parse each ("max price";"min price";"first price";"last price";"first size";"last size";"count i";"sum size";"sum price";"sum price*size");
preprocess:?[;();`sym`time!`sym`time.minute;selExpression];
aggExpression:`high`low`firstPrice`lastPrice`firstSize`lastSize`avgPrice`avgSize`vwap`cumVolume!("row[`high]|inp`high";"row[`low]&inp`low";"row`firstPrice";"inp`lastPrice";"row`firstSize";"inp`lastSize";"pvolume%numTrades";"volume%numTrades";"turnover%volume";"row[`cumVolume]+inp`volume");
@[`aggExpression;specialCols;{"?[isFirst;inp`",y,";",x,"]"};string specialCols];
aggExpression[accumulatorCols]:{"row[`",x,"]+inp`",x } each string accumulatorCols;
updateAgg:value "{[aggTable;idx;inp] row:aggTable idx; isFirst_0=row`numTrades; .[aggTable;;:;]'[(idx;)each aggCols;(",(";"sv string[aggCols],'":",/:aggExpression aggCols),")]}"; / '
init:{
tradeAgg::0#enlist[initWith];
currTime::00:00;
currSyms::`u#`symbol$();
offset::0;
rollCache:: `sym xkey update `u#sym from rollColumns#tradeAgg;
};
roll:{[tm]
if[currTime>tm; :init[]];
rollCache,::offset _ rollColumns#tradeAgg;
offset::count tradeAgg;
currSyms::`u#`$();
};
addSyms:{[syms]
currSyms,::syms;
`tradeAgg upsert @[count[syms]#enlist initWith;`sym`time,cols rc;:;(syms;currTime),(initWith cols rc)^value flip rc:rollCache ([] sym: syms)];
};
upd:{[tblName;data] updMinute[data] each exec distinct time from data:() xkey preprocess data};
updMinute:{[data;tm]
if[tm<>currTime; roll tm; currTime::tm];
data:select from data where time=tm;
if[count msyms:syms where not (syms:data`sym)in currSyms; addSyms msyms];
updateAgg[`tradeAgg;offset+currSyms?syms;data];
};
แขแแกแขแแ แแแ
แแแแแ แจแแแแแแฌแแแ แกแแ แแแกแแก แจแแกแ แฃแแแแ. แแแแกแแแแแก แแแแแ แแแแฃแจแแแ แแแ แชแแแแ แแ แแชแแกแจแ (แฉแแแแ แแแแ service.q แคแแแแจแ) แแ แแแแแแแซแแฎแแ init แคแฃแแฅแชแแ:
q service.q โp 5566
q)init[]
แกแฎแแ แแแแกแแแจแ แแแแฌแงแแ แแแแ แ Q แแ แแชแแกแ แแ แแแฃแแแแจแแ แแแ แแแ แแแแก:
h:hopen `:host:5566
h:hopen 5566 // ะตัะปะธ ะพะฑะฐ ะฝะฐ ะพะดะฝะพะผ ั
ะพััะต
แฏแแ แจแแแฅแแแแ แกแแแแแแแแแแก แกแแ - 10000 แชแแแ แแ แแแแแแแขแแ แคแฃแแฅแชแแ แจแแแแฎแแแแแแ แชแฎแ แแแแก แจแแกแแฅแแแแแแ. แแแแ แ แแแแกแแแจแ:
syms:`IBM`AAPL`GOOG,-9997?`8
rnd:{[n;t] ([] sym:n?syms; time:t+asc n#til 25; price:n?10f; size:n?10)}
แกแแแก แแแแแแแขแ แกแแแ แ แแแแฃแ แ แกแแแแแแ, แ แแแ แแแแแแแแแแก แแแแ แซแแแแ แชแฎแ แแแจแ. rnd แคแฃแแฅแชแแ แฅแแแแก แจแแแแฎแแแแแ แชแฎแ แแแก n แแฌแแ แแแแ, แกแแแแช แแ แ แแแ แงแแแแก t-แแแ t+25 แแแแแฌแแแแแแ.
แแฎแแ แจแแแแซแแแแ แกแชแแแแ แแแแแชแแแแแแก แแแแแแแแ แกแแ แแแกแจแ (แแแแแแขแแ แแแ แแแแ แแแ แกแแแแ):
{h (`upd;`trade;rnd[10000;x])} each `time$00:00 + til 60*10
แจแแแแซแแแแ แกแแ แแแกแจแ แจแแแแแฌแแแ, แ แแ แชแฎแ แแแ แแแแแฎแแแแฃแแแ:
c 25 200
select from tradeAgg where sym=`AAPL
-20#select from tradeAgg where sym=`AAPL
แจแแแแแ:
sym|time|high|low|firstPrice|lastPrice|firstSize|lastSize|numTrades|volume|pvolume|turnover|avgPrice|avgSize|vwap|cumVolume
--|--|--|--|--|--------------------------------
AAPL|09:27|9.258904|9.258904|9.258904|9.258904|8|8|1|8|9.258904|74.07123|9.258904|8|9.258904|2888
AAPL|09:28|9.068162|9.068162|9.068162|9.068162|7|7|1|7|9.068162|63.47713|9.068162|7|9.068162|2895
AAPL|09:31|4.680449|0.2011121|1.620827|0.2011121|1|5|4|14|9.569556|36.84342|2.392389|3.5|2.631673|2909
AAPL|09:33|2.812535|2.812535|2.812535|2.812535|6|6|1|6|2.812535|16.87521|2.812535|6|2.812535|2915
AAPL|09:34|5.099025|5.099025|5.099025|5.099025|4|4|1|4|5.099025|20.3961|5.099025|4|5.099025|2919
แแแแแ แแฎแแ แฉแแแแขแแ แแ แแแขแแแ แแแแก แขแแกแขแแ แแแ, แ แแแ แแแแแ แแแแแ, แ แแแแแแ แแแแแชแแแแก แแแแฃแจแแแแแ แจแแฃแซแแแ แกแแ แแแกแก แฌแฃแแจแ. แจแแแแฎแกแแแแแ, แ แแ แแแแแฎแแแแแก แแแขแแ แแแแ แแแแแงแแแแ 25 แแแแแฌแแแแแแ. แจแแกแแแแแแกแแ, แกแแ แแแกแ (แกแแจแฃแแแแ) แฃแแแ แจแแแกแแแแแแแแแแก แแแแแแฃแ 20 แแแแแฌแแแจแ แแแแ แแแแแฎแแแแแแ, แ แแแ แแแแฎแแแ แแแแแแก แแแกแชแแก แแ แ, แแแแแฎแแแแ แแแแแชแแแแแ. แแแแ แ แแ แแชแแกแจแ แจแแแงแแแแแ แจแแแแแแ:
tm:10:00:00.000
stressTest:{[n] 1 string[tm]," "; times,::h ({st:.z.T; upd[`trade;x]; .z.T-st};rnd[n;tm]); tm+:25}
start:{[n] times::(); do[4800;stressTest[n]]; -1 " "; `min`avg`med`max!(min times;avg times;med times;max times)}
4800 แแ แแก แแ แ แฌแฃแแ. แจแแแแซแแแแ แกแชแแแแ แแแ แแแแ 1000 แแฌแแ แแแแก แแแจแแแแ แงแแแแ 25 แแแแแฌแแแจแ:
start 1000
แฉแแแก แจแแแแฎแแแแแจแ, แจแแแแแ แแ แแก แแแแฎแแแแแแ แ แแแแแแแแ แแแแแฌแแแ แแแแ แแแแแฎแแแแแแ. แแกแ แ แแ, แแ แแแฃแงแแแแแแแแ แแแแแ แแ แแฌแแ แแแแแแก แ แแแแแแแแแก 10.000-แแแ:
start 10000
แจแแแแแ:
min| 00:00:00.004
avg| 9.191458
med| 9f
max| 00:00:00.030
แแกแแ แแ แแกแแ, แแ แแคแแ แ แแแแกแแแฃแแ แแแฃแแ, แแแแ แแ แแก แแ แแก 24 แแแแแแแ แฎแแแ แฌแฃแแจแ, 400 แแแแกแ แฌแแแจแ. 25 แแแแแฌแแแแ แแแขแ แฎแแแก แแแแแแแแแแแจแ แแแแแฎแแแแ แแฎแแแแ 5-แฏแแ แจแแแแแแ, แ แแแแ แช แฉแแแก, แฌแฃแแ แจแแแชแแแแ. แแแแแ แแแแแแ แแแ 100.000-แแแ:
start 100000
แจแแแแแ:
min| 00:00:00.013
avg| 25.11083
med| 24f
max| 00:00:00.108
q)sum times
00:02:00.532
แ แแแแ แช แฎแแแแแ, แกแแ แแแกแ แซแแแแก แฃแแแแแแแแแ, แแแแ แแ แแแแแช แแฎแแ แฎแแแก แแแ แฉแแแแก. แแแแแชแแแแ แแกแแแ แแแชแฃแแแแ (แฌแฃแแจแ 240 แแแแแแแ แแฌแแ แแแ) แซแแแแแ แแแแแ; แแกแแ แจแแแแฎแแแแแแจแ แฉแแแฃแแแแ แแแแ แกแแ แแแกแแก แ แแแแแแแแ แแแแแแก (แแ แแฃแแแแช แแแแแแ แแแแแแก) แแแจแแแแ, แ แแแแแแแแแ แแแแแแฃแแ แแแฃแจแแแแแก แแแ แกแแแแแแแแก แแฎแแแแ แแแฌแแแก. แแ แแแแแช, แจแแแแแ แจแแแแแแญแแแแแ แแแขแแ แแ แแขแแชแแฃแแ แแแแกแแแแก, แ แแแแแแช แซแแ แแแแแแ แงแฃแ แแแฆแแแแก แแแแฎแแแแแแก แแแแแชแแแแ แจแแแแฎแแแแ.
แจแแแซแแแแ แแแฉแแแแก แแแแฎแแ, แ แแขแแ แแแ แแแแ แแ แ แแ แแฌแ แคแแแแ แแแแแแฃแแ แแแแแฎแแแแแก แแแแแ. แแแแแแ แแก แแ แแก, แ แแ shrink แคแฃแแฅแชแแ แ แแแแฃแ แแ แแ แแก C แคแฃแแฅแชแแ, แ แแแแแแช แแแแ แแ แฃแคแ แ แแคแแฅแขแฃแ แแ แแแแ แ updateAgg. แแแแแฎแแแแแก แแแ แแแแฃแแ แแแแแแแ แแแฌแงแแแฃแแ (แแแแฎแแแแแแ 10.000), updateAgg แแฆแฌแแแก แแแแแก แญแแ แก แแ แจแแแแแ แแแกแ แจแแกแ แฃแแแแแก แแ แ แแ แแ แแก แแแแแแแแแแฃแแ แแแแแฎแแแแแก แแแแแแ. แแก แแ แแก Q แฌแแแแกแฌแแ แ แแแแแฏแแก แแแแ, แ แแ แกแแ แแแกแก แจแแฃแซแแแ แแแแแชแแแแ แแกแแแ แแแชแฃแแแแแก แแแแฃแจแแแแแ. แแก แฎแแแก แฃแกแแแแก แแแแก, แแฃ แ แแแแแแแ แแแแจแแแแแแแแแแ แกแฌแแ แ แแแแแ แแแแแก แแ แฉแแแ แแแ แแแแแชแแแแแแแ แแฃแจแแแแแกแแก. แแแแแ แแ แแ แฌแแ แขแแแ แแ แแก แแแแแชแแแแ แกแฌแแ แแ แจแแแแฎแแ แแแฎแกแแแ แแแแจแ. แแฃ แแแแแชแแแแแ แแ แแฅแแแแแแ แจแแแแฎแฃแแ แกแแแขแฃแ แแ แแ แแ แแงแ แจแแแแแแแแ แแ แแแก แแแฎแแแแแ, แแแจแแ แฉแแแ แแแแแชแแแแ แแกแแ แ แแแแก, แ แแแแ แแชแแ TLB แฅแแจแแก แแแแแขแแแแแ - แแแฎแกแแแ แแแแก แแแแ แแแก แแแกแแแแ แแแก แแ แแ แกแแแแแ แแ แแชแแกแแ แแก แแแกแแแแ แแแแแก แฅแแจแจแ. แฌแแ แฃแแแขแแแแแแแก แจแแแแฎแแแแแจแ แแแกแแแแ แแแก แซแแแแแก แแแแฎแแแแแแ 30-แฏแแ แแแขแ แแ แ แกแญแแ แแแแ, แฎแแแ แแฃ แแแแแชแแแแแ แแแคแแแขแฃแแแ, แแแก แจแแฃแซแแแ แ แแแแแแฏแแ แแ แจแแแแแแแก แกแแ แแแกแ.
แแแกแแแแ
แแ แกแขแแขแแแจแ แแ แแแฉแแแแ, แ แแ KDB+ แแ Q แแแแแชแแแแ แแแแ แจแแกแแคแแ แแกแแ แแ แ แแฎแแแแ แแแแ แแแแแชแแแแแแก แจแแกแแแแฎแแ แแ แแแกแแ แฌแแแแแแกแแแแก แแ แฉแแแแก แกแแจแฃแแแแแแ, แแ แแแแ แแแแแชแแแแ แแแแฃแจแแแแแแก แกแแ แแแกแแแแก แจแแกแแฅแแแแแแ, แ แแแแแแกแแช แจแแฃแซแแแแ แแกแแแแ แแแแแแแ แกแขแ แแฅแแแ/แแแแแแแแขแ แแแแแชแแแแแแก แแแแฃแจแแแแแ. แแ แแ Q แแ แแชแแกแ. Q แแแ แแแแแกแแแแแ แแซแแแแ แแแแแชแแแแ แแแแฃแจแแแแแแกแแแ แแแแแแจแแ แแแฃแแ แแแแแ แแแแแแแก แฃแแแแฃแ แแกแแ แแแแแแฃแ แแ แแคแแฅแขแฃแ แแแแฎแแ แชแแแแแแแก แกแแจแฃแแแแแแก แแแกแ แแแฅแขแแ แฃแแ แแฃแแแแแก, แฉแแจแแแแแฃแแ SQL แแแแแแฅแขแฃแ แ แแแ แฏแแแแแแกแ แแ แแแแแแแแแแแก แคแฃแแฅแชแแแแแก แซแแแแแ แฌแแ แแแขแแแฃแแ แแแแ แแแแก แแแแ.
แแฆแแแแจแแแ, แ แแ แแแแแแฆแแแจแแฃแแ แแฎแแแแ แแแฌแแแแ แแแแกแ, แ แแกแ แแแแแแแแแช Q-แก แจแแฃแซแแแ, แแแก แแฅแแก แกแฎแแ แฃแแแแแแฃแ แ แแแแกแแแแแแช. แแแแแแแแแ, แฃแแแแฃแ แแกแแ แแแ แขแแแ IPC แแ แแขแแแแแ, แ แแแแแแช แจแแแก แกแแแฆแแ แแแก แชแแแแแฃแ Q แแ แแชแแกแแแก แจแแ แแก แแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแแจแแ แแ แแกแแแแ แแก แแ แแชแแกแ แแ แ แฅแกแแแจแ, แ แแแแแแช แจแแแซแแแแ แแแแแแแกแแแก แแแแแแ แกแแ แแแ แแ แแกแแคแแแแก แกแฎแแแแแกแฎแแ แแฃแแฎแแจแ.
แฌแงแแ แ: www.habr.com