Π ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ PHP Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Tarantool β ΡΡΠΎ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PECL
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Ρ
ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ±Π΅ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ 3-5 ΠΏΡΠΈΡΠΎΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ (Π½Π° ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΡΡΠ°Ρ
!).
Π§ΡΠΎ Π±ΡΠ΄Π΅ΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ?
ΠΡΠ΄Π΅ΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Π²ΡΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΡ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. π Π’Π°ΠΊΠΆΠ΅ ΠΌΡ Π½Π΅ Ρ ΠΎΡΠΈΠΌ ΡΡΠΎΠ³Π°ΡΡ ΠΊΠΎΠ΄ ΡΠ°ΠΌΠΈΡ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠΎΠ². ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ:
Swoole β Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ PHP. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-Π³ΠΈΠ³Π°Π½ΡΠ°ΠΌΠΈ ΠΊΠ°ΠΊ Alibaba ΠΈ Baidu. Π‘ Π²Π΅ΡΡΠΈΠΈ 4.1.0 ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π²ΠΎΠ»ΡΠ΅Π±Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ SwooleRuntime::enableCoroutine(), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Β«ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΠΊΠΎΠ΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ PHP Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅Β».- Async β Π΄ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²Π΅ΡΡΠΌΠ° ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π² PHP. ΠΠΎΡΠ΅ΠΌΡ Π΄ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ? Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΏΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠΈΠ½Π΅, Π°Π²ΡΠΎΡ ΡΠ΄Π°Π»ΠΈΠ» ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ°Ρ ΡΡΠ΄ΡΠ±Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΡΠΌΠ°Π½Π½Π°. ΠΡΠΈΠ΄Π΅ΡΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ
ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΎΡΠΊΠΎΠ². ΠΠ°ΠΊ ΠΈ Swoole, ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΈΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΊΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ Π±ΡΡΠΊΠΈ Π²ΠΊΠ»ΡΡΠΈΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ TCP ΠΈ TLS ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ. ΠΠ΅Π»Π°Π΅ΡΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠΈΡ «async.tcp = 1«. Parallel β Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Π½Π΅Π±Π΅Π·ΡΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ Joe Watkins, Π°Π²ΡΠΎΡΠ° ΡΠ°ΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΊΠ°ΠΊ phpdbg, apcu, pthreads, pcov, uopz. Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ API Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π² PHP ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½Π° pthreads. Π‘ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ ZTS (Zend Thread Safe) Π²Π΅ΡΡΠΈΠ΅ΠΉ PHP.
ΠΠ°ΠΊ Π±ΡΠ΄Π΅ΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ?
ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Tarantool’Π° Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΆΡΡΠ½Π°Π»ΠΎΠΌ ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ (wal_mode = none) ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½Π½ΡΠΌ ΡΠ΅ΡΠ΅Π²ΡΠΌ Π±ΡΡΠ΅ΡΠΎΠΌ (readahead = 1 * 1024 * 1024). ΠΠ΅ΡΠ²Π°Ρ ΠΎΠΏΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΠΈΡΠΊΠΎΠΌ, Π²ΡΠΎΡΠ°Ρ β Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡΠΈΡΡΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈΠ· Π±ΡΡΠ΅ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
ΠΠ»Ρ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ (Π²ΡΡΠ°Π²ΠΊΠ°, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Ρ.Π΄.) ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ°ΡΡΠΎΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° Π±ΡΠ΄Π΅Ρ (ΠΏΠ΅ΡΠ΅)ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ memtx-ΡΠΏΠ΅ΠΉΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠΌ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» (sequence).
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}})
ΠΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°, ΡΠΏΠ΅ΠΉΡ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ 10,000 ΠΊΠΎΡΡΠ΅ΠΆΠ°ΠΌΠΈ Π²ΠΈΠ΄Π°
{id, "tuplΠ΅_<id>"}
ΠΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΡΠ΅ΠΆΠ°ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ°.
Π‘Π°ΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ 10,000 ΡΠ°Π· (ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΉ), ΠΊΠΎΡΠΎΡΡΠ΅, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ . ΠΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²ΡΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ 5 ΠΈΡΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ Π½Π΅ ΠΎΠΊΠ°ΠΆΡΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎΡΡΠΈ Π² 3 %*. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±Π΅ΡΠ΅ΡΡΡ ΡΡΡΠ΅Π΄Π½Π΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠ΅ΠΆΠ΄Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ ΠΏΠ°ΡΠ·Π° Π² 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΡΠΎΠ±Ρ Π½Π΅ Π΄Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΡΠΉΡΠΈ Π² throttling. Π‘Π±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° Lua ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π΅Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. PHP-ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π΄Π»Ρ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ, Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π²ΡΠ²ΠΎΠ΄Π° ΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ°.
* ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΉ, ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ ΠΏΠΎΡΠΎΠ³ ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°.
Π’Π΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π½Ρ Π½Π° MacBookPro (2015), ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° β Fedora 30 (Π²Π΅ΡΡΠΈΡ ΡΠ΄ΡΠ° 5.3.8-200.fc30.x86_64). Tarantool Π·Π°ΠΏΡΡΠΊΠ°Π»ΡΡ Π² Π΄ΠΎΠΊΠ΅ΡΠ΅ Π² Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ «--network host"
.
ΠΠ΅ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²:
Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, build a872fc2f86
PHP: 7.3.11 (cli) (built: Oct 22 2019 08:11:04)
tarantool/client: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ ΠΏΠ°ΡΡ Π΄Π»Ρ 7.3)*
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, ΠΏΡΠΈΡΠ»ΠΎΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ
Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
ΠΡΠΎΡΠΎΠΊΠΎΠ» TarantoolβΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ
ΠΠ΅ΡΠ΅Π΄ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠΎΠ², ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ MessagePack ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ² Π΄Π»Ρ PHP-ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠ° ΠΈ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ ΡΠ΅ΡΡΠ°Ρ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π»ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
Π₯ΠΎΡΡ PHP Π²Π΅ΡΡΠΈΡ (Pure) ΠΈ ΡΡΡΡΠΏΠ°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ PECL Π² ΡΠΊΠΎΡΠΎΡΡΠΈ, Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
Ρ Π±Ρ Π²ΡΠ΅ ΠΆΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ
ΠΡΠ°ΠΊ, ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠΎΠ² Π² ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅:
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π³ΡΠ°ΡΠΈΠΊΠ°, ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡ PECL (Tarantool) ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠΎΠΌ Π½Π° PHP (Client). ΠΠΎ ΡΡΠΎ ΠΈ Π½Π΅ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ, ΠΏΠΎ ΡΡΡΠΈ, Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ: ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Request ΠΈ Response (Π² ΡΠ»ΡΡΠ°Π΅ Select β Π΅ΡΠ΅ ΠΈ Criteria, Π° Π² ΡΠ»ΡΡΠ°Π΅ Update/Upsert β Operations), ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ Connection, Packer ΠΈ Handler ΡΠΎΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΎΠ²Π΅ΡΡ
Π΅Π΄. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π·Π° Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ»Π°ΡΠΈΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΡΠ΅Π»ΠΎΠΌ, PHP-ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Ρ
ΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Ρ
ΠΎΡΡ ΡΠ°Π·Π½ΠΈΡΠ° ΠΈ Π΅ΡΡΡ, Π½ΠΎ ΠΎΠ½Π° Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ Π΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ preloading Π² PHP 7.4, Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΡΠΆΠ΅ ΠΎ JIT Π² PHP 8.
ΠΠ²ΠΈΠ³Π°Π΅ΠΌΡΡ Π΄Π°Π»ΡΡΠ΅. Π Tarantool 2.0 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° SQL. ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Select, Insert, Update ΠΈ Delete ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ SQL-ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ ΡΡΠ°Π²Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Ρ noSQL (Π±ΠΈΠ½Π°ΡΠ½ΡΠΌΠΈ) ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ°ΠΌΠΈ:
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ SQL Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡ (Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ ΠΌΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ). ΠΠ΄Π½Π°ΠΊΠΎ, Ρ Π±Ρ Π½Π΅ ΡΡΠ°Π» ΡΠ°ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΡΠ°Π½ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° SQL Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
Async
ΠΡ ΡΡΠΎ ΠΆ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Async ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π½Π°ΠΌ ΡΠ»ΡΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΡΠ΅. ΠΠ»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ API Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΡΡΠΈΠ½ (coroutines), ΠΈΠΌ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ. ΠΠΏΡΡΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ Π²ΡΡΡΠ½ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΡΡΡΠΈΠ½ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ°Π²Π½ΠΎ 25:
Β«Π Π°Π·ΠΌΠ°Π·ΡΠ²Π°Π΅ΠΌΒ» 10,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎ 25 ΠΊΠΎΡΡΡΠΈΠ½Π°ΠΌ ΠΈ ΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ:
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ Π²ΡΡΠΎΡΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² 3 ΡΠ°Π·Π° Π΄Π»Ρ
ΠΠ΅ΡΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡ PECL Π½Π΅ Π·Π°ΠΏΡΡΡΠΈΠ»ΡΡ Ρ ext-async.
Π ΡΡΠΎ c SQL?
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ ΠΈ SQL ΡΡΠ°Π»Π° Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎΡΡΠΈ.
Swoole
ΠΠΏΡΡΡ Π²ΡΡΡΠ½ΡΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΡΡΡΠΈΠ½, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΆΠ΅ Π΄Π»Ρ Swoole:
ΠΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π½Π° 25. ΠΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΠΎΡ ΠΆΠ΅ ΡΡΡΠΊ, ΡΡΠΎ ΠΈ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Async β ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ 10,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ 25 ΠΊΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅ΡΠ΅ ΡΠ΅ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ Π²ΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π° 2 Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΡΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ 5,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² 25 ΠΊΠΎΡΡΡΠΈΠ½Π°Ρ
). ΠΡΠΎΡΠ΅ΡΡΡ Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ SwooleProcess.
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ:
Swole ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Async ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, Π½ΠΎ Ρ 2 ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΊΠ°ΡΡΠΈΠ½Π° ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎ (ΡΠΈΡΠ»ΠΎ 2 Π²ΡΠ±ΡΠ°Π½ΠΎ Π½Π΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ, Π½Π° ΠΌΠΎΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ 2 ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ).
ΠΡΡΠ°ΡΠΈ, Π² ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΈ Async ΡΠΎΠΆΠ΅ Π΅ΡΡΡ API Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΌ Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ» ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠ°Π·Π½ΠΈΡΡ ΠΎΡ Π·Π°ΠΏΡΡΠΊΠ° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ (Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΎ, ΡΡΠΎ Ρ Π³Π΄Π΅-ΡΠΎ Π½Π°ΠΊΠΎΡΡΡΠΈΠ»).
SQL vs Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»:
Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ Async, ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌΠΈ ΠΈ SQL-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ Π½ΠΈΠ²Π΅Π»ΠΈΡΡΠ΅ΡΡΡ Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
Parallel
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Parallel Π½Π΅ ΠΏΡΠΎ ΠΊΠΎΡΡΡΠΈΠ½Ρ, Π½ΠΎ ΠΏΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²:
ΠΠ½ΠΎ ΡΠ°Π²Π½ΠΎ 16 Π½Π° ΠΌΠΎΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅. ΠΠ°ΠΏΡΡΡΠΈΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠΎΠ² Π½Π° 16 ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ
ΠΏΠΎΡΠΎΠΊΠ°Ρ
:
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π°ΠΆΠ΅ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ (Π½Π΅ ΡΡΠΈΡΠ°Ρ Swoole Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΌ Π½Π° 2 ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ
). ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π΄Π»Ρ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠ° PECL Π½Π° ΠΌΠ΅ΡΡΠ΅ Update ΠΈ Upsert ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΡΡΠΎ. Π‘Π²ΡΠ·Π°Π½ΠΎ ΡΡΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠ»Π΅ΡΠ΅Π»ΠΈ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ β Π½Π΅ Π·Π½Π°Ρ, ΠΏΠΎ Π²ΠΈΠ½Π΅ ext-parallel, ext-tarantool ΠΈΠ»ΠΈ ΠΎΠ±ΠΎΠΈΡ
.
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ SQL:
ΠΠ°ΠΌΠ΅ΡΠΈΠ»ΠΈ ΡΡ
ΠΎΠ΄ΡΡΠ²ΠΎ Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠΌ Π΄Π»Ρ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠΎΠ², Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ
ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ?
ΠΡΡ Π²ΠΌΠ΅ΡΡΠ΅
ΠΡ ΠΈ Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ, ΡΠ²Π΅Π΄Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΠΎΠ΄ΠΈΠ½ Π³ΡΠ°ΡΠΈΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΎΠ±ΡΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΡΡ
ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π½Π° Π³ΡΠ°ΡΠΈΠΊ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π΅ΡΠ΅ Π½Π΅ Π΄Π΅Π»Π°Π»ΠΈ β Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΊΠΎΡΡΡΠΈΠ½Ρ Async ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Parallel*. ΠΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ
ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΡΠΆΠ΅
* ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ Swoole Ρ Parallel Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΠΏΠΎΡ ΠΎΠΆΠ΅ ΡΡΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ.
ΠΡΠ°ΠΊ, ΡΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΠΎ-ΠΌΠΎΠ΅ΠΌΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈΡΡ Π²Π΅ΡΡΠΌΠ° Π΄ΠΎΡΡΠΎΠΉΠ½ΡΠ΅, ΠΈ Ρ ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄Π΅Π»! ΠΡΠΆΠ½ΠΎ Π»ΠΈ ΡΡΠΎ Π²Π°ΠΌ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠ΅ΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π°ΠΌ ΡΠ°ΠΌΠΈΠΌ, ΡΠΊΠ°ΠΆΡ Π»ΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ Π±ΡΠ» ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΎΡΠ΅Π½ΠΈΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Β«Π²ΡΠΆΠ°ΡΡΒ» ΠΈΠ· ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ TCP-ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ² β Ρ Ρ ΡΠ°Π΄ΠΎΡΡΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΡ Π²Π°Ρ ΠΏΡΠ» ΡΠ΅ΠΊΠ²Π΅ΡΡ. ΠΠ΅ΡΡ ΠΊΠΎΠ΄ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ ΠΏΠΎ Π·Π°ΠΏΡΡΠΊΡ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com