αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸƒαž—αžΆαžŸαžΆ 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 αžŸαŸ€αžœαž—αŸ…αž“αŸαŸ‡αŸ” Q αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž“αž»αžŸαŸ’αžŸαžŸαŸ’αž›αžΆαž”αŸ‹ αž“αž·αž„αž’αžαŸ’αžαž”αž‘αž•αŸ’αžŸαŸαž„αŸ—αž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸαŸ‡αŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž αžΆ

αž˜αžΆαž“αž”αŸ’αžšαž—αž–αžŠαŸ‚αž›αž•αŸ’αž‰αžΎαžαžΆαžšαžΆαž„αž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαŸ€αž„αžšαžΆαž›αŸ‹ 25 αž˜αžΈαž›αžΈαžœαž·αž“αžΆαž‘αžΈαŸ” αžŠαŸ„αž™αžŸαžΆαžš KDB+ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž…αž˜αŸ’αž”αž„αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž αž·αžšαž‰αŸ’αž‰αžœαžαŸ’αžαž» αž™αžΎαž„αž“αžΉαž„αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž“αŸαŸ‡αž‡αžΆαžαžΆαžšαžΆαž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš (αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜) αžŠαŸ‚αž›αž˜αžΆαž“αž‡αž½αžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ αž–αŸαž›αžœαŸαž›αžΆ (αž–αŸαž›αžœαŸαž›αžΆαž‚αž·αžαž‡αžΆαž˜αž·αž›αŸ’αž›αžΈαžœαž·αž“αžΆαž‘αžΈ) ស៊ីម (αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž“αŸ…αž›αžΎαž•αŸ’αžŸαžΆαžšαž αŸŠαž»αž“ - αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“ IBM, Apple αž”αžΆαž“,…), αžαž˜αŸ’αž›αŸƒ (αžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž—αžΆαž‚αž αŸŠαž»αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž·αž‰), αž‘αŸ†αž αŸ† (αž‘αŸ†αž αŸ†αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš) αŸ” αž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž› 25 αž˜αž·αž›αŸ’αž›αžΈαžœαž·αž“αžΆαž‘αžΈαž‚αžΊαžαžΆαž˜αž’αŸ†αž–αžΎαž…αž·αžαŸ’αž αž˜αž·αž“αžαžΌαž…αž–αŸαž€ αž“αž·αž„αž˜αž·αž“αž™αžΌαžšαž–αŸαž€αŸ” αžœαžαŸ’αžαž˜αžΆαž“αžšαž”αžŸαŸ‹αžœαžΆαž˜αžΆαž“αž“αŸαž™αžαžΆ αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž€αžŠαž›αŸ‹αžŸαŸαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαžΆαžšαžΆαŸ†αž„αžšαž½αž…αž αžΎαž™αŸ” αžœαžΆαž“αžΉαž„αž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž buffering αž“αŸ…αž›αžΎαž•αŸ’αž“αŸ‚αž€αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αžšαž½αž˜αž‘αžΆαŸ†αž„ dynamic buffering αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž”αž“αŸ’αž‘αž»αž€αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰ αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžαŸ„αžαž›αžΎαž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›αžαŸαžšαŸ”

αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžαŸ’αžšαžΌαžœαžαŸ‚αžšαžΆαž”αŸ‹αžšαžΆαž›αŸ‹αž“αžΆαž‘αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž…αžΌαž›αž“αžΈαž˜αž½αž™αŸ—αž–αžΈαž‡αž½αžš sym αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž˜αž»αžαž„αžΆαžšαžŸαžšαž»αž” - αžαž˜αŸ’αž›αŸƒαž’αžαž·αž”αžšαž˜αžΆ αžαž˜αŸ’αž›αŸƒαž‡αžΆαž˜αž’αŸ’αž™αž˜ αž‘αŸ†αž αŸ†αž”αžΌαž€αŸ”αž›αŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰ αž™αžΎαž„αž“αžΉαž„αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžŽαž“αžΆαž‡αžΆαž”αžŽαŸ’αžαžΎαžšαŸ— i.e. αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž˜αžΈ αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΉαž„αž…αŸ†αž“αž½αž“αž–αžΈαžš - αžαž˜αŸ’αž›αŸƒαž…αžΆαžŸαŸ‹ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž…αžΌαž›αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž’αž“αž»αž‚αž˜αž“αŸαž’αžαž·αž”αžšαž˜αžΆ αž˜αž’αŸ’αž™αž˜ αž•αž›αž”αžΌαž€αž˜αžΆαž“αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αž“αž»αž‚αž˜αž“αŸαž˜αž’αŸ’αž™αž˜αž˜αž·αž“αž˜αžΆαž“αž‘αŸαŸ”

αž™αžΎαž„β€‹αž€αŸβ€‹αž“αžΉαž„β€‹αžŸαž“αŸ’αž˜αžβ€‹αžαžΆβ€‹αž€αžΆαžšβ€‹αžŸαŸ’αž‘αŸ’αžšαžΈαž˜β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αž…αžΌαž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž‡αžΆβ€‹αžαžΆαž˜β€‹αž–αŸαž›β€‹αžœαŸαž›αžΆαŸ” αž“αŸαŸ‡αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœαž±αž€αžΆαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαžαŸ‚αž‡αžΆαž˜αž½αž™αž“αžΆαž‘αžΈαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž“αžΆαž‘αžΈαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž“αž·αž„αž˜αž»αž“ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαžαŸ’αž›αŸ‡αž™αžΊαžαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž–αž·αž…αžΆαžšαžŽαžΆαž€αžšαžŽαžΈαž“αŸαŸ‡αž‘αŸαŸ”

αž˜αž»αžαž„αžΆαžšαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†

αž˜αž»αžαž„αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαžΆαž™αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž™αž€αžœαžΆαž±αŸ’αž™αž”αžΆαž“αž…αŸ’αžšαžΎαž“αžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αž“αŸ’αž‘αž»αž€αž›αžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ–

  • αžαž˜αŸ’αž›αŸƒαžαŸ’αž–αžŸαŸ‹ - αžαž˜αŸ’αž›αŸƒαž’αžαž·αž”αžšαž˜αžΆ - αžαž˜αŸ’αž›αŸƒαž’αžαž·αž”αžšαž˜αžΆαž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • αžαž˜αŸ’αž›αŸƒαž‘αžΆαž” - αžαž˜αŸ’αž›αŸƒαž’αž”αŸ’αž”αž”αžšαž˜αžΆ - αžαž˜αŸ’αž›αŸƒαž’αž”αŸ’αž”αž”αžšαž˜αžΆαž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • FirstPrice - αžαž˜αŸ’αž›αŸƒαžŠαŸ†αž”αžΌαž„ - αžαž˜αŸ’αž›αŸƒαžŠαŸ†αž”αžΌαž„αž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • LastPrice - αžαž˜αŸ’αž›αŸƒαž…αž»αž„αž€αŸ’αžšαŸ„αž™ - αžαž˜αŸ’αž›αŸƒαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • αž‘αŸ†αž αŸ†αžŠαŸ†αž”αžΌαž„ - αž‘αŸ†αž αŸ†αžŠαŸ†αž”αžΌαž„ - αž‘αŸ†αž αŸ†αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αžŠαŸ†αž”αžΌαž„αž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • LastSize - αž‘αŸ†αž αŸ†αž…αž»αž„αž€αŸ’αžšαŸ„αž™ - αž‘αŸ†αž αŸ†αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • numTrades - αžšαžΆαž”αŸ‹ i - αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž‡αž½αž‰αžŠαžΌαžšαž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • αž”αžšαž·αž˜αžΆαžŽ - αž‘αŸ†αž αŸ†αžŸαžšαž»αž” - αž•αž›αž”αžΌαž€αž“αŸƒαž‘αŸ†αž αŸ†αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • pvolume – sum price – αž•αž›αž”αžΌαž€αž“αŸƒαžαž˜αŸ’αž›αŸƒαž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈ αž‘αžΆαž˜αž‘αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ avgPrice αŸ”
  • - αž•αž›αž”αžΌαž€αžαž˜αŸ’αž›αŸƒ * αž‘αŸ†αž αŸ† - αž”αžšαž·αž˜αžΆαžŽαžŸαžšαž»αž”αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • avgPrice – pvolume%numTrades – αžαž˜αŸ’αž›αŸƒαž‡αžΆαž˜αž’αŸ’αž™αž˜αž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • avgSize – volume%numTrades – αž‘αŸ†αž αŸ†αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αž‡αžΆαž˜αž’αŸ’αž™αž˜αž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαŸ”
  • vwap – turnover%volume – αžαž˜αŸ’αž›αŸƒαž‡αžΆαž˜αž’αŸ’αž™αž˜αž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈαž˜αžΆαž“αž‘αž˜αŸ’αž„αž“αŸ‹αžαžΆαž˜αž‘αŸ†αž αŸ†αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”
  • cumVolume - αž”αžšαž·αž˜αžΆαžŽαžŸαžšαž»αž” - αž‘αŸ†αž αŸ†αž”αž„αŸ’αž‚αžšαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž–αŸαž‰αž˜αž½αž™αž–αŸαž›αŸ”

αž…αžΌαžšαž™αžΎαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž—αŸ’αž›αžΆαž˜αŸ—αž“αžΌαžœαž…αŸ†αžŽαž»αž…αžŠαŸ‚αž›αž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž˜αž½αž™ - αžšαž”αŸ€αž”αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αž½αžšαžˆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„ αž“αž·αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžΆαž‘αžΈαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αžΈαž˜αž½αž™αŸ—αŸ” αž‡αž½αžšβ€‹αžˆαžšβ€‹αž˜αž½αž™β€‹αž…αŸ†αž“αž½αž“β€‹αž“αŸƒβ€‹αž”αŸ’αžšαž—αŸαž‘β€‹αžαž˜αŸ’αž›αŸƒβ€‹αžŠαŸ†αž”αžΌαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αžαŸ‚β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž‡αžΆβ€‹αž˜αŸ„αžƒαŸˆβ€‹αžšαžΆαž›αŸ‹β€‹αž–αŸαž›β€‹αžŠαŸ‚αž›β€‹αžαž˜αŸ’αž›αŸƒβ€‹αžšαž”αžŸαŸ‹β€‹αžœαžΆβ€‹αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž€αŸ†αžŽαžαŸ‹αŸ” αž”αŸ’αžšαž—αŸαž‘αž€αž˜αŸ’αžšαž·αžαžŸαŸ†αž‘αŸαž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαžαŸ‚αž€αŸ†αžŽαžαŸ‹αž‡αžΆ 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 αž‚αžΊαž‡αžΆαž”αž“αŸ’αž‘αžΆαžαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αž–αžΈαžαžΆαžšαžΆαž„αžŸαžšαž»αž”αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αžŠαŸ‚αž›αžœαžΆαž“αŸ…αžŸαž›αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹ sym αž“αž·αž„αž–αŸαž›αžœαŸαž›αžΆαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžαŸ’αž˜αžΈαž‘αŸ…αžαžΆαžšαžΆαž„αŸ”

αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš aggCols αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž˜αž»αžαž„αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αŸ” αž”αž‰αŸ’αž‡αžΈαžαŸ’αžšαžΌαžœαžαŸ‚αžŠαžΆαž€αŸ‹αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ‚αž›αž€αž“αŸ’αžŸαŸ„αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ Q αžαŸ’αžšαžΌαžœαž”αžΆαž“αžœαžΆαž™αžαž˜αŸ’αž›αŸƒ (αž–αžΈαžŸαŸ’αžαžΆαŸ†αž‘αŸ…αž†αŸ’αžœαŸαž„)αŸ” αž‚αŸ„αž›αžŠαŸ…αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆαž€αžΆαžšαž‚αžŽαž“αžΆαž–αžΈαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž‘αŸ… cumVolume αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž‡αž½αžšαžˆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž‡αž½αžšαž˜αž»αž“αŸ”

αž‡αž½αžšβ€‹αžˆαžšβ€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž…αž˜αŸ’αž›αž„β€‹αž‘αŸ…β€‹αž“αžΆαž‘αžΈβ€‹αžαŸ’αž˜αžΈβ€‹αž–αžΈβ€‹αž›αžΎαž€β€‹αž˜αž»αž“ αž‡αž½αžšβ€‹αžˆαžš sym αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ–

rollColumns:`sym`cumVolume;

αž₯αž‘αžΌαžœβ€‹αž™αžΎαž„β€‹αž…αŸ‚αž€β€‹αž‡αž½αžšβ€‹αžˆαžšβ€‹αž‡αžΆβ€‹αž€αŸ’αžšαž»αž˜β€‹αžαžΆαž˜β€‹αžšαž”αŸ€αž”β€‹αžŠαŸ‚αž›β€‹αž‚αŸβ€‹αž‚αž½αžšβ€‹αž’αŸ’αžœαžΎβ€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αŸ” αž”αžΈαž”αŸ’αžšαž—αŸαž‘αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹:

  1. Accumulators (volume, turnover,..) – αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αžαž˜αŸ’αž›αŸƒαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž›αŸαžαž˜αž»αž“αŸ”
  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 αž“αž·αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ” αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αž•αž„αžŠαŸ‚αžšαžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž»αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‡αžΆαž€αžΆαžšαž–αŸ’αž™αžΆαž€αžš (ឧ. αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž•αŸ’αž“αŸ‚αž€) αž“αŸƒαž’αž“αž»αž‚αž˜αž“αŸαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž˜αž½αž™ (αžαžΆαžšαžΆαž„) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΆαžαŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“β€‹αž”αžΎβ€‹αž™αžΎαž„β€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž˜αž»αž“β€‹αž‘αŸ…β€‹αžαžΆαžšαžΆαž„ αž™αžΎαž„β€‹αž“αžΉαž„β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αžαžΆαžšαžΆαž„β€‹αž”αž„αŸ’αž αžΆαž”αŸ‹αŸ”

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΈαž–αžΈαžšαž‚αžΊαž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžαžΆαžšαžΆαž„αžŸαžšαž»αž”αŸ” αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αžŸαžšαžŸαŸαžš algorithm αž€αŸ’αž“αž»αž„ pseudocodeαŸ–

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 αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž‡αžΈαž€αŸαž‡αžΆαž˜αž»αžαž„αžΆαžšαž˜αž½αž™αžŠαŸ‚αžš αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž αŸ…αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαž“αžΈαž˜αž½αž™αŸ— (αž•αŸ‚αž“αž‘αžΈ) αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΈαž”αž‰αŸ’αž‡αžΈαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αžŽαž“αžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž½αžŸαž‡αž»αž› αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž€αž“αŸ’αžŸαŸ„αž˜αžαžΆαž„αž›αžΎαžŠαŸ„αž™αžαžΆαž˜αžœαž“αŸ’αžαŸ” αžŠαŸ†αž”αžΌαž„β€‹αž™αžΎαž„β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž˜αž»αžαž„αžΆαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž‚αžŽαž“αžΆβ€‹αž‡αž½αžšβ€‹αžˆαžšβ€‹αž“αžΈαž˜αž½αž™αŸ— αžŠαŸ„αž™β€‹αž”αŸ’αžšαžΎβ€‹αž’αžαŸαžšβ€‹αž‡αž½αžšβ€‹αžŠαŸαž€ αž“αž·αž„β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž™αŸ„αž„β€‹αž‘αŸ…β€‹αž›αžΎβ€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αžŠαŸ‚αž›β€‹αžšαž½αž˜β€‹αž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„β€‹αž”αž‰αŸ’αž…αžΌαž›αŸ–

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 αž›αŸ†αžŠαžΆαž”αŸ‹β€‹αžœαžΆαž™β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž‚αžΊβ€‹αž–αžΈβ€‹αžŸαŸ’αžαžΆαŸ†β€‹αž‘αŸ…β€‹αž†αŸ’αžœαŸαž„αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžšαžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‚αžŽαž“αžΆ αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αž“αŸ’αžαž·αž…αž”αž“αŸ’αžαž½αž… αž αžΎαž™αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‚αžΊαžšαž½αž…αžšαžΆαž›αŸ‹αŸ”

αž‡αŸ†αž αžΆαž“αž…αž»αž„αž€αŸ’αžšαŸ„αž™

αž™αžΎαž„αž˜αžΆαž“αž˜αž»αžαž„αžΆαžš preprocess αž“αž·αž„ updateAgg αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž“αŸ…αžαŸ‚αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžαžΆαž˜αžšαž™αŸˆαž“αžΆαž‘αžΈ αž“αž·αž„αž‚αžŽαž“αžΆαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αŸ” αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž…αžΌαžšαž™αžΎαž„αž€αŸ†αžŽαžαŸ‹αž˜αž»αžαž„αžΆαžš 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 αž›αžΆαž“αž‡αž½αžšαž€αŸ’αž“αž»αž„αž˜αž½αž™αž“αžΆαž‘αžΈ) αž‚αžΊαž’αŸ†αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž”αŸ‚αž”αž“αŸαŸ‡ αžœαžΆαž‡αžΆαžšαžΏαž„αž’αž˜αŸ’αž˜αžαžΆαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž›αžΌαž“αž‡αžΆαž…αŸ’αžšαžΎαž“ (αž¬αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž€αŸ’αž›αžΌαž“αžšαžΆαž”αŸ‹αžŸαž·αž”) αž“αŸƒαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αžŠαŸ‚αž›αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ‚αž•αŸ’αž“αŸ‚αž€αž“αŸƒαžαž½αž’αž€αŸ’αžŸαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž›αž‘αŸ’αž’αž•αž›αž‚αžΊαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαžŸαžΆαžŠαŸ‚αž›αž”αžΆαž“αž”αž€αž”αŸ’αžšαŸ‚αžŠαŸ‚αž›αž•αŸ’αžαŸ„αžαž›αžΎαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž…αž˜αŸ’αž”αž„αŸ”

αžŸαŸ†αžŽαž½αžšαž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αžαžΆαž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž–αŸαž›αžœαŸαž›αžΆαž€αžΎαž“αž‘αžΎαž„αž˜αž·αž“αžŸαŸ’αž˜αžΎαž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αŸ†αž αŸ†αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ—αŸ” αž αŸαžαž»αž•αž›αž‚αžΊαžαžΆ αž˜αž»αžαž„αžΆαžšαžšαž½αž‰ αžαžΆαž˜αž–αž·αžαž‘αŸ…αž˜αž»αžαž„αžΆαžš C αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαž„ updateAgg αŸ” αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž‘αŸ†αž αŸ†αž’αžΆαž”αŸ‹αžŠαŸαžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ (αž”αŸ’αžšαž αŸ‚αž› 10.000) updateAgg αžˆαžΆαž“αžŠαž›αŸ‹αž–αž·αžŠαžΆαž“αžšαž”αžŸαŸ‹αžœαžΆ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αŸαž›αžœαŸαž›αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹αžœαžΆαž˜αž·αž“αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž‘αŸ†αž αŸ†αž’αžΆαž”αŸ‹αžŠαŸαžαž“αŸ„αŸ‡αž‘αŸαŸ” αžœαžΆαž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αžŸαžΆαžšαž‡αŸ†αž αžΆαž“αž”αž‹αž˜ Q αžŠαŸ‚αž›αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž’αžΆαž…αžšαŸ†αž›αžΆαž™αž”αžšαž·αž˜αžΆαžŽαž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αŸ” αž…αŸ†αžŽαž»αž…αž˜αž½αž™αž‘αŸ€αžαž‚αžΊαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‡αžΆαž‡αž½αžš αž¬αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆαž‘αŸ αž“αŸ„αŸ‡αž™αžΎαž„αž“αžΉαž„αžŸαŸŠαžΆαŸ†αž‡αžΆαž˜αž½αž™αžšαžΏαž„αžŠαžΌαž…αž‡αžΆ αž”αžΆαžαŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ TLB - αž’αžœαžαŸ’αžŠαž˜αžΆαž“αž“αŸƒαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž‘αŸ†αž–αŸαžšαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž™αžΌαžšαž‡αžΆαž„αž“αŸαŸ‡αž”αŸ’αžšαž αŸ‚αž› 30 αžŠαž„ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž‡αŸ„αž‚αž‡αŸαž™ αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ’αž…αžΆαžαŸ‹αžαŸ’αž…αžΆαž™ αžœαžΆαž’αžΆαž…αž”αž“αŸ’αžαž™αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαž„αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαžΆ αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ KDB+ αž“αž·αž„ Q αž‚αžΊαžŸαž˜αžšαž˜αŸ’αž™αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ† αž“αž·αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž…αžΌαž›αž”αŸ’αžšαžΎαžœαžΆαžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ‚αž˜αž‘αžΆαŸ†αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αžšαŸ†αž›αžΆαž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαžΆαž”αŸ‹αžšαž™αž›αžΆαž“αž‡αž½αžš/αž‡αžΈαž αŸ’αž‚αžΆαž”αŸƒαžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Q αžαŸ‚αž˜αž½αž™αŸ” αž—αžΆαžŸαžΆ Q αžαŸ’αž›αž½αž“αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž™αŸ‰αžΆαž„αžŸαž„αŸ’αžαŸαž” αž“αž·αž„αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαŸ„αž™αžŸαžΆαžšαž›αž€αŸ’αžαžŽαŸˆαžœαŸ‰αž·αž…αž‘αŸαžšαžšαž”αžŸαŸ‹αžœαžΆ αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αž—αžΆαžŸαžΆ SQL αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ αž“αž·αž„αžŸαŸ†αžŽαž»αŸ†αž˜αž»αžαž„αžΆαžšαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŠαŸαž‡αŸ„αž‚αž‡αŸαž™αŸ”

αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαžαžΆαž„αž›αžΎαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž’αŸ’αžœαžΈαžŠαŸ‚αž› Q αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“ αžœαžΆαž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž”αŸ’αž›αŸ‚αž€αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž•αž„αžŠαŸ‚αžšαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž–αž·αž’αžΈαž€αžΆαžš IPC αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αž›αž»αž”αž–αŸ’αžšαŸ†αžŠαŸ‚αž“αžšαžœαžΆαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Q αž“αžΈαž˜αž½αž™αŸ— αž“αž·αž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžšαžΆαž”αŸ‹αžšαž™αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αžŽαŸ’αžαžΆαž‰αžαŸ‚αž˜αž½αž™ αžŠαŸ‚αž›αž’αžΆαž…αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαžΆαž”αŸ‹αžŸαž·αž”αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž•αŸ’αžŸαŸαž„αŸ—αž“αŸƒαž–αž·αž—αž–αž›αŸ„αž€αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž‘αž·αž‰αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS, αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS πŸ”₯ αž‘αž·αž‰αžŸαŸαžœαžΆαž”αž„αŸ’αž αŸ„αŸ‡αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS | ProHoster