PHP áá±áá
áá
áºááœáẠáá±á¬áá±á¬áááºááœáẠTarantool áá¬áá¬ááŸáá·áº áá¯ááºáá±á¬ááºááẠáá»áááºáááºááŸá¯ááŸá
áºáá¯ááŸáááẠ- áááºážááẠááá¬ážááẠPECL ááá¯ážáá»á²á·ááŸá¯ááŒá
áºáááºá
á€áá±á¬ááºážáá«ážááœááºá á
á¬ááŒáá·áºááá¯ááºááŸá
áºáá¯áá¯á¶ážáá
áœááºážáá±á¬ááºáááºá
ááºážáááºááŒááºážáááááºáá»á¬ážááá¯áá»áŸáá±ááŒá®ážá áá¯ááºááá¯á¡áááºážáááºáá»áŸáá¬ááŒá±á¬ááºážáá²ááŸá¯ááŒáá·áºáááºááẠ3-5 á
áœááºážáá±á¬ááºáááºááá¯ážááŒáá·áºááŸá¯ááá¯áááºááá¯á·áááá¯ááºáááºááá¯ááŒáááá¯ááẠ(áá¬áá¯á
ááºážáááºááŸá¯áá»á¬áž).
áá«ááá¯á· áá¬á ááºážáááºááŒááá²á
á¡áááºáá±á¬áºááŒáá«áá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· á ááºážáááºáá«áááºá synchronous áá»áááºáááºáááááá¬áá»á¬ážááẠáááŒáá¯ááºáááºážá á¡ááŒáá¯ááºá ááŸáá·áº á¡ááŒáá¯ááºá¡ááá¯ááºáá¯ááºáá±á¬ááºáá±áá«áááºá ð áá»áœááºá¯ááºááá¯á·ááẠáá»áááºáááºáááááá¬áá»á¬ážá áá¯ááºááá¯áááºáž ááááá»ááºáá«á áááºááŸáááœáẠáááºá¡ááá¯ááŸááá±á¬á¡áá¬ááᯠáááŸááááºá¡ááœáẠááá¯ážáá»á²á·ááŸá¯áá»á¬ážá áœá¬ááᯠáááŸáááá¯ááºáá«áááº-
Swoole - PHP á¡ááœáẠá áœááºážáá±á¬ááºáááºááŒáá·áº ááŒááºáá±á¬ááºááŸá¯ááá¯ááºáᬠáá°áá±á¬ááºáá áºáá¯á Alibaba ááŸáá·áº Baidu áá²á·ááá¯á·áá±á¬ á¡ááºáá¬ááẠáá¯áá¹ááá®ááŒá®ážáá»á¬ážá á¡áá¯á¶ážááŒá¯ááŒáááºá áá¬ážááŸááºáž 4.1.0 ááááºážá ááŸá±á¬áºáááºážáááºážáá áºáᯠáá±á«áºáá¬áááºá SwooleRuntime::enableCoroutine()áááºážááẠááá·áºá¡á¬áž "áá áºááŒáá¯ááºáááºáááºáž PHP ááœááºáááºá á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáá¯ááºáá áºááŒá±á¬ááºážááŒáá·áº á¡áá®ááŒá áºá á±ááá·áºá¡áá¬áá»á¬ážá¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²ááá¯ááºá á±áá«áááºá"- Async ááẠáááŒá¬áá±ážáá®á¡áá»áááºá¡áá PHP ááœáẠá¡áááºáááŒááºáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ á¡áá¬ážá¡áá¬ááŸááá±á¬ extension áá
áºáá¯ááŒá
áºáááºá áááŒá¬áá±ážáááºá¡áá áá¬ááŒá±á¬áá·áºáá²á áá¶ááá±á¬ááºážá
áœá¬áá²á áá»áœááºá¯ááºááááá±á¬ á¡ááŒá±á¬ááºážááŒáá»ááºááŒá±á¬áá·áº á
á¬áá±ážáá°ááẠááá¯ááŸá±á¬ááºáááºážááᯠáá»ááºááá¯ááºááŒá®áž ááá±á¬áá»ááºá á¡áá¬áááºáá¶ááŒáá¹áá¬ááᯠáááŸááºážáááºážáá«á á¡á²áá«ááᯠáá¯á¶ážáááŸá¬áá±á«á·á
áá áºáᯠáááºážáá¯á¶áááºážááœáá»á¬ážá០Swoole áá²á·ááá¯á·áááºá á€ááá¯ážáá»á²á·ááŸá¯ááẠTCP ááŸáá·áº TLS á á®ážááŒá±á¬ááºážáá»á¬ážá á á¶á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá¯á¶á á¶áá»á¬ážááᯠáááºážááá¯á·á á¡áá®á¡ááœááºáá¬ážááŸááºážáá»á¬ážááŒáá·áº á¡á á¬ážááá¯ážááŒááºážááŒáá·áº áááºááá±á¬ááºážáá®ááᯠáááºáá±á¬ááºáááºááᯠááŸááºááá¯ááºááŒááºážááŒáá·áº á¡ááœááºááá° ááœáá·áºááá¯ááºá á±áááºááŒá áºáááºá áááºážááá¯ááœá±ážáá»ááºááŸá¯ááŸáááá·áºáá¯ááºáá±á¬ááºááẠ"async.tcp = á"á áá»ááºážááŒáá¯ááºáá±áá±á¬ - phpdbg, apcu, pthreads, pcov, uopz áá²á·ááá¯á·áá±á¬ á á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠáá±ážáá¬ážáá° áá°áááá»á¬ážáá±á¬ Joe Watkins áá¶á០á¡áá±á¬áºáá±áž á¡áá áºáá±á¬ ááá¯ážáá»á²á·ááŸá¯áá áºáá¯á ááá¯ážáá»á²á·ááŸá¯ááẠPHP ááœáẠmultithreading á¡ááœáẠAPI ááá¯áá±á¬ááºáá¶á·áá±ážááŒá®áž pthread áá»á¬ážá¡ááœááºá¡á á¬ážááá¯ážáá áºáá¯á¡ááŒá áºáá±áá¬áá»áá¬ážáááºá á á¬ááŒáá·áºááá¯ááºá áááá¬áááºááŸá¬ážáá±á¬ ááá·áºáááºáá»ááºáá áºáá¯ááŸá¬ áááºážááẠPHP á ZTS (Zend Thread Safe) áá¬ážááŸááºážááŸáá·áºáᬠáá¯ááºáá±á¬ááºááá¯ááºááŒááºážááŒá áºáááºá
áááºááá¯á ááºážáááºááá²á
áá±áž-ááŒáá¯áááºááŸááºáááºážááá¯ááááºáá¬ážááŒááºážááŒáá·áº Tarantool á¥ááá¬ááá¯ááœáá·áºááŒáá«á áá¯á· (wal_mode = áááŸááá«á) ááŸáá·áº ááá¯ážááŒáŸáá·áºáá¬ážáá±á¬ ááœááºáááºááŒá¬ážáᶠ(readahead = 1 * 1024 * 1024) áááááœá±ážáá»ááºááŸá¯ááẠdisk ááŸáá·áºá¡áá¯ááºáá¯ááºááŒááºážááá¯áááºááŸá¬ážáááºááŒá áºááŒá®ážá áá¯ááááá áºáá¯ááẠoperating system buffer ááŸáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááá¯ááá¯ááá¯áááºááŸá¯ááá¯ááºá á±ááŒá®ážá áá áºáá±á«áºááá¯ááŸá¯á¡áá±á¡ááœááºááá¯á¡áááºážáá¯á¶ážáá»áŸá±á¬á·áá»áááá·áºáááºá
á
á¶ááœáŸááºážáá
áááºáá® áá±áᬠ(ááá·áºááœááºážááŒááºážá áá»ááºááŒááºážá áááºááŸá¯ááŒááºáž á
áááº) ááŸáá·áº áá¯ááºáá±á¬ááºáá±á¬ á
á¶áááºááŸááºáá»ááºáá»á¬ážá¡ááœááºá á
á¶ááœáŸááºážáá
áááºáá®ááœááºá ááááºážááŒáá·áºáááºááá¯ážáá»á¬ážááᯠá
á®áá¬ážáá±á¬ ááááºážááŒáá·áºáááºááá¯ážáá»á¬ážááᯠáá»ááºááá±áá¬á០áááºáá®ážáá¬ážááá·áº memtx space (ááŒááºáááº) áááºáá®ážáá±ážáááºááŒá
áºáááºá (á¡á
á®á¡á
á¥áº)á
space DDL ááẠá€áá²á·ááá¯á· ááŒá
áºáááº-
space = box.schema.space.create(config.space_name, {id = config.space_id, temporary = true})
space:create_index('primary', {type = 'tree', parts = {1, 'unsigned'}, sequence = true})
space:format({{name = 'id', type = 'unsigned'}, {name = 'name', type = 'string', is_nullable = false}})
ááá¯á¡ááºáá«áá á á¶áááºááŸááºáá»ááºááᯠááá¯ááºáá±á¬ááºáá®á áá±áá¬ááœááºááẠáá±á¬ááºáá¯á¶á á¶á tuples 10,000 ááŸáá·áº ááŒáá·áºáá±áá«áááºá
{id, "tuplе_<id>"}
Tuple áá»á¬ážááᯠáá»áááºážáá±á¬á·áááºááá¯ážááŒáá·áº áááºáá±á¬ááºááŒáá·áºááŸá¯áááºá
á á¶áááºááŸááºáá»ááºááá¯ááºááá¯ááºá á¡ááŒááẠ10,000 (áá±á¬áºááŸááºáá±ážáá»á¬áž) ááᯠáá¯ááºáá±á¬ááºááá·áº áá¬áá¬áᶠáá±á¬ááºážááá¯áá»ááºáá áºáá¯áááºážááŒá áºááŒá®áž áááºážááẠá¡ááŒáááºáá±á«ááºáž 5 (áá±á¬áºááŸááºááŸá¯áá»á¬áž) ááᯠáááºááá¯ááºáá¯ááºáá±á¬ááºáááºá á¡ááŒááẠá ááŒáááºááŒá¬ážááŸá á¡áá»áááºááœá±áááºááŸá¯á¡á¬ážáá¯á¶ážááẠáááºáá¶ááá¯ááºáá±á¬ á¡ááŸá¬ážá¡ááœááºáž 3%* á¡ááœááºážááœáẠááŸááá±áááºá¡áá áááºááá²áá² ááŒá¯áá¯ááºáá±áá«áááºá á¡á²áá®áá±á¬ááºááŸá¬áá±á¬á· áá»ááºážáá»áŸááááºááᯠáá°áá«áááºá áááá¯áááºáá¬á¡á¬áž á¡ááá·áºá¡áá¬ážáááŒá áºá á±ááẠáááºááá²áá²áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááŒá¬ážááœáẠ1 á áá¹ááá·áºáá±áá¹ááááºááá¯ááºáááºá Lua á á¡ááŸáá¯ááºááááºážáá°ááᯠáááºáá«ááá²áá² ááá¯ááºáá±á¬ááºáá® ááááºáá¬ážááŒá®áž áááºážááᯠá¡ááŒá®ážáááºááŒá®ážáá±á¬áẠá áááºááá¯ááºážáááºá PHP áá¯ááºáááºážá ááºááẠá á¶áááºááŸááºáá»ááºá¡ááœáẠááá¯á¡ááºáá±á¬ ááá¯ážáá»á²á·ááŸá¯áá»á¬ážááŒáá·áºáᬠá áááºáá¯ááºáá±á¬ááºááŒá®ážá á¡ááœááºááŸá¯ááºážááᯠá¡ááŸáááºááŒáŸáá·áºáá±ážááŒá®áž á¡ááŸáá¯ááºá á¯áá±á¬ááºážáá°ááᯠááááºáá¬ážáááºá
* ááŒá±á¬ááºážáá²ááŸá¯á¡áá±á¡ááœááºá áááºááá²áá²ááŒá¯áá¯ááºááŒááºážááŸáá·áº á¡ááŸá¬ážá¡ááœááºážá¡ááá·áºááᯠá á¶áááºááŸááºáá»ááºáááºáááºáá»á¬ážááœáẠááŒá±á¬ááºážáá²ááá¯ááºáááºá
áááºáááºážáá»ááºááᯠá ááºážáááºáá«á
á¡á±á¬ááºáá±á¬áºááŒáá« ááááºáá»á¬ážááᯠMacBookPro (2015)á áááºáááºááŸá¯á
áá
Ạ- Fedora 30 (kernel áá¬ážááŸááºáž 5.3.8-200.fc30.x86_64) áá±á«áºááœáẠááŒá¯áá¯ááºáá¬ážáá«áááºá Tarantool ááᯠ"ááá·áºáááºáá»ááºááŒáá·áº docker ááœááºá
áááºáá²á·áááº--network host"
.
Package áá¬ážááŸááºážáá»á¬áž-
Tarantool: 2.3.0-115-g5ba5ed37e
Docker- 19.03.3á a872fc2f86 áááºáá±á¬ááºááŒááºážá
PHP- 7.3.11 (cli) (áááºáá±á¬ááºááŸá¯- Oct 22 2019 08:11:04)
tarantool/áá±á¬ááºáááº- 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool- 0.3.2 (+ 7.3 á¡ááœáẠpatch)*
ext-msgpack- 2.0.3
ext-async- 0.3.0-8c1da46
ext-swoole- 4.4.12
ext-parallel- 1.1.3
* áá¶ááá±á¬ááºážá
áœá¬ááŒáá·áºá ááá¬ážáááºáá»áááºáááºáááááá¬ááẠPHP áá¬ážááŸááºáž > 7.2 ááŸáá·áº á¡áá¯ááºááá¯ááºáá«á PHP 7.3 ááœáẠextension ááᯠcompile áá¯ááºááŒá®áž run áááºá áá»áœááºáá±á¬áºá¡áá¯á¶ážááŒá¯ááááºááŒá
áºáá«áááºá
ááááºáá»á¬ážááá¯
synchronous áá¯ááº
Tarantool áááá¯ááá¯áá±á¬ááẠááœááá±á¬áºáááºááᯠá¡áá¯á¶ážááŒá¯áááºá
áá»áááºáááºááŸá¯áá»á¬ážááᯠááŸáá¯ááºážááŸááºááŒááºážáááŒá¯áá®á áá»áœááºá¯ááºááá¯á·ááẠPHP áá»áááºáááºáááááá¬á¡ááœáẠMessagePack áá¯ááºááŒá±á¬ááºážáááááá¬áá»á¬ážá á áœááºážáá±á¬ááºáááºááᯠááá¯ááºážáá¬áááºááŒá áºááŒá®áž áá±á¬ááºáááºá ááºážáááºááŸá¯áá»á¬ážááœáẠá¡áá±á¬ááºážáá¯á¶ážááááºááá¯ááŒáááá·áºáá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá«áááºá
PHP áá¬ážááŸááºáž (Pure) ááẠPECL ááá¯ážáá»á²á·ááŸá¯ááẠááŒááºáááºáá±á¬áºáááºážá áááºááœá±á·ááá±á¬áá»ááºáá»á¬ážááœáẠáááºážááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
ááá¯á·ááŒá±á¬áá·áºá synchronous mode ááœáẠconnectors áá»á¬ážáá áœááºážáá±á¬ááºáááºááá¯ááá¯ááºážáá¬ááŒáá«á áá¯á·á
ááááºááŸááœá±á·ááŒááºááá¯ááºááá²á·ááá¯á· PECL áá»áááºáááºáááááᬠ(Tarantool) ááẠPHP áá»áááºáááºáááááᬠ(Client) ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á ááá¯ááá¯áá±á¬ááºážááœááºáá±á¬á
áœááºážáá±á¬ááºáááºááᯠááŒááááºá ááá¯á·áá±á¬áº áá±á¬ááºááá¯ááºážááœáẠááá¯ááá¯ááŸá±ážááœá±ážáá±á¬áá¬áá¬á
áá¬ážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá¡ááŒááºá áá±á«áºááá¯ááŸá¯áá
áºáá¯á
á®ááá¯ááºážááŸáá·áº á¡áá¬ááá¹áá¯á¡áá
áºáá
áºáá¯ááᯠáááºáá®ážáá¬ážáááºááŸá¬ á¡á¶á·ááŒá
áá¬ááá¯ááºáá±á áá±á¬ááºážááá¯áá»ááºááᯠО áá¯á¶á·ááŒááºáá»áẠ(Select - ááŸá¬áááºáž áá«áá«áááºá ááá¯á¡ááºáá»ááºááŸáá·áº Update/Upsert áááá
á¹á
ááœááºá á
á
áºáááºáá±áž) áá®ážááŒá¬áž á¡ááœá²á·á¡á
ááºážáá»á¬áž áá¯áá¹ááá¹ážááá¬ááá°áá®áá°ááºá¬ážá , Packer á᫠О handler áá°ááá¯á·áááºáž á¡áá±á«áºááá± ááá·áºáááºá á
á»á±ážááŸá¯ááºážá¡á ááŒá±á¬ááºážááœááºááŒááºááœááºááẠáááºááŸá¬ážáááºá ááá¯á·áá±á¬áº áá±áá¯áá»á¡á¬ážááŒáá·áºá PHP á
áá¬ážááŒááºááẠááœá¬ááŒá¬ážáá»ááºáá
áºáá¯ááŸááá±á¬áºáááºáž áááºážááẠá¡áá±ážááá«áá±á¬áºáááºáž PHP 7.4 ááœáẠpreloading ááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá«ááœáẠá
áœááºážáá±á¬ááºáááºáá±á¬ááºážááœááºáááºááá¯ááŒááááºá PHP 8 ááœáẠJIT ááá¯ááá±á¬áºááŒáá¬ážáá«á
áááºááŒáá¡á±á¬ááºá Tarantool 2.0 ááẠSQL á¡ááœáẠáá¶á·ááá¯ážááŸá¯ áááºáá±á¬ááºážáá«áááºá SQL áááá¯ááá¯áá±á¬ááᯠá¡áá¯á¶ážááŒá¯á ááœá±ážáá»ááºááŒááºážá ááá·áºááœááºážááŒááºážá á¡ááºááááºáá¯ááºááŒááºážááŸáá·áº áá»ááºááŒááºáž áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒá®áž ááááºáá»á¬ážááᯠnoSQL (binary) áá®áá»áŸááŒááºážáá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á áá¯á·á
SQL ááááºáá»á¬ážááẠá¡ááœááºá¡áááºááŒá®ážá
áá¬ááá¯ááºáá« (áá»áœááºá¯ááºááá¯á·ááẠsynchronous mode ááᯠá
ááºážáááºáá±áá²ááŒá
áºááŒá±á¬ááºáž ááááá±ážáá«áá
á±)á ááá¯á·áá±á¬áºáááºážá á€ááá
á¹á
ááŸáá·áºáááºáááºá áá»áœááºá¯ááºá
áááºáááá¯ážáá«ááŸáá·áºá SQL áá¶á·ááá¯ážááŸá¯ááŸá¬ á¡áááºáááºáá±á¬ ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡á±á¬ááºááœáẠááŸááá«áá±ážááẠ(á¥ááá¬á¡á¬ážááŒáá·áº áááŒá¬áá±ážáá®áá á¡áá±á¬ááºá¡áá¶á·ááᯠááá·áºááœááºážáá²á·áááºá
async
áá±á¬ááºážááŒá®á ááᯠAsync extension ááẠá¡áááºáá±á¬áºááŒáá«ááááºáá»á¬ážááᯠááá¯ážáááºáá±á¬ááºážááœááºá¡á±á¬áẠáááºááá¯á·áá°áá®áá±ážááá¯ááºáááºááᯠááŒáá·áºááŒáá«á áá¯á·á asynchronous áááá¯ááááºáá»á¬ážáá±ážáááºá ááá¯ážáá»á²á·ááŸá¯ááẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá·áº coroutines áá»á¬ážá¡áá±á«áºá¡ááŒá±áá¶á API áá áºáá¯ááᯠáá¶á·ááá¯ážáá±ážáá«áááºá áá»áœááºá¯ááºááá¯á·ááááºáááºážáá»ááºá¡ááœáẠá¡áá±á¬ááºážááœááºáá¯á¶ážáá±á¬ áá±á¬áºááá¯áááºážá¡áá±á¡ááœááºááẠ25 ááŒá áºáááºááᯠáááºááœá±á·áá»áá» ááááŸáááá¯ááºáááº-
áá¯ááºááá¯ážáá¯ááºá
áẠ10,000 áá¯ááœáẠ"ááŒáá·áºáá»ááº" áááºáááºááŸá¯ 25 ááᯠááŒáá·áºááŒá®áž áá¬ááœá±ááŒá
áºááá²ááá¯áᬠááŒáá·áºááá¯ááºáá«-
áá
áºá
áá¹ááá·áºáá»áŸáẠá
á
áºáááºáá±áž á¡áá±á¡ááœááºááẠá ááá»á±á¬áº ááá¯ážáá¬áááºá
áááºážáááºážá áá¬ááŸá¬ PECL áá»áááºáááºáááááá¬ááẠext-async ááŒáá·áº áá áááºáá²á·áá«á
SQL ááá¯áá¬áá¬áá²á
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá asynchronous mode ááœáẠbinary protocol ááŸáá·áº SQL á¡ááŒá¬ážááœá¬ááŒá¬ážáá»ááºááẠerror áá¡áá¬ážáááºá¡ááœááºážááŸááŒá
áºáá¬áááºá
Swoole
Swoole á¡ááœáẠá€áá
áºááŒáááºááœáẠá¡áá±á¬ááºážáá¯á¶áž áá±á¬áºááá¯áááºáž á¡áá±á¡ááœááºááᯠáá»áœááºá¯ááºááá¯á· áááºáá¶ááŸá¬ááœá±ááœá±á·ááŸááá«áááºá
25 ááœáẠáááºááá¯ááºááŒáá«á
áá¯á·á Async extension ááŸáá·áº áá°áá®áá±á¬ááŸáá·áºááœááºááᯠááŒááºáá¯ááºááŒáá«á
áá¯á· - áá¯ááºááá¯ážáá¯ááºá
áẠ10,000 áá¯ááŒá¬ážááœáẠáá¯ááºáá±á¬ááºáá»áẠ25 ááᯠááŒáá·áºáá±áá«á ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá¯ááºá¡á¬ážáá¯á¶ážááᯠáá¯ááºáááºážá
áẠá áá¯á¡ááŒá
Ạááá¯ááºážááŒá¬ážááẠ(ááá¯ááá¯áááºááŸá¬á áá¯ááºáááºážá
ááºáá
áºáá¯á
á®ááẠcoroutines 2 áá¯ááœáẠ5,000 áááºáááºááŸá¯ 25 áá¯ááºáá±á¬ááºáá«áááº)á áá¯ááºáááºážá
ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºáá®ážáááºááŒá
áºáááºá SwooleProcess.
ááááºáá»á¬áž -
Swole ááẠáá¯ááºáááºážá
ááºáá
áºáá¯ááœáẠáá¯ááºáá±á¬ááºááá·áºá¡áá« Async ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á á¡áááºážáááºáááá·áºáá±á¬ ááááºááᯠááŒááá±á¬áºáááºáž áá¯ááºáááºážá
áẠ2 áá¯ááŒáá·áº áá¯ááºáá¯á¶ááẠáááááá¬áᬠááŒá±á¬ááºážáá²ááœá¬ážááẠ(áá¶áá«áẠ2 ááᯠááá±á¬áºáá ááœá±ážáá»ááºáá²á·ááŒááºážááá¯ááºáá«á áá»áœááºá¯ááºáá
ááºááœááºá áááºážááẠá¡áá±á¬ááºážáá¯á¶ážááááºááá¯ááŒáááá·áº áá¯ááºáááºážá
áẠ2 áá¯ááŒá
áºáááº)á
á áá¬ážáá ááºá Async ááá¯ážáá»á²á·ááŸá¯ááœáẠáá¯ááºáááºážá ááºáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠAPI áááºážáá«ááŸááá±á¬áºáááºážá áá¯ááºáááºážá ááºáá áºáᯠááá¯á·ááá¯áẠáá áºáá¯áááºááá¯áá±á¬ áá¯ááºáááºážá ááºáá»á¬ážááœáẠá á¶ááŸá¯ááºážáá»á¬ážááŸáá·áº ááœá¬ááŒá¬ážáá»ááºááᯠáá»áœááºá¯ááºááááááŒá¯áááá²á·áá«á
SQL ááŸáá·áº binary áááá¯ááá¯áá±á¬-
Async áá²á·ááá¯á·áááºá binary ááŸáá·áº SQL áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááŒá¬áž ááŒá¬ážáá¬ážáá»ááºááᯠá¡ááŒáá¯ááºá¡ááá¯ááºáá¯ááºááœáẠáááºááŸá¬ážáá¬ážáááºá
áá»ááºážááŒáá¯ááºáá±áá±á¬
Parallel extension ááẠcoroutines áá»á¬ážá¡ááŒá±á¬ááºážááá¯ááºá threads áá»á¬ážá¡ááŒá±á¬ááºážááŒá áºáá±á¬ááŒá±á¬áá·áºá parallel thread áá»á¬ážá á¡áá±á¬ááºážáá¯á¶ážá¡áá±á¡ááœááºááᯠááá¯ááºážáá¬ááŒáá«á áá¯á·á
áá«á·á
ááºááŸá¬ 16 áá²á·áá®áááºá Parallel thread 16 áá¯ááœáẠconnector benchmarks ááᯠrun ááŒáá«á
áá¯á·á
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá ááááºááẠá¡ááŒáá¯ááºá¡ááá¯ááºáááºáááºáá»á¬ážáááºááẠááá¯áá±á¬ááºážááẠ(áá¯ááºáááºážá
áẠ2 áá¯ááœáẠáá¯ááºáá±á¬ááºáá±ááá·áº Swoole ááᯠááá·áºáááœááºáá«)á PECL áá»áááºáááºáááááá¬á¡ááœááºá á¡ááºááááºááŸáá·áº Upsert áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠááá¬ááŒá
áºáá±ááŒá±á¬ááºáž áááááŒá¯áá«á á€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠá¡ááŸá¬ážá¡ááœááºážáá
áºáá¯ááŒá±á¬áá·áº áá»ááŸá¯á¶ážáááŒááºážááŒá
áºááẠ- áááºážááẠext-parallelá ext-tarantool ááá¯á·ááá¯áẠááŸá
áºáá¯áá¯á¶ážá á¡ááŸá¬ážá¡ááœááºážáá»á¬áž ááŸáá áááŸá ááááá«á
á¡áᯠSQL á áœááºážáá±á¬ááºáááºááᯠááŸáá¯ááºážááŸááºááŒáá·áºáá¡á±á¬ááºá
áááŒáá¯ááºáááºáááºáž áá¯ááºáá±á¬ááºáá±áá±á¬ áá»áááºáááºáááááá¬áá»á¬ážá¡ááœáẠááááºááŸáá·áº áááºáá°ááŸá¯ááᯠáááááŒá¯áááá«ááá¬ážá
á¡áá°áá°
áá±á¬ááºáá¯á¶ážá¡áá±áá²á·á á
ááºážáááºáá¬ážáá²á· extensions ááœá±á¡ááœáẠááŒá¯á¶áá¯á¶áá¯ááºáá¯á¶ááŒááºáááá¯á· ááááºáá
áºáá¯áá²ááŸá¬ ááááºá¡á¬ážáá¯á¶ážááᯠá¡áá»ááºážáá»á¯á¶ážááŒáá·áºáá¡á±á¬ááºá áá»áœááºá¯ááºááá¯á· áááŒá®ážáá±ážáá±á¬ ááá¬ážááœáẠá
ááºážáááºááŸá¯á¡áá
áºáá
áºáᯠáááºááá·áºááŒáá«á
áá¯á· - Parallel* ááᯠá¡áá¯á¶ážááŒá¯á Async coroutines ááᯠá¡ááŒáá¯ááºááœáá·áºááŒáá«á
áá¯á·á á¡áááºáá±á¬áºááŒáá« extensions áá»á¬ážááᯠáá±á«ááºážá
ááºááŒááºážá á
áááºáá°ážááẠááŸáááŸáá·áºááŒá®ážááŒá
áºáááºá
* Parallel ááŒáá·áº Swoole coroutines ááá¯ááœáá·áºáááºáááŒá áºááá¯ááºáá«á ဠextension áá»á¬ážááẠáááá¬ááááŒá áºáá¯á¶ááááºá
ááá¯á·ááŒá±á¬áá·áº áá±á¬ááºáá¯á¶ážááááºáá»á¬áž
á¡á²áá®á¡á á¬ážáá áºá¥á®ážáááá¯á¶ážááá¯ááºážá
áá»áœááºáá±á¬á·áºá¡ááŒááºá¡ááá±á¬á· ááááºááœá±á á¡áá±á¬áºáá±ážááᯠááá¯ááºáááºáááºááá¯á· áááºáááŒá®áž áá«á ááá·áºáááºáá»ááºááá¯ááºáá°ážááá¯áᬠáá±áá»á¬áá«áááºá á€á¡áá¬ááᯠá¡ááŸááºáááẠááá±á¬áá»ááºáá
áºáá¯ááœáẠáááºááá¯ááºááá¯ááºáᬠáá¯á¶ážááŒááºááẠááá¯á¡ááºáááºááŒá
áºá
á±á á¡á¬ážáá¯ááºááŸá¯á¡áááºážáá¯á¶ážááŒáá·áº synchronous TCP connector á០áááºáá»áŸ "ááŸá
áºááá¯ááºáááº" ááᯠá¡áá²ááŒááºááá¯ááºá
á±ááá·áº á
áááºáááºá
á¬ážá
áá¬áá±á¬ááºážáá±á¬ á
ááºážáááºáá»ááºáá
áºáá¯ááẠáá»áœááºá¯ááºá¡ááœááºáá¬ááŒá
áºááŒá±á¬ááºáž áá»áœááºáá±á¬áºááŒá±á¬áá«áááºá ááá·áºááœáẠá
á¶ááŸá¯ááºážáá»á¬áž ááá¯ážáááºá
á±ááẠá¡ááŒá¶á¥á¬ááºáá»á¬áž ááŸááá«áá áááºá ááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºááᯠááá·áºááœááºážá
ááºážá
á¬ážááẠáá»áœááºá¯áẠáá»á±áááºáá«áááºá á
áááºááŒááºážááá¯ááºáᬠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸáá·áº ááááºáá»á¬ážáá«ááŸááá±á¬ áá¯ááºá¡á¬ážáá¯á¶ážááᯠáá®ážááŒá¬ážááœá²áá¯ááºáá¬ážáá«áááºá
source: www.habr.com