
Π Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° PHP Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π΄Π²Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΡ ΡΡΡΠ²ΡΡΠ° Tarantool β ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ PECL , Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° C, ΠΈ , Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° PHP. ΠΠ· ΡΡΠΌ Π°Π²ΡΠΎΡΡΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π±ΠΈΡ
ΠΈΡΠΊΠ°Π» Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° Π΄Π²Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ, Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ 3-5% ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° (Π½Π° ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅!)).
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅?
Π©Π΅ ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ, ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ, ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ. π Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΠΈΠΏΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ΡΠΎ Π½Π° ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ:
- β Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅Π½ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π·Π° PHP. ΠΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Π³ΠΈΠ³Π°Π½ΡΠΈ ΠΊΠ°ΡΠΎ Alibaba ΠΈ Baidu. Π‘ Π²Π΅ΡΡΠΈΡ 4.1.0 ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ SwooleRuntime::enableCoroutine(), ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Ρ Β«Π΅Π΄Π½Π° Π»ΠΈΠ½ΠΈΡ ΠΊΠΎΠ΄ Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° PHP Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈΒ».
- Async β Π΄ΠΎ Π½Π΅ΠΎΡΠ΄Π°Π²Π½Π° Π΄ΠΎΡΡΠ° ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π° ΡΠ°Π±ΠΎΡΠ° Π² PHP. ΠΠ°ΡΠΎ Π΄ΠΎ Π½Π΅ΠΎΡΠ΄Π°Π²Π½Π°? ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΏΡΠΈΡΠΈΠ½Π°, Π°Π²ΡΠΎΡΡΡ ΠΈΠ·ΡΡΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΎ ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π΅ΡΡΠ½ΠΎ. Π©Π΅ ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΡ ΡΠΎΡΠΊΠΎΠ²Π΅ΡΠ΅. ΠΠ°ΠΊΡΠΎ ΠΈ Swoole, ΡΠΎΠ²Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Ρ Π»Π΅ΡΠ½ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡ, Π·Π°ΠΌΠ΅Π½ΡΠΉΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° TCP ΠΈ TLS ΠΏΠΎΡΠΎΡΠΈ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ. Π’ΠΎΠ²Π° ΡΡΠ°Π²Π° ΡΡΠ΅Π· ΠΎΠΏΡΠΈΡΡΠ° Β«async.tcp = 1Β«.
- β Π΄ΠΎΡΡΠ° Π½ΠΎΠ²ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡ Joe Watkins, Π°Π²ΡΠΎΡ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ°ΡΠΎ phpdbg, apcu, pthreads, pcov, uopz. Π Π°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ API Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ° Π² PHP ΠΈ ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠ° ΠΊΠ°ΡΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π» Π½Π° pthreads. ΠΠ½Π°ΡΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΅, ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ Ρ ZTS (Zend Thread Safe) Π²Π΅ΡΡΠΈΡ Π½Π° PHP.
ΠΠ°ΠΊ ΡΠ΅ ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅?
Π©Π΅ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ Π½Π° Tarantool Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ ΠΆΡΡΠ½Π°Π» Π·Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ (wal_mode = none) ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ ΠΌΡΠ΅ΠΆΠΎΠ² Π±ΡΡΠ΅Ρ (readahead = 1 * 1024 * 1024). ΠΡΡΠ²Π°ΡΠ° ΠΎΠΏΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Π΄ΠΈΡΠΊΠ°, Π° Π²ΡΠΎΡΠ°ΡΠ° ΡΠ΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΡΠ΅ΡΠ΅ΠΌ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ Π±ΡΡΠ΅ΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π±ΡΠΎΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ.
ΠΠ° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ Ρ Π΄Π°Π½Π½ΠΈ (Π²ΠΌΡΠΊΠ²Π°Π½Π΅, ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅, ΡΠ΅ΡΠ΅Π½Π΅ ΠΈ Ρ.Π½.), ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°, ΡΠ΅ ΡΠ΅ (ΠΏΡΠ΅)ΡΡΠ·Π΄Π°Π΄Π΅ memtx ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π² ΠΊΠΎΠ΅ΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΡΠ²ΠΈΡΠ½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΎΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π° (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ).
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 ΠΏΡΡΠΈ (ΡΠ΅volucii), ΠΊΠΎΠΈΡΠΎ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π² ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΡΡ, Π΄ΠΎΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ Π²ΡΠ² Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ 5 ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ ΠΎΡΡΠ°Π½Π°Ρ Π² Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ°ΡΠ° Π³ΡΠ°Π½ΠΈΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠ° ΠΎΡ 3 %*. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π²Π·ΠΈΠΌΠ° ΡΡΠ΅Π΄Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ. ΠΠ΅ΠΆΠ΄Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΠΈΠΌΠ° ΠΏΠ°ΡΠ·Π° ΠΎΡ 1 ΡΠ΅ΠΊΡΠ½Π΄Π°, Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° Π΄Π° Π²Π»Π΅Π·Π΅ Π² throttling. Garbage collector Π½Π° Lua ΡΠ΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΠΏΡΠ΅Π΄ΠΈ Π²ΡΡΠΊΠ° ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΈ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ»Π΅Π΄ Π½Π΅ΠΉΠ½ΠΎΡΠΎ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅. PHP ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΡΠ°ΠΌΠΎ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π·Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°, Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ Π±ΡΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° ΠΈ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ garbage collector.
* ΠΡΠΎΡΡ Π½Π° ΡΠ΅volucii, ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΡΠ°Π³ Π½Π° Π³ΡΠ΅ΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°.
Π’Π΅ΡΡΠΎΠ²Π° ΡΡΠ΅Π΄Π°
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΈΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π±ΡΡ
Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ Π½Π° MacBookPro (2015), ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° β Fedora 30 (Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ 5.3.8-200.fc30.x86_64). Tarantool ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ Π² Docker Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ "--network host".
ΠΠ΅ΡΡΠΈΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅:
Tarantool: 2.3.0-115-g5ba5ed37e
Docker: 19.03.3, build a872fc2f86
PHP: 7.3.11 (cli) (ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½: 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 ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ Π·Π° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° PECL ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π΅ Π΄ΡΠ»Π±ΠΎΠΊΠΎ ΡΠΊΡΠΈΡΠ° Π² Π½Π΅Π΄ΡΠ°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΈ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ ΠΎΡ userland-ΠΊΠΎΠ΄ . ΠΠΎΠ½Π΅ΠΊΡΠΎΡ Π½Π° ΡΠΈΡΡ ΡΠΈΡΡ PHP ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· ΡΠ°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΠΊΠΎΠ΄Π΅ΠΊ ΠΈΠ»ΠΈ ΡΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. Π Π½Π°Π»ΠΈΡΠ½ΠΎΡΡ ΡΠ° Π΄Π²Π° ΠΊΠΎΠ΄Π΅ΠΊΠ°, Π΅Π΄ΠΈΠ½ΠΈΡΡ Π΅ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° (ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ MessagePack PECL), Π° Π΄ΡΡΠ³ΠΈΡΡ β Π½Π° (Π½Π° ΡΠΈΡΡ PHP).
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΡΠ°Π²Π½ΠΈΠΌ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅, Π½Π΅ΠΊΠ° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° MessagePack ΠΊΠΎΠ΄Π΅ΡΠΈΡΠ΅ Π·Π° PHP ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠΎΠ·ΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ:

ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ PHP Π²Π΅ΡΡΠΈΡΡΠ° (Pure) ΠΈΠ·ΠΎΡΡΠ°Π²Π° ΠΎΡ PECL ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡ, Π² ΡΠ΅Π°Π»Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π²ΡΠ΅ ΠΏΠ°ΠΊ Π±ΠΈΡ
ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ°Π» Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠΌΠ΅Π½Π½ΠΎ , Π·Π°ΡΠΎΡΠΎ Π² ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ MessagePack ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΡΠΎΡΠΌΠ°ΡΠ° Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΡΠ°ΠΌΠΎ ΡΠ°ΡΡΠΈΡΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΈΠΏΡΠ²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ, Π±Π΅Π· ΠΊΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Decimal β Π½ΠΎΠ²ΠΈΡ ΡΠΈΠΏ Π΄Π°Π½Π½ΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π² Tarantool 2.3) ΠΈ ΠΈΠΌΠ° ΡΠ΅Π΄ΠΈΡΠ° Π΄ΡΡΠ³ΠΈ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΠ° Ρ PHP 7.4). Π ΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ, ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π·Π°Π½Π΅ΠΌΠ°ΡΠ΅Π½.
Π ΡΠ°ΠΊΠ°, Π΄Π° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅ Π² ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ:

ΠΠ°ΠΊΡΠΎ ΡΠ΅ Π²ΠΈΠΆΠ΄Π° ΠΎΡ Π³ΡΠ°ΡΠΈΠΊΠ°, ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΡΡ PECL (Tarantool) ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° Π½Π° PHP (Client). ΠΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π°, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ, ΠΎΡΠ²Π΅Π½ ΡΠ΅ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π½Π° ΠΏΠΎ-Π±Π°Π²Π΅Π½ Π΅Π·ΠΈΠΊ, Π²ΡΡΡΠ½ΠΎΡΡ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°: ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ² ΠΎΠ±Π΅ΠΊΡ Request ΠΈ ΠΡΠ³ΠΎΠ²ΠΎΡ (Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° 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 Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π² Π°ΠΊΡΠΈΠ²Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠΊΠΎΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ) ΠΈ, ΡΡΠ΄Π΅ΠΉΠΊΠΈ ΠΏΠΎ ΡΠΏΠΈΡΡΠΊΠ° , SQL Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΡΡ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ°ΠΊΠ° ΡΠ΅Π΄ΠΈΡΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ
Π ΡΠ°ΠΊΠ°, Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Async ΠΌΠΎΠΆΠ΅ Π΄Π° Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅. ΠΠ° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° API, Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° ΠΊΠΎΡΡΡΠΈΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. ΠΠΏΠΈΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΡΡΡΠΈΠ½ΠΈ Π·Π° Π½Π°ΡΠ°ΡΠ° ΡΡΠ΅Π΄Π° Π΅ 25:

βΠ Π°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΠΌΠ΅β 10,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ 25 ΠΊΠΎΡΡΡΠΈΠ½ΠΈ ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°:

ΠΡΠΎΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π° Π½Π°ΡΠ°ΡΠ½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 3 ΠΏΡΡΠΈ Π·Π° !
ΠΠ°Π»ΠΊΠΎ, Π½ΠΎ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΡΡ PECL Π½Π΅ ΡΡΠ°ΡΡΠΈΡΠ° Ρ ext-async.
Π ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° SQL?

ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ SQL ΡΡΠ°Π½Π° Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π°.
Swoole
ΠΡΠ½ΠΎΠ²ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΡΡΡΠΈΠ½ΠΈ, ΡΠΎΠ·ΠΈ ΠΏΡΡ Π·Π° Swoole:

Π©Π΅ ΡΠ΅ ΡΠΏΡΠ΅ΠΌ Π½Π° 25. Π©Π΅ ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΡΡΠΈΡ ΡΡΠΈΠΊ, ΠΊΠ°ΠΊΡΠΎ Ρ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Async - ΡΠ΅ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ 10,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ 25 ΠΊΠΎΡΡΡΠΈΠ½ΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈ ΡΠ΅ΡΡ, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΡΡΠ»Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π° 2 ΠΏΡΠΎΡΠ΅ΡΠ° (ΡΠΎΠ΅ΡΡ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° 5,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² 25 ΠΊΠΎΡΡΡΠΈΠ½ΠΈ). ΠΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° SwooleProcess.
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ:

Swoole ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π½ΠΈΡΡΠΊ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Async ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π² Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ, Π½ΠΎ Ρ 2 ΠΏΡΠΎΡΠ΅ΡΠ° ΠΊΠ°ΡΡΠΈΠ½Π°ΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΡΠ΅Π½Π½ΠΎ (ΡΠΈΡΠ»ΠΎΡΠΎ 2 Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ, Π½Π° ΠΌΠΎΡΡΠ° ΠΌΠ°ΡΠΈΠ½Π° ΠΈΠΌΠ΅Π½Π½ΠΎ 2 ΠΏΡΠΎΡΠ΅ΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Ρ
Π° Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ).
ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, Π² ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Async ΡΡΡΠΎ ΠΈΠΌΠ° API Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ, ΠΎΠ±Π°ΡΠ΅ ΡΠ°ΠΌ Π½Π΅ Π·Π°Π±Π΅Π»ΡΠ·Π°Ρ ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ Π² Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΠ° (Π½Π΅ Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΎ, ΡΠ΅ ΡΡΠΌ ΡΠ³ΡΠ΅ΡΠΈΠ» Π½Π΅ΡΠΎ).
SQL ΡΡΠ΅ΡΡ Π±ΠΈΠ½Π°ΡΠ΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»:

ΠΠ°ΠΊΡΠΎ ΠΈ Ρ Async, ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΠΈ SQL ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ Π½Π΅ΡΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ.
Parallel
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Parallel Π½Π΅ ΡΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π·Π° ΠΊΠΎΡΡΡΠΈΠ½ΠΈ, Π° Π·Π° ΠΏΠΎΡΠΎΡΠΈ, ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ ΠΏΠΎΡΠΎΡΠΈ:

Π’ΠΎ Π΅ ΡΠ°Π²Π½ΠΎ Π½Π° 16 Π½Π° ΠΌΠΎΡΡΠ° ΠΌΠ°ΡΠΈΠ½Π°. ΠΠ΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅ Π½Π° 16 ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ ΠΏΠΎΡΠΎΠΊΠ°:

ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ Π΅ Π΄ΠΎΡΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ (Π±Π΅Π· Π΄Π° Π±ΡΠΎΠΈΠΌ Swoole, ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΎ Π½Π° 2 ΠΏΡΠΎΡΠ΅ΡΠ°). ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° PECL Π½Π° ΠΌΠ΅ΡΡΠ°ΡΠ° Π½Π° Update ΠΈ Upsert ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π΅ ΠΏΡΡΡΠΎ. Π‘Π²ΡΡΠ·Π°Π½ΠΎ Π΅ Ρ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°Π²ΡΡΡΠΈΡ
Π° Ρ Π³ΡΠ΅ΡΠΊΠ° - Π½Π΅ Π·Π½Π°ΠΌ ΠΏΠΎ Π²ΠΈΠ½Π° Π½Π° ext-parallel, ext-tarantool ΠΈΠ»ΠΈ ΠΈ Π΄Π²Π΅ΡΠ΅.
Π‘Π΅Π³Π° ΡΠ΅ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° SQL:

ΠΠ°Π±Π΅Π»ΡΠ·Π²Π°ΡΠ΅ Π»ΠΈ ΡΡ
ΠΎΠ΄ΡΡΠ²ΠΎ Ρ Π³ΡΠ°ΡΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅, ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ?
ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°
Π Π½Π° ΡΠΈΠ½Π°Π», ΡΠΎΠ±Π΅ΡΠ΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΠΎΠ΄ΠΈΠ½ Π³ΡΠ°ΡΠΈΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π½Π° Π³ΡΠ°ΡΠΈΠΊ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π΅ΡΠ΅ Π½Π΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ β Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΊΠΎΡΡΡΠΈΠ½Ρ Async ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Parallel*. ΠΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΡΠΆΠ΅ Π°Π²ΡΠΎΡΠ°ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡ ΡΠ°ΠΊ ΠΈ Π½Π΅ Π±ΡΠ» Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΌΠΈΠΌ.
* ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ Swoole Ρ Parallel Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΠΏΠΎΡ ΠΎΠΆΠ΅ ΡΡΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ.
ΠΡΠ°ΠΊ, ΡΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:

ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠ³Π»ΡΠ΄ΡΡ Π²Π΅ΡΡΠΌΠ° Π΄ΠΎΡΡΠΎΠΉΠ½ΠΎ, ΠΈ Ρ ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄Π΅Π»! ΠΡΠΆΠ½ΠΎ Π»ΠΈ ΡΡΠΎ Π²Π°ΠΌ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠ΅ΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π°ΠΌ ΡΠ°ΠΌΠΈΠΌ, ΡΠΊΠ°ΠΆΡ Π»ΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ Π±ΡΠ» ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ, Π΄Π°ΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ΅Π½ΠΈΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Β«Π²ΡΠΆΠ°ΡΡΒ» ΠΈΠ· ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ TCP-ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ² β Ρ Ρ ΡΠ°Π΄ΠΎΡΡΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΡ Π²Π°Ρ ΠΏΡΠ» ΡΠ΅ΠΊΠ²Π΅ΡΡ. ΠΠ΅ΡΡ ΠΊΠΎΠ΄ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ ΠΏΠΎ Π·Π°ΠΏΡΡΠΊΡ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ .
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
