αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool αž’αŸ’αž“αž€αž’αžΆαž…αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸ’αž”αžΏαž“αž›αžΏαž“ αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαŸ” αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αŸ’αžœαžΎ

αž”αŸ’αžšαžΆαŸ†αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Tarantool αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αŸ’αžœαžΎαžŸαž·αž€αŸ’αžαžΆαžŸαžΆαž›αžΆαž›αžΎαž”αžŽαŸ’αžαžΆαž‰αž˜αž½αž™αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈ Hadoop αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› MapReduce αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαž½αžšαžŸαŸ†αžŽαž½αžš - "αž αŸαžαž»αž’αŸ’αžœαžΈαž˜αž·αž“αž”αŸ’αžšαžΎ Tarantool αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸαŸ‡?" αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αžΆαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒαž€αžΆαžšαž…αž„αŸ‹αžŠαžΉαž„αž…αž„αŸ‹αžƒαžΎαž‰ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ…αžœαžΆαžœαž·αž‰ αžŸαžΆαž€αž›αŸ’αž”αž„αž€αŸ†αžŽαŸ‚αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž - αž αžΎαž™αž›αžΎαž€αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž–αž·αžαž‡αžΆαž…αžΌαž›αž…αž·αžαŸ’αžαž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool αž•αŸ’αž‘αž»αž€αžœαžΆ αž αžΎαž™αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž αž αžΎαž™αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž“αž·αž„αžαŸ’αžšαž‡αžΆαž€αŸ‹αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool αž’αŸ’αž“αž€αž’αžΆαž…αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸ’αž”αžΏαž“αž›αžΏαž“ αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαŸ” αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αŸ’αžœαžΎ

αžαžΎαž’αŸ’αžœαžΈαž‘αŸ…αž‡αžΆ Tarantool

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

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

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

αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αŸ‚αž”αž“αŸαŸ‡ αž˜αžΆαž“αžαŸ‚αžŸαžΆαž˜αž‰αŸ’αž‰αž‘αŸ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αžšαŸ€αž”αžšαžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ”

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŸαŸ’αžŠαž„αŸ‹αžŠαžΆαžšαž…αŸ†αž“αž½αž“αž”αžΈ - αžαžΆαžŸαžšαžΉαž„ 20 αž‡αžΈαž αŸ’αž‚αžΆαž”αŸƒ αž’αŸŠαžΌαž”αŸŠαž»αž“αž‘αžΌ 18.04 αŸ” αžŸαŸŠαžΈαž—αžΈαž™αžΌαž“αž·αž˜αŸ’αž˜αž·αž 2 αž“αž·αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† 4 αž‡αžΈαž αŸ’αž‚αžΆαž”αŸƒαŸ”

αž™αžΎαž„αžŠαŸ†αž‘αžΎαž„ Tarantool - αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž” bash αž¬αž”αž“αŸ’αžαŸ‚αž˜αžƒαŸ’αž›αžΆαŸ†αž„αž αžΎαž™αž’αŸ’αžœαžΎ apt αžŠαŸ†αž‘αžΎαž„ Tarantool αŸ” αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžŸαŸ’αž‚αŸ’αžšαžΈαž” - (curl -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash)αŸ” αž™αžΎαž„αž˜αžΆαž“αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΌαž…αž‡αžΆαŸ–

tarantoolctl αž‚αžΊβ€‹αž‡αžΆβ€‹αž–αžΆαž€αŸ’αž™β€‹αž”αž‰αŸ’αž‡αžΆβ€‹αž…αž˜αŸ’αž”αž„β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž€αžΆαžšβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž‚αŸ’αžšαž„β€‹αž€αžšαžŽαžΈ Tarantula αŸ”
/etc/tarantool - αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ”
var/log/tarantool - αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αŸ”
var/lib/tarantool - αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž€αž»αž αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž‘αŸ…αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαŸ”

αž˜αžΆαž“ instance-available and instance-enable folders - αžœαžΆαž•αŸ’αž‘αž»αž€αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš - αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ instance αž‡αžΆαž˜αž½αž™ lua code αžŠαŸ‚αž›αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈ ports αžŠαŸ‚αž›αžœαžΆαžŸαŸ’αžαžΆαž”αŸ‹ ថអតើ memory αžŽαžΆαž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆ αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ Vinyl αž€αžΌαžŠαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ servers, sharding, αž‡αž½αžš, αž›αž»αž”αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž›αŸ‚αž„αž”αŸ’αžšαžΎ αž αžΎαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž›αžΎαŸ”

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

αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαžαŸ’αžαž»

αž™αžΎαž„αž˜αžΆαž“αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ tarantoolctl αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžšαžŽαžΈ Tarantula αŸ” αž§αž‘αžΆαž αžšαžŽαŸ tarantoolctl check example αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž αžΎαž™αž“αž·αž™αžΆαž™αžαžΆαž―αž€αžŸαžΆαžšαž˜αž·αž“αž’αžΈαž‘αŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αžΆαž“αž€αŸ†αž αž»αžŸαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαžœαžαŸ’αžαž» - αž§αž‘αžΆαž αžšαžŽαŸαžŸαŸ’αžαžΆαž“αž—αžΆαž– tarantoolctl αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž·αž’αžΈαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžšαž’αŸ’αž“αž€αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜, αž”αž‰αŸ’αžˆαž”αŸ‹, αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αŸ”

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› instance αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž˜αžΆαž“αžœαž·αž’αžΈαž–αžΈαžšαž™αŸ‰αžΆαž„αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžœαžΆαŸ”

1. αž€αž»αž„αžŸαžΌαž›αžšαžŠαŸ’αž‹αž”αžΆαž›

αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ Tarantool αž”αžΎαž€αžšαž“αŸ’αž’αž˜αž½αž™ αž αžΎαž™αž•αŸ’αž‰αžΎαž’αžαŸ’αžαž”αž‘ ASCII αž’αž˜αŸ’αž˜αžαžΆ αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ Tarantula αŸ” αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž€αž»αž„αžŸαžΌαž›αžαŸ‚αž„αžαŸ‚αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαž€αž…αŸ’αžšαž€αž€αž»αž„αžŸαžΌαž›αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ Tarantula αž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αž“αŸ„αŸ‡αž‘αŸαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αžœαž·αž’αžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž…αžΌαž› Tarantoolctl αž”αž‰αŸ’αž…αžΌαž›αžˆαŸ’αž˜αŸ„αŸ‡αž§αž‘αžΆαž αžšαžŽαŸαŸ” αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž»αž„αžŸαžΌαž› αž αžΎαž™αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αŸ” αž€αž»αŸ†αž”αž‰αŸ’αž…αŸαž‰αž…αŸ’αžšαž€αž€αž»αž„αžŸαžΌαž›αž‘αŸ…αžαžΆαž„αž€αŸ’αžšαŸ… - αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αž»αž€αžœαžΆαž‡αžΆαžšαž“αŸ’αž’αž―αž€αžαžΆαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αžΆαž“αžαŸ‚αž’αŸ’αž“αž€αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αžŸαžšαžŸαŸαžšαž‘αŸ…αž€αžΆαž“αŸ‹αžšαž“αŸ’αž’αž“αžΉαž„αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… Tarantula αž”αžΆαž“αŸ”

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

2. αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αž·αž’αžΈαž€αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž…αŸ’αžšαž€αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ”

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

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž“αŸαŸ‡ tarantoolctl αžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž›αŸαžαž…αŸ’αžšαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ” αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαžΆ αž’αŸ’αž“αž€αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž–αžΈαž…αž˜αŸ’αž„αžΆαž™ αž”αŸ’αžšαžΎαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ αž“αž·αž„αž•αŸ’αžαž›αŸ‹αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αžŸαŸαž„αŸ—αŸ”

αž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž˜αŸ‰αžΌαžŒαž»αž›αž”αŸ’αžšαž’αž”αŸ‹

αžŠαŸ„αž™αžŸαžΆαžš Tarantool αž‚αžΊαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αžœαžΆαž˜αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αž•αŸ’αžŸαŸαž„αŸ—αŸ” αž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαž˜αŸ‰αžΌαžŒαž»αž›αž”αŸ’αžšαž’αž”αŸ‹ - αžœαžΆαž’αž“αž»αžœαžαŸ’αžαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž’αŸ’αžœαžΈαž˜αž½αž™αž‘αŸ…αž”αŸ’αžšαž’αž”αŸ‹αž˜αž½αž™ Tarantool αžŸαžšαžŸαŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžŸ αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžœαžΆαž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž¬αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‡αžΆαž˜αž½αž™αžœαžΆαŸ”

αž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆ

αž§αž‘αžΆαž αžšαžŽαŸ αž™αžΎαž„αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž’αž”αŸ‹αž˜αŸ‰αžΌαžŒαž»αž› αž αžΎαž™αž αŸ…αž˜αž»αžαž„αžΆαžš box.once αŸ” αžœαžΆαž“αžΉαž„αž”αž„αŸ’αžαŸ†αž±αŸ’αž™ Tarantool αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ” αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž€αž“αŸ’αž›αŸ‚αž„αž˜αž½αž™αžŠαŸ‚αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ”

local function bootstrap()
    local space = box.schema.create_space('example')
    space:create_index('primary')
    box.schema.user.grant('guest', 'read,write,execute', 'universe')

    -- Keep things safe by default
    --  box.schema.user.create('example', { password = 'secret' })
    --  box.schema.user.grant('example', 'replication')
    --  box.schema.user.grant('example', 'read,write,execute', 'space', 'example')
end

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

αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž™αžΎαž„β€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αž•αŸ’αžαž›αŸ‹β€‹αž‡αŸ†αž“αž½αž™β€‹αžŠαž›αŸ‹β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎβ€‹αž‡αžΆβ€‹αž—αŸ’αž‰αŸ€αžœ αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž—αŸ’αž‡αžΆαž”αŸ‹β€‹αžαžΆαž˜β€‹αžšαž™αŸˆβ€‹αž–αž·αž’αžΈαž€αžΆαžšβ€‹αž‚αŸ„αž›αž–αžΈαžšαŸ” αž™αžΎαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αžΆαž“ សរសេរ αž“αž·αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ”

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

αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool αž’αŸ’αž“αž€αž’αžΆαž…αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸ’αž”αžΏαž“αž›αžΏαž“ αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαŸ” αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αŸ’αžœαžΎ

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

αž™αžΎαž„αž’αžΆαž…αž˜αžΎαž›αž…αž“αŸ’αž›αŸ„αŸ‡αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ Box.space αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ αž™αžΎαž„αžŸαžšαžŸαŸαžšαž§αž‘αžΆαž αžšαžŽαŸ box.space αž αžΎαž™αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž–αŸαž‰αž›αŸαž‰αž“αŸ…αž›αžΎαžœαžΆαŸ”

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

Vinyl αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαžαžΆαžŸαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ‚αž›αž’αŸ’αž›αžΆαž”αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹ - αž“αŸ„αŸ‡αž‚αžΊαž’αŸ’αž“αž€αž’αžΆαž…αž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž™αžΎαž„αž˜αžΆαž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž αžΎαž™ Tarantula αž“αžΉαž„αž’αžΆαž“αžœαžΆαž–αžΈαžαžΆαžŸαŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ”

unix/:/var/run/tarantool/example.control> box.space.example
---
- engine: memtx
  before_replace: 'function: 0x41eb02c8'
  on_replace: 'function: 0x41eb0568'
  ck_constraint: []
  field_count: 0
  temporary: false
  index:
    0: &0
      unique: true
      parts:
      - type: unsigned
        is_nullable: false
        fieldno: 1
      id: 0
      space_id: 512
      type: TREE
      name: primary
    primary: *0
  is_local: false
  enabled: true
  name: example
  id: 512
...

unix/:/var/run/tarantool/example.control>

αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαŸ–

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

αž•αŸ’αž“αŸ‚αž€αŸ–

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž™αžΎαž„αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“αŸ” αžœαžΆαž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αž˜αž½αž™ - αžœαžΆαž›αžŠαŸ†αž”αžΌαž„αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ αžœαžΆαž™ unsigned - αž…αŸ†αž“αž½αž“αž‚αžαŸ‹αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αŸ” αžαžΆαž˜αžαŸ’αž‰αž»αŸ†αž…αžΆαŸ†αž–αžΈαž―αž€αžŸαžΆαžš αž›αŸαžαž’αžαž·αž”αžšαž˜αžΆαžŠαŸ‚αž›αž’αžΆαž…αž˜αžΆαž“αž‚αžΊ 18 quintillionαŸ” αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŽαžΆαžŸαŸ‹αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž’αžΆαž…αž”αž‰αŸ’αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž”αž‰αŸ’αž…αžΌαž›αŸ”

unix/:/var/run/tarantool/example.control> box.space.example:insert{1, 'test1', 'test2'}
---
- [1, 'test1', 'test2']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{2, 'test2', 'test3', 'test4'}
---
- [2, 'test2', 'test3', 'test4']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{3, 'test3'}
---
- [3, 'test3']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{4, 'test4'}
---
- [4, 'test4']
...

unix/:/var/run/tarantool/example.control>

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

αž‘αž·αž“αŸ’αž“αž•αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž αžΆαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ”

Box.example.select αžŠαŸ„αž™β€‹αž…αž»αž… {1} αž“αžΉαž„β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αž’αžΆαžαž»β€‹αžŠαŸ‚αž›β€‹αž…αž„αŸ‹β€‹αž”αžΆαž“αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž›αž»αž”αžŸαŸ„αž“αŸ„αŸ‡ αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“αŸ” αž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž”αŸ’αž›αŸ‚αž€αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αž“αž½αž“αž‡αž½αžšαžˆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž˜αž·αž“αž˜αžΆαž“αž‚αŸ†αž“αž·αžαž“αŸƒαž‡αž½αžšαžˆαžšαž‘αŸ - αž˜αžΆαž“αž›αŸαžαžœαžΆαž›αŸ”

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


box.space.example:create_index( β€˜secondary’, { type = β€˜TREE’, unique = false, parts = {{field = 2, type =’string’} }}) 

αž™αžΎαž„αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ Create_index αŸ”
αž™αžΎαž„αž αŸ…αžœαžΆαžαžΆαž’αž“αž»αžœαž·αž‘αŸ’αž™αžΆαž›αŸαž™αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ” αž”αŸ’αžšαž—αŸαž‘αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž‚αžΊ TREE αŸ” αžœαžΆαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž˜αžΆαž“αžαŸ‚αž˜αž½αž™αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αž‰αŸ’αž…αžΌαž› Unique = false αŸ”

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

unix/:/var/run/tarantool/example.control> box.space.example:create_index('secondary', { type = 'TREE', unique = false, parts = {{field = 2, type = 'string'}}})
---
- unique: false
  parts:
  - type: string
    is_nullable: false
    fieldno: 2
  id: 1
  space_id: 512
  type: TREE
  name: secondary
...

unix/:/var/run/tarantool/example.control>

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž αŸ…αžœαžΆαžαžΆ:

unix/:/var/run/tarantool/example.control> box.space.example.index.secondary:select('test1')
---
- - [1, 'test1', 'test2']
...

αž€αŸ†αž–αž»αž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€

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

αž€αžΆαžšαžŸαž“αŸ’αžŸαŸ†αžšαžΆαž›αŸ‹αžœαž·αž“αžΆαž‘αžΈαž€αŸαž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αžš - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž”αŸ„αŸ‡αž…αŸ„αž› 20 GB αž‘αŸ…αž€αŸ’αž“αž»αž„αžŒαžΈαžŸαž₯αžαžˆαž”αŸ‹αžˆαžšαž‚αžΊαž‡αžΆαž‚αŸ†αž“αž·αžαžŠαžΌαž…αŸ’αž“αŸαŸ‡αŸ”

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

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

αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool αž’αŸ’αž“αž€αž’αžΆαž…αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸ’αž”αžΏαž“αž›αžΏαž“ αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαŸ” αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αŸ’αžœαžΎ

αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžαžαž”αŸ‚αž”αž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ box.cfg (αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš example.lua)αŸ–

wal_mode = β€œwrite”;

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™

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

αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ

αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž…αžΌαžšαž™αžΎαž„αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ‚αž”αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantula

αžŸαžΌαž˜αž˜αžΎαž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αžšαŸ„αž˜ spoiler

box.cfg {
    listen = '0.0.0.0:3301';
    io_collect_interval = nil;
    readahead = 16320;
    memtx_memory = 128 * 1024 * 1024; -- 128Mb
    memtx_min_tuple_size = 16;
    memtx_max_tuple_size = 128 * 1024 * 1024; -- 128Mb
    vinyl_memory = 128 * 1024 * 1024; -- 128Mb
    vinyl_cache = 128 * 1024 * 1024; -- 128Mb
    vinyl_max_tuple_size = 128 * 1024 * 1024; -- 128Mb
    vinyl_write_threads = 2;
    wal_mode = "write";
    wal_max_size = 256 * 1024 * 1024;
    checkpoint_interval = 60 * 60; -- one hour
    checkpoint_count = 6;
    force_recovery = true;
    log_level = 5;
    log_nonblock = false;
    too_long_threshold = 0.5;
    read_only   = false
}

local function bootstrap()
    local space = box.schema.create_space('example')
    space:create_index('primary')

    box.schema.user.create('example', { password = 'secret' })
    box.schema.user.grant('example', 'read,write,execute', 'space', 'example')

    box.schema.user.create('repl', { password = 'replication' })
    box.schema.user.grant('repl', 'replication')
end

-- for first run create a space and add set up grants
box.once('replica', bootstrap)

-- enabling console access
console = require('console')
console.listen('127.0.0.1:3302')

-- http config
local charset = {}  do -- [0-9a-zA-Z]
    for c = 48, 57  do table.insert(charset, string.char(c)) end
    for c = 65, 90  do table.insert(charset, string.char(c)) end
    for c = 97, 122 do table.insert(charset, string.char(c)) end
end

local function randomString(length)
    if not length or length <= 0 then return '' end
    math.randomseed(os.clock()^5)
    return randomString(length - 1) .. charset[math.random(1, #charset)]
end

local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')

local httpd = http_server.new('0.0.0.0', 8080, {
    log_requests = true,
    log_errors = true
})

local router = http_router.new()

local function get_count()
 local cnt = box.space.example:len()
 return cnt
end

router:route({method = 'GET', path = '/count'}, function()
    return {status = 200, body = json.encode({count = get_count()})}
end)

router:route({method = 'GET', path = '/token'}, function()
    local token = randomString(32)
    local last = box.space.example:len()
    box.space.example:insert{ last + 1, token }
    return {status = 200, body = json.encode({token = token})}
end)

prometheus = require('prometheus')

fiber = require('fiber')
tokens_count = prometheus.gauge("tarantool_tokens_count",
                              "API Tokens Count")

function monitor_tokens_count()
  while true do
    tokens_count:set(get_count())
    fiber.sleep(5)
  end
end
fiber.create(monitor_tokens_count)

router:route( { method = 'GET', path = '/metrics' }, prometheus.collect_http)

httpd:set_router(router)
httpd:start()

αž™αžΎαž„αž”αŸ’αžšαž€αžΆαžŸαžαžΆαžšαžΆαž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„ lua αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαŸ” αžαžΆαžšαžΆαž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαž…αŸƒαžŠαž“αŸ’αž™αŸ”

local charset = {}  do -- [0-9a-zA-Z]
    for c = 48, 57  do table.insert(charset, string.char(c)) end
    for c = 65, 90  do table.insert(charset, string.char(c)) end
    for c = 97, 122 do table.insert(charset, string.char(c)) end
end

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αž™αžΎαž„αž”αŸ’αžšαž€αžΆαžŸαž˜αž»αžαž„αžΆαžšαž˜αž½αž™ - randomString αž αžΎαž™αž•αŸ’αžαž›αŸ‹αžαž˜αŸ’αž›αŸƒαž”αŸ’αžšαžœαŸ‚αž„αž€αŸ’αž“αž»αž„αžαž„αŸ’αž€αŸ€αž”αŸ”

local function randomString(length)
    if not length or length <= 0 then return '' end
    math.randomseed(os.clock()^5)
    return randomString(length - 1) .. charset[math.random(1, #charset)]
end

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž—αŸ’αž‡αžΆαž”αŸ‹αžšαŸ‰αŸ„αžαž‘αŸαžš http αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ http αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Tarantula αžšαž”αžŸαŸ‹αž™αžΎαž„ JSON αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž‘αŸ…αž’αžαž·αžαž·αž‡αž“αŸ”

local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž›αžΎαž…αŸ’αžšαž€ 8080 αž“αŸ…αž›αžΎαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ http αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αžŠαŸ‚αž›αž“αžΉαž„αž€αžαŸ‹αžαŸ’αžšαžΆαžšαžΆαž›αŸ‹αžŸαŸ†αžŽαžΎ αž“αž·αž„αž€αŸ†αž αž»αžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

local httpd = http_server.new('0.0.0.0', 8080, {
    log_requests = true,
    log_errors = true
})

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž™αžΎαž„αž”αŸ’αžšαž€αžΆαžŸαž•αŸ’αž›αžΌαžœαžαžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαŸ†αžŽαžΎαž‡αžΆαž˜αž½αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš GET αž˜αž€αžŠαž›αŸ‹αž…αŸ’αžšαž€ 8080 / αžšαžΆαž”αŸ‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž αŸ…αž˜αž»αžαž„αžΆαžšαž–αžΈαž”αž“αŸ’αž‘αžΆαžαŸ‹αž˜αž½αž™αŸ” αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αžŸαŸ’αžαžΆαž“αž—αžΆαž– - 200, 404, 403 αž¬αž’αŸ’αžœαžΈαž€αŸαžŠαŸ„αž™αžŠαŸ‚αž›αž™αžΎαž„αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αŸ”

router:route({method = 'GET', path = '/count'}, function()
    return {status = 200, body = json.encode({count = get_count()})}
end)

αž“αŸ…αž€αŸ’αž“αž»αž„αžαž½ αž™αžΎαž„αžαŸ’αžšαž‘αž”αŸ‹ json.encode αž™αžΎαž„αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžšαžΆαž”αŸ‹ αž“αž·αž„αž‘αž‘αž½αž›αžšαžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αžœαžΆ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αŸ… αž“αž·αž„αž”αž„αŸ’αž αžΆαž‰αž…αŸ†αž“αž½αž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž‘αžΈαž–αžΈαžš

router:route({method = 'GET', path = '/token'}, function() 
    local token = randomString(32) 
    local last = box.space.example:len() 
    box.space.example:insert{ last + 1, token } 
    return {status = 200, body = json.encode({token = token})}
end)

αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžš router:route({method = 'GET', path = '/token'}, function() αž™αžΎαž„αž αŸ…αž˜αž»αžαž„αžΆαžš αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αŸ”

αž”αž“αŸ’αž‘αžΆαžαŸ‹ αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ = randomString(32) αž‚αžΊαž‡αžΆαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαž…αŸƒαžŠαž“αŸ’αž™αž“αŸƒ 32 αžαž½αž’αž€αŸ’αžŸαžšαŸ”
αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžš local last = box.space.example:len() αž™αžΎαž„αžŠαž€αž’αžΆαžαž»αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž…αŸαž‰αŸ”
αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž“αŸ’αž‘αžΆαžαŸ‹ box.space.example:insert{ last +1, token } αž™αžΎαž„αžŸαžšαžŸαŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„ αž–αŸ„αž›αž‚αžΊαž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž„αŸ’αž€αžΎαž“αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ„αž™ 1 αŸ” αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αžαžΆαž˜αžšαž”αŸ€αž”αžŠαŸ‚αž›αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ” Tarantula αž˜αžΆαž“αž›αŸ†αžŠαžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžšαžŽαžΈαž“αŸαŸ‡αŸ”

αž™αžΎαž„αžŸαžšαžŸαŸαžšαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αŸ”

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

αžœαžΆαžŸαŸ’αžαžΆαž”αŸ‹ http αž“αž·αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαŸ‚αž˜αž½αž™ - αž‘αžΆαŸ†αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™ αž’αŸ’αžœαžΈαŸ—αž€αžΎαžαž‘αžΎαž„αž™αŸ‰αžΆαž„αž›αžΏαž“αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž™αžΎαž„αžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΌαžŒαž»αž› httpαŸ–

αžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž’αŸ’αžœαžΎαžœαžΆαžŸαžΌαž˜αž˜αžΎαž›αž“αŸ…αž€αŸ’αžšαŸ„αž˜ spoiler

root@test2:/# tarantoolctl rocks install http
Installing http://rocks.tarantool.org/http-scm-1.src.rock
Missing dependencies for http scm-1:
   checks >= 3.0.1 (not installed)

http scm-1 depends on checks >= 3.0.1 (not installed)
Installing http://rocks.tarantool.org/checks-3.0.1-1.rockspec

Cloning into 'checks'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 28 (delta 1), reused 16 (delta 1), pack-reused 0
Receiving objects: 100% (28/28), 12.69 KiB | 12.69 MiB/s, done.
Resolving deltas: 100% (1/1), done.
Note: checking out '580388773ef11085015b5a06fe52d61acf16b201'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

No existing manifest. Attempting to rebuild...
checks 3.0.1-1 is now installed in /.rocks (license: BSD)

-- The C compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found TARANTOOL: /usr/include (found version "2.4.2-80-g18f2bc82d")
-- Tarantool LUADIR is /.rocks/share/tarantool/rocks/http/scm-1/lua
-- Tarantool LIBDIR is /.rocks/share/tarantool/rocks/http/scm-1/lib
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    version


-- Build files have been written to: /tmp/luarocks_http-scm-1-V4P9SM/http/build.luarocks
Scanning dependencies of target httpd
[ 50%] Building C object http/CMakeFiles/httpd.dir/lib.c.o
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:32:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c: In function β€˜tpl_term’:
/usr/include/tarantool/lauxlib.h:144:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
    (*(B)->p++ = (char)(c)))
    ~~~~~~~~~~~^~~~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:62:7: note: in expansion of macro β€˜luaL_addchar’
       luaL_addchar(b, '\');
       ^~~~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:63:6: note: here
      default:
      ^~~~~~~
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:39:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h: In function β€˜tpe_parse’:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h:147:9: warning: this statement may fall through [-Wimplicit-fallthrough=]
    type = TPE_TEXT;
    ~~~~~^~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h:149:3: note: here
   case TPE_LINECODE:
   ^~~~
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:40:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h: In function β€˜httpfast_parse’:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:372:22: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 code = 0;
                 ~~~~~^~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:374:13: note: here
             case status:
             ^~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:393:23: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 state = message;
                 ~~~~~~^~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:395:13: note: here
             case message:
             ^~~~
[100%] Linking C shared library lib.so
[100%] Built target httpd
[100%] Built target httpd
Install the project...
-- Install configuration: "Debug"
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/VERSION.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lib/http/lib.so
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/server/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/server/tsgi_adapter.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/nginx_server/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/fs.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/matching.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/middleware.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/request.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/response.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/tsgi.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/utils.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/mime_types.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/codes.lua
http scm-1 is now installed in /.rocks (license: BSD)

root@test2:/#

αž™αžΎαž„αž€αŸαžαŸ’αžšαžΌαžœαž€αžΆαžš prometheus αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

root@test2:/# tarantoolctl rocks install prometheus
Installing http://rocks.tarantool.org/prometheus-scm-1.rockspec

Cloning into 'prometheus'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 19 (delta 2), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (19/19), 10.73 KiB | 10.73 MiB/s, done.
Resolving deltas: 100% (2/2), done.
prometheus scm-1 is now installed in /.rocks (license: BSD)

root@test2:/#

αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž“αž·αž„αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž˜αŸ‰αžΌαžŒαž»αž›

root@test2:/# curl -D - -s http://127.0.0.1:8080/token
HTTP/1.1 200 Ok
Content-length: 44
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"token":"e2tPq9l5Z3QZrewRf6uuoJUl3lJgSLOI"}

root@test2:/# curl -D - -s http://127.0.0.1:8080/token
HTTP/1.1 200 Ok
Content-length: 44
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"token":"fR5aCA84gj9eZI3gJcV0LEDl9XZAG2Iu"}

root@test2:/# curl -D - -s http://127.0.0.1:8080/count
HTTP/1.1 200 Ok
Content-length: 11
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"count":2}root@test2:/#

/ αžšαžΆαž”αŸ‹αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœαžŸαŸ’αžαžΆαž“αž—αžΆαž– 200 αŸ”
/token αž…αŸαž‰ token αž αžΎαž™αžŸαžšαžŸαŸαžš token αž“αŸαŸ‡αž‘αŸ…αž€αžΆαž“αŸ‹ databaseαŸ”

αž›αŸ’αž”αžΏαž“αžŸαžΆαž€αž›αŸ’αž”αž„

αž…αžΌαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎ 50 αŸ” αžŸαŸ†αžŽαžΎαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αž“αžΉαž„αž˜αžΆαž“ 000 αŸ”

root@test2:/# ab -c 500 -n 50000 http://127.0.0.1:8080/token
This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Tarantool
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /token
Document Length:        44 bytes

Concurrency Level:      500
Time taken for tests:   14.578 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      7950000 bytes
HTML transferred:       2200000 bytes
Requests per second:    3429.87 [#/sec] (mean)
Time per request:       145.778 [ms] (mean)
Time per request:       0.292 [ms] (mean, across all concurrent requests)
Transfer rate:          532.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   10 103.2      0    3048
Processing:    12   69 685.1     15   13538
Waiting:       12   69 685.1     15   13538
Total:         12   78 768.2     15   14573

Percentage of the requests served within a certain time (ms)
  50%     15
  66%     15
  75%     16
  80%     16
  90%     16
  95%     16
  98%     21
  99%     42
 100%  14573 (longest request)
root@test2:/#

αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αŸ” αž αžΎαž™αž™αžΎαž„αž€αŸ†αž–αž»αž„αž€αžαŸ‹αžαŸ’αžšαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αž₯αžαžˆαž”αŸ‹αžˆαžšαŸ” 99% αž“αŸƒαžŸαŸ†αžŽαžΎαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 42 αž˜αž·αž›αŸ’αž›αžΈαžœαž·αž“αžΆαž‘αžΈαŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αž™αžΎαž„αž˜αžΆαž“αžŸαŸ†αžŽαžΎαž”αŸ’αžšαž αŸ‚αž› 3500 αž€αŸ’αž“αž»αž„αž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαžΌαž…αž˜αž½αž™ αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αž“αžΌαž› 2 αž“αž·αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† 4 αž‡αžΈαž αŸ’αž‚αžΆαž”αŸƒαŸ”

αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆ 50000 αž αžΎαž™αž˜αžΎαž›αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆαŸ”

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

αž’αŸ’αž“αž€αž’αžΆαž…αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž“αž·αž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αŸ‰αžΌαžŒαž»αž›αžŽαžΆαž˜αž½αž™ αž“αž·αž„αž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŽαžΆαž˜αž½αž™αŸ”

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

αž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αžŠαŸ„αž™ Tarantula αžαŸ’αž›αž½αž“αž―αž„αž αžΎαž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž‘αŸαŸ”

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

αž“αŸαŸ‡αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž•αŸ’αž“αŸ‚αž€αžŠαŸ†αž”αžΌαž„αž“αŸƒαž€αžΆαžšαž„αžΆαžšαž’αŸ†αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž’αžαŸ’αžαž”αž‘αž‘αžΈαž–αžΈαžšαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡αž“αŸ…αž›αžΎαž”αŸ’αž›αž»αž€ Mail.ru Group αž αžΎαž™αž™αžΎαž„αž“αžΉαž„αž”αž“αŸ’αžαŸ‚αž˜αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžšαžΏαž„αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αž αž“αž·αž„αžŸαž½αžšαžŸαŸ†αžŽαž½αžšαž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αžŸαžΌαž˜αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… DevOps αžŠαŸ„αž™αž†αžΆαž“αŸ‚αž› REBRAIN.

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž‘αŸ…αž–αž–αž€ αž¬αž˜αžΆαž“αžŸαŸ†αžŽαž½αžšαž’αŸ†αž–αžΈαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž˜αžΆαž“αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŸαŸαžšαžΈαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ†αžŽαžΎ.

PS αž™αžΎαž„αž˜αžΆαž“αžŸαžœαž“αž€αž˜αŸ’αž˜αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαž…αŸ†αž“αž½αž“ 2 αž€αŸ’αž“αž»αž„αž˜αž½αž™αžαŸ‚ αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž–αž½αž€αž‚αŸαŸ”

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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹