ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠΈ Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ Q ΠΈ KDB+ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ Π½Π° услуга Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅

Π—Π° Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π΅ Π±Π°Π·Π°Ρ‚Π° Π½Π° KDB+, програмскиот јазик Q, ΠΊΠΎΠΈ сС Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ силни ΠΈ слаби страни, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ Π²ΠΎ ΠΌΠΎΠΈΡ‚Π΅ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈ Π§Π»Π΅Π½ ΠΈ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π²ΠΎ Π²ΠΎΠ²Π΅Π΄ΠΎΡ‚. Π’ΠΎ написот, ќС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ услуга Π½Π° Q ΡˆΡ‚ΠΎ ќС Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π° Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½ΠΈΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ ќС прСсмСтува Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡ˜Π° сСкоја ΠΌΠΈΠ½ΡƒΡ‚Π° Π²ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ β€žΠ²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅β€œ (Ρ‚.Π΅., ќС ΠΈΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° прСсмСта сè ΠΏΡ€Π΅Π΄ слСдниот Π΄Π΅Π» ΠΎΠ΄ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅). Π“Π»Π°Π²Π½Π°Ρ‚Π° карактСристика Π½Π° Q Π΅ Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π΅ вСкторски јазик кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π΅ со Π΅Π΄ΠΈΠ½Π΅Ρ‡Π½ΠΈ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ, Ρ‚ΡƒΠΊΡƒ со Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ Π½ΠΈΠ·ΠΈ, Π½ΠΈΠ·ΠΈ ΠΎΠ΄ Π½ΠΈΠ·ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ слоТСни ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ. ΠˆΠ°Π·ΠΈΡ†ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Q ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Ρ€ΠΎΠ΄Π½ΠΈΠ½ΠΈ K, J, APL сС ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ ΠΏΠΎ Π½ΠΈΠ²Π½Π°Ρ‚Π° краткост. ЧСстопати, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΡˆΡ‚ΠΎ Π·Π°Ρ„Π°ΡœΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΅ΠΊΡ€Π°Π½ΠΈ со ΠΊΠΎΠ΄ Π½Π° ΠΏΠΎΠ·Π½Π°Ρ‚ јазик ΠΊΠ°ΠΊΠΎ Java ΠΌΠΎΠΆΠ΅ Π΄Π° сС напишС Π½Π° Π½ΠΈΠ² Π²ΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π»ΠΈΠ½ΠΈΠΈ. Ова Π΅ ΠΎΠ½Π° ΡˆΡ‚ΠΎ сакам Π΄Π° Π³ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ Π²ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°.

ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠΈ Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ Q ΠΈ KDB+ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ Π½Π° услуга Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅

Π’ΠΎΠ²Π΅Π΄

KDB+ Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ фокусирана Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ Π½Π° спСцифичСн Π½Π°Ρ‡ΠΈΠ½ (првСнствСно спорСд Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ). Π‘Π΅ користи првСнствСно Π²ΠΎ финансиски институции - Π±Π°Π½ΠΊΠΈ, инвСстициски Ρ„ΠΎΠ½Π΄ΠΎΠ²ΠΈ, осигуритСлни ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠˆΠ°Π·ΠΈΠΊΠΎΡ‚ Q Π΅ Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½ΠΈΠΎΡ‚ јазик Π½Π° KDB+ кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ со ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π˜Π΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π°Ρ‚Π° Q Π΅ краткост ΠΈ Сфикасност, Π΄ΠΎΠ΄Π΅ΠΊΠ° Ρ˜Π°ΡΠ½ΠΎΡΡ‚Π° Π΅ ΠΆΡ€Ρ‚Π²ΡƒΠ²Π°Π½Π°. Ова сС ΠΎΠΏΡ€Π°Π²Π΄ΡƒΠ²Π° со Ρ„Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° вСкторскиот јазик Π²ΠΎ сСкој ΡΠ»ΡƒΡ‡Π°Ρ˜ ќС Π±ΠΈΠ΄Π΅ Ρ‚Π΅ΡˆΠΊΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π»ΠΈΠ², Π° краткоста ΠΈ богатството Π½Π° снимката Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π° Π΅Π΄Π΅Π½ Π΅ΠΊΡ€Π°Π½, ΡˆΡ‚ΠΎ Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π³ΠΎ олСснува Ρ€Π°Π·Π±ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ.

Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΏΡ€Π°Π²Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π²ΠΎ Q ΠΈ ΠΌΠΎΠΆΠ΅Π±ΠΈ ќС сакатС Π΄Π° ја испробатС. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, ќС Π²ΠΈ Ρ‚Ρ€Π΅Π±Π° вистинскиот Q. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ бСсплатната 32-Π±ΠΈΡ‚Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Π²Π΅Π±-страницата Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ˜Π°Ρ‚Π° kx - www.kx.com. Π’Π°ΠΌΡƒ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ стС заинтСрСсирани, ќС Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Q, ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° П Π—Π° смртници ΠΈ Ρ€Π°Π·Π½ΠΈ написи Π½Π° ΠΎΠ²Π°Π° Ρ‚Π΅ΠΌΠ°.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ изјава

ΠŸΠΎΡΡ‚ΠΎΠΈ ΠΈΠ·Π²ΠΎΡ€ кој ΠΈΡΠΏΡ€Π°ΡœΠ° Ρ‚Π°Π±Π΅Π»Π° со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° сСкои 25 милисСкунди. Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ KDB+ сС користи првСнствСно Π²ΠΎ финансиитС, ќС прСтпоставимС Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π΅ Ρ‚Π°Π±Π΅Π»Π° Π½Π° трансакции (Ρ‚Ρ€Π³ΠΎΠ²ΠΈΡ˜Π°), која Π³ΠΈ ΠΈΠΌΠ° слСднитС ΠΊΠΎΠ»ΠΎΠ½ΠΈ: Π²Ρ€Π΅ΠΌΠ΅ (Π²Ρ€Π΅ΠΌΠ΅ Π²ΠΎ милисСкунди), sym (ΠΎΠ·Π½Π°ΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π±Π΅Ρ€Π·Π°Ρ‚Π° - IBM,, AAPL,…), Ρ†Π΅Π½Π° (Ρ†Π΅Π½Π°Ρ‚Π° ΠΏΠΎ која сС ΠΊΡƒΠΏΠ΅Π½ΠΈ Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅), Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° (Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°). Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΡ‚ ΠΎΠ΄ 25 милисСкунди Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½, Π½Π΅ Π΅ ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Π» ΠΈ Π½Π΅ Π΅ ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ Π΄ΠΎΠ»Π³. НСговото присуство Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π΄ΠΎΠ°Ρ“Π°Π°Ρ‚ Π΄ΠΎ услугата вСќС Π±Π°Ρ„Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ. Π‘ΠΈ Π±ΠΈΠ»ΠΎ лСсно Π΄Π° сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° Ρ‚Π°ΠΌΠΏΠΎΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° сСрвисната страна, Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π±Π°Ρ„Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ Π²ΠΎ зависност ΠΎΠ΄ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΎΡ‚ΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅, Π½ΠΎ Π·Π° Сдноставност, ќС сС фокусирамС Π½Π° фиксСн ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π».

Услугата ΠΌΠΎΡ€Π° Π΄Π° Π±Ρ€ΠΎΠΈ сСкоја ΠΌΠΈΠ½ΡƒΡ‚Π° Π·Π° сСкој дојдовСн симбол ΠΎΠ΄ ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° sym Π·Π±ΠΈΡ€ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ - максимална Ρ†Π΅Π½Π°, просСчна Ρ†Π΅Π½Π°, Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° сума ΠΈΡ‚Π½. корисни ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π—Π° Сдноставност, ќС прСтпоставимС Π΄Π΅ΠΊΠ° ситС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС прСсмСтуваат постСпСно, Ρ‚.Π΅. Π·Π° Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅ Π½ΠΎΠ²Π° врСдност, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° сС Π·Π½Π°Π°Ρ‚ Π΄Π²Π° Π±Ρ€ΠΎΡ˜Π° - старитС ΠΈ Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½ΠΈΡ‚Π΅ врСдности. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ max, average, sum Π³ΠΎ ΠΈΠΌΠ°Π°Ρ‚ ΠΎΠ²Π° ΡΠ²ΠΎΡ˜ΡΡ‚Π²ΠΎ, Π½ΠΎ срСдната Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π½Π΅.

Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, ќС прСтпоставимС Π΄Π΅ΠΊΠ° Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΅ врСмСнски Π½Π°Ρ€Π΅Π΄Π΅Π½. Ова ќС Π½ΠΈ Π΄Π°Π΄Π΅ моТност Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅ само со послСдната ΠΌΠΈΠ½ΡƒΡ‚Π°. Π’ΠΎ пракса, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ со Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΌΠΈΠ½ΡƒΡ‚ΠΈ Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π΅ΠΊΠΎΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° Π΄Π° Π΄ΠΎΡ†Π½Π°Ρ‚. Π—Π° Сдноставност, Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ овој ΡΠ»ΡƒΡ‡Π°Ρ˜.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡ˜Π°

ΠŸΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡ˜Π° сС Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ. Π—Π΅Π΄ΠΎΠ² ΡˆΡ‚ΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ повСќС ΠΎΠ΄ Π½ΠΈΠ² Π·Π° Π΄Π° Π³ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΠ°ΠΌ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° услугата:

  • висока – максимална Ρ†Π΅Π½Π° – максимална Ρ†Π΅Π½Π° Π·Π° ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • ниска – ΠΌΠΈΠ½ Ρ†Π΅Π½Π° – ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° Ρ†Π΅Π½Π° Π·Π° ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • ΠΏΡ€Π²Π° Π¦Π΅Π½Π° – ΠΏΡ€Π²Π° Ρ†Π΅Π½Π° – ΠΏΡ€Π²Π° Ρ†Π΅Π½Π° Π·Π° ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • lastPrice – послСдна Ρ†Π΅Π½Π° – послСдна Ρ†Π΅Π½Π° Π·Π° ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • firstSize – ΠΏΡ€Π²Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° – ΠΏΡ€Π²Π° трговска Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • lastSize – послСдна Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° – послСдната Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° Ρ‚Ρ€Π³ΡƒΠ²Π°ΡšΠ΅ Π·Π° Π΅Π΄Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • numTrades – Π±Ρ€ΠΎΠΈ i – Π±Ρ€ΠΎΡ˜ Π½Π° Π·Π°Π½Π°Π΅Ρ‚ΠΈ Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • Π²ΠΎΠ»ΡƒΠΌΠ΅Π½ – Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° сума – Π·Π±ΠΈΡ€ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½ΠΈ Π½Π° Ρ‚Ρ€Π³ΠΎΠ²ΠΈΡ˜Π° Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • pvolume – сума Ρ†Π΅Π½Π° – Π·Π±ΠΈΡ€ Π½Π° Ρ†Π΅Π½ΠΈ Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π·Π° avgPrice.
  • – сума ΠΏΡ€ΠΎΠΌΠ΅Ρ‚ Ρ†Π΅Π½Π°*Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° – Π²ΠΊΡƒΠΏΠ΅Π½ ΠΎΠ±Π΅ΠΌ Π½Π° трансакции Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • avgPrice – pvolume%numTrades – просСчна Ρ†Π΅Π½Π° ΠΏΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • avgSize – Π²ΠΎΠ»ΡƒΠΌΠ΅Π½%numTrades – просСчна Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° Ρ‚Ρ€Π³ΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°.
  • vwap – ΠΏΡ€ΠΎΠΌΠ΅Ρ‚%Π²ΠΎΠ»ΡƒΠΌΠ΅Π½ – просСчна Ρ†Π΅Π½Π° Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π° ΠΏΠΎΠ½Π΄Π΅Ρ€ΠΈΡ€Π°Π½Π° спорСд Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°.
  • cumVolume – сума Π²ΠΎΠ»ΡƒΠΌΠ΅Π½ – Π°ΠΊΡƒΠΌΡƒΠ»ΠΈΡ€Π°Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° трансакции Π²ΠΎ Ρ‚Π΅ΠΊΠΎΡ‚ Π½Π° Ρ†Π΅Π»ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅.

АјдС вСднаш Π΄Π° Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°ΠΌΠ΅ Π·Π° Π΅Π΄Π½Π° Π½Π΅ΠΎΡ‡ΠΈΠ³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° - ΠΊΠ°ΠΊΠΎ Π΄Π° сС ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ ΠΎΠ²ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π·Π° ΠΏΡ€Π² ΠΏΠ°Ρ‚ ΠΈ Π·Π° сСкоја слСдна ΠΌΠΈΠ½ΡƒΡ‚Π°. НСкои ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΡ‚ firstPrice ΠΌΠΎΡ€Π° Π΄Π° сС ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ Π·Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ Π½ΡƒΠ»Π° сСкој ΠΏΠ°Ρ‚; Π½ΠΈΠ²Π½Π°Ρ‚Π° врСдност Π΅ Π½Π΅Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π°. Π”Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Ρ˜Π°Ρ‡ΠΈΠ½Π° ΠΌΠΎΡ€Π° сСкогаш Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ поставСни Π½Π° 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;

Π‘Π΅Π³Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅ Π²ΠΎ Π³Ρ€ΡƒΠΏΠΈ спорСд Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π°Ρ‚. МоТС Π΄Π° сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π°Π°Ρ‚ Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π°:

  1. Акумулатори (Π²ΠΎΠ»ΡƒΠΌΠ΅Π½, ΠΏΡ€ΠΎΠΌΠ΅Ρ‚,..) – ΠΌΠΎΡ€Π° Π΄Π° ја Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½Π°Ρ‚Π° врСдност Π½Π° ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½Π°Ρ‚Π°.
  2. Π‘ΠΎ посСбна Ρ‚ΠΎΡ‡ΠΊΠ° (висока, ниска, ..) – ΠΏΡ€Π²Π°Ρ‚Π° врСдност Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π° сС Π·Π΅ΠΌΠ° ΠΎΠ΄ Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π° останатитС сС прСсмСтуваат со помош Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°.
  3. ΠžΠ΄ΠΌΠΎΡ€. БСкогаш сС прСсмСтува со помош Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°.

АјдС Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° ΠΎΠ²ΠΈΠ΅ класи:

accumulatorCols:`numTrades`volume`pvolume`turnover;
specialCols:`high`low`firstPrice`firstSize;

РСдослСдот Π½Π° прСсмСтка

Π—Π±ΠΈΡ€Π½Π°Ρ‚Π° Ρ‚Π°Π±Π΅Π»Π° ќС ја Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Π²ΠΎ Π΄Π²Π΅ Ρ„Π°Π·ΠΈ. Π—Π° Сфикасност, ΠΏΡ€Π²ΠΎ ја Π½Π°ΠΌΠ°Π»ΡƒΠ²Π°ΠΌΠ΅ Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½Π°Ρ‚Π° Ρ‚Π°Π±Π΅Π»Π° Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ΠΈΠΌΠ° само Π΅Π΄Π΅Π½ Ρ€Π΅Π΄ Π·Π° сСкој Π·Π½Π°ΠΊ ΠΈ ΠΌΠΈΠ½ΡƒΡ‚Π°. Π€Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° ситС наши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сС ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΈ ΠΈ Π°ΡΠΎΡ†ΠΈΡ˜Π°Ρ‚ΠΈΠ²Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° Π΄Π΅ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ овој Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Ρ‡Π΅ΠΊΠΎΡ€ Π½Π΅ΠΌΠ° Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅:

select high:max price, low:min price … by sym,time.minute from table

Овој ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠΌΠ° нСдостаток - мноТСството прСсмСтани ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π΅ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ. Π—Π° ΡΡ€Π΅ΡœΠ°, Π²ΠΎ Q, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ исто Ρ‚Π°ΠΊΠ° сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ:

?[table;whereClause;byClause;selectClause]

НСма Π΄Π° Π³ΠΎ опишам Π΄Π΅Ρ‚Π°Π»Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΡ‚ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅; Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, само ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ со ΠΈ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ќС Π±ΠΈΠ΄Π°Ρ‚ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΡ˜Π°Π»Π½ΠΈ ΠΈ Ρ‚ΠΈΠ΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ Π½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ!ΠΈΠ·Ρ€Π°Π·ΠΈ. Π’Π°ΠΊΠ°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Π½Π° слСдниов Π½Π°Ρ‡ΠΈΠ½:

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;…)];

Π—Π° ΠΆΠ°Π», Π·Π° Π΄Π° Π΄ΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π±Π΅Π»Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π²ΠΈ Π΅ листа Π½Π° Ρ€Π΅Π΄ΠΎΠ²ΠΈ, Π° Π½Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΠΈ ΠΌΠΎΡ€Π° Π΄Π° ја ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΡ‚Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°Ρ‚Π° (список Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π²ΠΎ список со Ρ€Π΅Π΄ΠΎΠ²ΠΈ) ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΡ€Π΅Π²Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅. Ова Π΅ скапо Π·Π° Π³ΠΎΠ»Π΅ΠΌΠ° Ρ‚Π°Π±Π΅Π»Π°, ΠΏΠ° намСсто Ρ‚ΠΎΠ°, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π°ΠΌΠ΅ Π³Π΅Π½Π΅Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π·Π°Π΄Π°Ρ‡Π° Π·Π° сСкоја ΠΊΠΎΠ»ΠΎΠ½Π° посСбно, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΌΠ°ΠΏΠ° (која ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΊΠ°ΠΊΠΎ апостроф):

.[aggTable;;:;]'[(idx;)each aggCols; (row[`high] | inputTable`high;row[`volume] + inputTable`volume;…)];

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ користимС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΡ˜Π°. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, Π·Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° Π²ΠΎ Q, ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ листа Π΅ исто Ρ‚Π°ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја ΠΏΠΎΠ²ΠΈΠΊΠ°ΠΌΠ΅ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° every(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];

ОвдС ΠΏΠΎΠ²ΠΈΠΊΠ°Π² Π³Π΅Π½Π΅Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π·Π°Π΄Π°Ρ‡Π° со ΠΌΠΎΡ˜Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° (ΠΈΠ·Ρ€Π°Π· Π²ΠΎ ΠΊΠ°Π΄Ρ€Π°Π²ΠΈ Π·Π°Π³Ρ€Π°Π΄ΠΈ). Ја Π΄ΠΎΠ±ΠΈΠ²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½Π°Ρ‚Π° врСдност (ΠΏΡ€Π²ΠΈΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚) ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, кој Π³ΠΎ прСнСсувам Π²ΠΎ Ρ‡Π΅Ρ‚Π²Ρ€Ρ‚ΠΈΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€.

АјдС Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π·Π²ΡƒΡ‡Π½ΠΈΡ†ΠΈ Π·Π° Π±Π°Ρ‚Π΅Ρ€ΠΈΠΈ посСбно, бидСјќи Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π΅ иста Π·Π° Π½ΠΈΠ²:

// 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 рСдослСдот Π½Π° ΠΎΡ†Π΅Π½ΡƒΠ²Π°ΡšΠ΅ Π΅ ΠΎΠ΄ дСсно ΠΊΠΎΠ½ Π»Π΅Π²ΠΎ.

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ Π³Π»Π°Π²Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΈ Π·Π° прСсмСтки, само Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΌΠ°Π»ΠΊΡƒ инфраструктура ΠΈ услугата Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π°.

ПослСдни Ρ‡Π΅ΠΊΠΎΡ€ΠΈ

ИмамС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΏΡ€Π΅Ρ‚ΠΏΡ€ΠΎΡ†Π΅ΡΠΈΡ€Π°ΡšΠ΅ ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° Agg ΠΊΠΎΠΈ ја Π²Ρ€ΡˆΠ°Ρ‚ Ρ†Π΅Π»Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°. Но, сСпак Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½Π° Ρ‚Ρ€Π°Π½Π·ΠΈΡ†ΠΈΡ˜Π° Π½ΠΈΠ· ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΈ Π΄Π° сС прСсмСтаат индСкситС Π·Π° Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡ˜Π°. ΠŸΡ€Π΅Π΄ сè, Π΄Π° ја Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΈΠ½ΠΈΡ†ΠΈΡ€Π°ΡšΠ΅:

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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€