Π PHP Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π΄Π²Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΡ ΡΡΡΠ²ΡΡΠ° Π½Π° Tarantool - ΡΠΎΠ²Π° Π΅ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ PECL ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π±ΠΈΡ
ΠΈΡΠΊΠ°Π» Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π΄Π²Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ 3-5 ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° (Π½Π° ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠ½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅!).
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅?
Π©Π΅ ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ, ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ-ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ. π Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΠΈΠΏΠ°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ°ΠΌΠΈΡΠ΅ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°Π»ΠΈΡΠ½ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ, Π·Π° Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅:
Swoole β Π²ΠΈΡΠΎΠΊΠΎΠ΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π° ΡΠ°ΠΌΠΊΠ° Π·Π° PHP. ΠΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ ΠΎΡ ΡΠ°ΠΊΠΈΠ²Π° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ Π³ΠΈΠ³Π°Π½ΡΠΈ ΠΊΠ°ΡΠΎ Alibaba ΠΈ Baidu. ΠΡ Π²Π΅ΡΡΠΈΡ 4.1.0 ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ SwooleRuntime::enableCoroutine(), ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° βΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ PHP ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ Ρ Π΅Π΄ΠΈΠ½ ΡΠ΅Π΄ ΠΊΠΎΠ΄β.- Async Π΄ΠΎΡΠΊΠΎΡΠΎ Π±Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠ°Π²Π°ΡΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π° Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½Π° ΡΠ°Π±ΠΎΡΠ° Π² PHP. ΠΠ°ΡΠΎ Π΄ΠΎΡΠΊΠΎΡΠΎ? ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½Π° Π·Π° ΠΌΠ΅Π½ ΠΏΡΠΈΡΠΈΠ½Π° Π°Π²ΡΠΎΡΡΡ ΠΈΠ·ΡΡΠΈ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΈ Π±ΡΠ΄Π΅ΡΠ°ΡΠ° ΡΡΠ΄Π±Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π΅ΡΡΠ½Π°. Π©Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ
Π΅Π΄ΠΈΠ½ ΠΎΡ Π²ΠΈΠ»ΠΈΡΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Swoole, ΡΠΎΠ²Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π»Π΅ΡΠ½ΠΎ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΠ°Π½ΡΠ°Π»ΠΎΠ½ΠΈΡΠ΅ ΡΠΈ Ρ Π΅Π΄Π½ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΈΡΠΊΠ°ΡΠ°, Π·Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡ, ΠΊΠ°ΡΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° TCP ΠΈ TLS ΠΏΠΎΡΠΎΡΠΈ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ. Π’ΠΎΠ²Π° ΡΡΠ°Π²Π° ΡΡΠ΅Π· ΠΎΠΏΡΠΈΡΡΠ° βasync.tcp = 1". ΠΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ β ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΎ Π½ΠΎΠ²ΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Π΄ΠΎΠ±ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠΈΡ ΠΠΆΠΎ Π£ΠΎΡΠΊΠΈΠ½Ρ, Π°Π²ΡΠΎΡ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ°ΡΠΎ phpdbg, apcu, pthreads, pcov, uopz. Π Π°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ API Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡ Π² PHP ΠΈ Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΡΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π» Π½Π° pthreads. ΠΠ½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΅, ΡΠ΅ ΡΡ ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ Ρ ZTS (Zend Thread Safe) Π²Π΅ΡΡΠΈΡ Π½Π° PHP.
ΠΠ°ΠΊ ΡΠ΅ ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅?
ΠΠ΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° Tarantool Ρ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ Π·Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ (wal_mode = Π½ΡΠΌΠ°) ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ ΠΌΡΠ΅ΠΆΠΎΠ² Π±ΡΡΠ΅Ρ (ΡΠ΅ΡΠ΅Π½Π΅ Π½Π°ΠΏΡΠ΅Π΄ = 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 XNUMX ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΎΡ ΡΠΎΡΠΌΠ°ΡΠ°
{id, "tuplΠ΅_<id>"}
ΠΠΎΡΡΡΠΏΡΡ Π΄ΠΎ ΠΊΠΎΡΡΠ΅ΠΆΠΈ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΡΠ΅Π· ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΊΠ»ΡΡ.
Π‘Π°ΠΌΠΈΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ Π΅ Π΅Π΄Π½Π° Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ ΡΡΡΠ²ΡΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° 10,000 5 ΠΏΡΡΠΈ (ΠΎΠ±ΠΎΡΠΎΡΠΈ), ΠΊΠΎΠΈΡΠΎ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΡΡ, Π΄ΠΎΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ 3 ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²Π° Π³ΡΠ΅ΡΠΊΠ° ΠΎΡ 1%*. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ° ΡΡΠ΅Π΄Π½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ. ΠΠΌΠ° ΠΏΠ°ΡΠ·Π° ΠΎΡ XNUMX ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅, Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈ Π΄ΡΠΎΡΠ΅Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. Π‘ΡΠ±ΠΈΡΠ°ΡΡΡ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ Π½Π° 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, ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ a872fc2f86
PHP: 7.3.11 (cli) (ΡΡΠ·Π΄Π°Π΄Π΅Π½: 22 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ 2019 Π³. 08:11:04)
tarantool/ΠΊΠ»ΠΈΠ΅Π½Ρ: 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
Π²ΡΠ½ΡΠ΅Π½ ΠΏΠ°ΡΠ°Π»Π΅Π»: 1.1.3
* ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅, ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡΡ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Ρ PHP Π²Π΅ΡΡΠΈΡ > 7.2. ΠΠ° Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° PHP 7.3, ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ
ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ
Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ
ΠΡΠΎΡΠΎΠΊΠΎΠ»ΡΡ Tarantool ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄Π²ΠΎΠΈΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΡΠ°Π²Π½ΠΈΠΌ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅, ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π΅Π½ΠΊΠΎΠ΄Π΅ΡΠΈΡΠ΅ MessagePack Π·Π° PHP ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° ΠΈ Π² ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠΎΠ·ΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ:
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° PHP (Pure) Π΅ ΠΏΠΎ-Π½ΠΈΡΠΊΠ° ΠΎΡ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ PECL ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡ, Π² ΡΠ΅Π°Π»Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π²ΡΠ΅ ΠΏΠ°ΠΊ Π±ΠΈΡ
ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ°Π» Π΄Π° Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅
Π ΡΠ°ΠΊΠ°, Π½Π΅ΠΊΠ° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅ Π² ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ:
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ ΠΎΡ Π³ΡΠ°ΡΠΈΠΊΠ°ΡΠ°, PECL ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΡΡ (Tarantool) ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ PHP ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° (ΠΊΠ»ΠΈΠ΅Π½Ρ). ΠΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π²Π°ΡΠΎ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ, ΠΎΡΠ²Π΅Π½ ΡΠ΅ Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ Π½Π° ΠΏΠΎ-Π±Π°Π²Π΅Π½ Π΅Π·ΠΈΠΊ, Π²ΡΡΡΠ½ΠΎΡΡ Π²ΡΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°: Ρ Π²ΡΡΠΊΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ² ΠΎΠ±Π΅ΠΊΡ ΠΠΎΠΈΡΠΊΠ°ΠΉΡΠ΅ ΠΈ ΠΡΠ³ΠΎΠ²ΠΎΡ (Π² ΡΠ»ΡΡΠ°Ρ Π½Π° Select - ΡΡΡΠΎ ΠΡΠΈΡΠ΅ΡΠΈΠΈ, Π° Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Update/Upsert β ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ), ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΡΡΠ·ΠΊΠ°, ΠΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊ ΠΈ ΡΡΠ΅Π½ΡΠΎΡ ΡΠ΅ ΡΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΡ ΡΠ΅ΠΆΠΈΠΉΠ½ΠΈ ΡΠ°Π·Ρ
ΠΎΠ΄ΠΈ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡΡΠ° ΡΠΈ ΠΈΠΌΠ° ΡΠ΅Π½Π°. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΎΠ±Π°ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡΡ Π½Π° PHP ΠΏΠΎΠΊΠ°Π·Π²Π° Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΈΠΌΠ° ΡΠ°Π·Π»ΠΈΠΊΠ°, ΡΡ Π΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΡΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π² PHP 7.4, Π΄Π° Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° JIT Π² PHP 8.
ΠΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ. Tarantool 2.0 Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° SQL. ΠΠ΅ΠΊΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Select, Insert, Update ΠΈ Delete, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ SQL ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΈ ΡΡΠ°Π²Π½ΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Ρ noSQL (Π΄Π²ΠΎΠΈΡΠ½ΠΈ) Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΈ:
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ SQL Π½Π΅ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°ΡΠΈ (Π½Π΅ΠΊΠ° Π²ΠΈ Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΡΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ). ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π½Π΅ Π±ΠΈΡ
ΡΠ΅ ΡΠ°Π·ΡΡΡΠΎΠΈΠ» Π·Π° ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄ΠΈ Π²ΡΠ΅ΠΌΠ΅; ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° SQL Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π² ΠΏΡΠΎΡΠ΅Ρ Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ (ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΡΠΊΠΎΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°
ΠΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½Π΅
Π, ΡΠ΅Π³Π° Π½Π΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Async ΠΌΠΎΠΆΠ΅ Π΄Π° Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅. ΠΠ° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ API, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. ΠΡΠΊΡΠΈΠ²Π°ΠΌΠ΅ Π΅ΠΌΠΏΠΈΡΠΈΡΠ½ΠΎ, ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈΡΡ Π±ΡΠΎΠΉ ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈ Π·Π° Π½Π°ΡΠ°ΡΠ° ΡΡΠ΅Π΄Π° Π΅ 25:
βΠ Π°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅ΡΠ΅β 10,000 25 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² XNUMX ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈ Π²ΠΈΠΆΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ:
ΠΡΠΎΡΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π² ΡΠ΅ΠΊΡΠ½Π΄Π° ΡΠ΅ Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ» Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 3 ΠΏΡΡΠΈ Π·Π°
ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅ PECL ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΡΡ Π½Π΅ ΡΡΠ°ΡΡΠΈΡΠ° Ρ ext-async.
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΊΠ°ΠΆΠ΅ΡΠ΅ Π·Π° SQL?
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΠΎΠΈΡΠ½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ SQL ΡΡΠ°Π½Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ°ΡΠ° Π³ΡΠ΅ΡΠΊΠ°.
Swoole
ΠΡΠ½ΠΎΠ²ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°ΠΌΠ΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈΡ Π±ΡΠΎΠΉ ΠΊΠΎΡΡΡΠΈΠ½ΠΈ, ΡΠΎΠ·ΠΈ ΠΏΡΡ Π·Π° Swoole:
ΠΠ΅ΠΊΠ° ΡΠΏΡΠ΅ΠΌ Π½Π° 25. ΠΠ΅ΠΊΠ° ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΡΡΠΈΡ ΡΡΠΈΠΊ ΠΊΠ°ΡΠΎ Ρ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Async β ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅ΡΠ΅ 10,000 25 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ 2 ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ ΡΠ΅ΡΡ, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΡΡΠ»Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π° 5,000 Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΠ° (Ρ.Π΅. Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ 25 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² XNUMX ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ). ΠΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° SwooleProcess.
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ:
Swole ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π½ΠΈΡΡΠΊ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Async, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π² Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ, Π½ΠΎ Ρ 2 ΠΏΡΠΎΡΠ΅ΡΠ° ΠΊΠ°ΡΡΠΈΠ½Π°ΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π΄ΡΠ°ΡΡΠΈΡΠ½ΠΎ (ΡΠΈΡΠ»ΠΎΡΠΎ 2 Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ; Π½Π° ΠΌΠΎΡΡΠ° ΠΌΠ°ΡΠΈΠ½Π° 2 ΠΏΡΠΎΡΠ΅ΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Ρ
Π° Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ).
ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Async ΡΡΡΠΎ ΠΈΠΌΠ° API Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ, Π½ΠΎ ΡΠ°ΠΌ Π½Π΅ Π·Π°Π±Π΅Π»ΡΠ·Π°Ρ ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ Π² Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ (Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΡΠΌ ΠΎΠ±ΡΡΠΊΠ°Π» Π½ΡΠΊΡΠ΄Π΅).
SQL ΡΡΠ΅ΡΡ Π΄Π²ΠΎΠΈΡΠ΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»:
ΠΠ°ΠΊΡΠΎ ΠΏΡΠΈ Async, ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΠΎΠΈΡΠ½ΠΈ ΠΈ SQL ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ° Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ.
ΠΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎΡΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΅ ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, Π° Ρ Π½ΠΈΡΠΊΠΈ, Π½Π΅ΠΊΠ° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈΡ Π±ΡΠΎΠΉ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π½ΠΈΡΠΊΠΈ:
ΠΠ° ΠΌΠΎΡΡΠ° ΠΌΠ°ΡΠΈΠ½Π° Π΅ 16. ΠΠ΅ΠΊΠ° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ Π½Π° 16 ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π½ΠΈΡΠΊΠΈ:
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ Π΅ Π΄ΠΎΡΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΡ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ (Π±Π΅Π· Π΄Π° ΡΠ΅ Π±ΡΠΎΠΈ Swoole, ΡΠ°Π±ΠΎΡΠ΅Ρ Π½Π° 2 ΠΏΡΠΎΡΠ΅ΡΠ°). ΠΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠ° PECL ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Update ΠΈ Upsert ΡΠ° ΠΏΡΠ°Π·Π½ΠΈ. Π’ΠΎΠ²Π° ΡΠ΅ Π΄ΡΠ»ΠΆΠΈ Π½Π° ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΠΈΡ
Π° Ρ Π³ΡΠ΅ΡΠΊΠ° - Π½Π΅ Π·Π½Π°ΠΌ Π΄Π°Π»ΠΈ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Π±Π΅ΡΠ΅ Π½Π° ext-parallel, ext-tarantool ΠΈΠ»ΠΈ ΠΈ Π½Π° Π΄Π²Π΅ΡΠ΅.
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΡΠ°Π²Π½ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° SQL:
ΠΠ°Π±Π΅Π»ΡΠ·Π²Π°ΡΠ΅ Π»ΠΈ ΡΡ
ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Ρ Π³ΡΠ°ΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ?
ΠΠ°Π΅Π΄Π½ΠΎ
Π Π½Π°ΠΊΡΠ°Ρ, Π½Π΅ΠΊΠ° ΠΎΠ±ΠΎΠ±ΡΠΈΠΌ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π² Π΅Π΄Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ°, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΡΡΠ»ΠΎΡΡΠ½Π°ΡΠ° ΠΊΠ°ΡΡΠΈΠ½Π° Π·Π° ΡΠ΅ΡΡΠ²Π°Π½ΠΈΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ. ΠΠ΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ Π½ΠΎΠ² ΡΠ΅ΡΡ ΠΊΡΠΌ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΠΉΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠΌΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ - Π½Π΅ΠΊΠ° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ Async ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Parallel*. ΠΠ΄Π΅ΡΡΠ° Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅ Π½Π° Π³ΠΎΡΠ½ΠΈΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π²Π΅ΡΠ΅ Π΅
* ΠΠ΅ Π±Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΡΡΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Swoole Ρ Parallel; ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΡΠ΅Π·ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ° Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈ.
Π ΡΠ°ΠΊΠ°, ΠΊΡΠ°ΠΉΠ½ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ:
ΠΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎ ΠΌΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΠΎΠΊΠ°Π·Π°Ρ
Π° Π΄ΠΎΡΡΠ° Π΄ΠΎΡΡΠΎΠΉΠ½ΠΈ ΠΈ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΏΡΠΈΡΠΈΠ½Π° ΡΡΠΌ ΡΠΈΠ³ΡΡΠ΅Π½, ΡΠ΅ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ°! ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ ΡΠΎΠ²Π° Π² ΡΠ΅Π°Π»Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅Π±Π΅ ΡΠΈ, ΡΠ΅ ΠΊΠ°ΠΆΠ° ΡΠ°ΠΌΠΎ, ΡΠ΅ Π·Π° ΠΌΠ΅Π½ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° βΠΈΠ·ΡΡΠΈΡΠΊΠ°ΡΠ΅β ΠΎΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π΅Π½ TCP ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΡΡΠΈΠ»ΠΈΡ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ΄Π΅ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ΡΠ΅, ΡΠ΅ ΡΠ΅ ΡΠ°Π΄Π²Π°ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ Π²Π°ΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅. Π¦Π΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΎ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com