ΠΠΎ Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠΎΡ PHP Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠΌΠ° Π΄Π²Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Tarantool - ΠΎΠ²Π° Π΅ ΠΎΡΠΈΡΠΈΡΠ°Π»Π½Π°ΡΠ° Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΡΠ° PECL
ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°, Π±ΠΈ ΡΠ°ΠΊΠ°Π» Π΄Π° Π³ΠΈ ΡΠΏΠΎΠ΄Π΅Π»Π°ΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° Π΄Π²Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ ΠΊΠ°ΠΊΠΎ, ΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π·Π° 3-5 (Π½Π° ΡΠΈΠ½ΡΠ΅ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ!).
Π¨ΡΠΎ ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ°ΠΌΠ΅?
ΠΠ΅ Π³ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ³ΠΎΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΎ, ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΎ-ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ. π ΠΡΡΠΎ ΡΠ°ΠΊΠ°, Π½Π΅ ΡΠ°ΠΊΠ°ΠΌΠ΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ΄ΠΎΡ Π½Π° ΡΠ°ΠΌΠΈΡΠ΅ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ. ΠΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ Π·Π° Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΠΎΠ½Π° ΡΡΠΎ Π³ΠΎ ΡΠ°ΠΊΠ°ΡΠ΅:
Π‘Π²ΡΠ» β Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π° ΡΠ°ΠΌΠΊΠ° ΡΠΎ Π²ΠΈΡΠΎΠΊΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ Π·Π° 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). ΠΡΠ²Π°ΡΠ° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ ΡΠ° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΎ Π΄ΠΈΡΠΊΠΎΡ, Π²ΡΠΎΡΠ°ΡΠ° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° ΡΠ΅ ΡΠΈΡΠ°Π°Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ Π±Π°ΡΠ°ΡΠ° ΠΎΠ΄ Π±Π°ΡΠ΅ΡΠΎΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΡΠΎ ΡΠΎΠ° Π΄Π° ΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ° Π±ΡΠΎΡΠΎΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ.
ΠΠ° ΠΎΠ΄ΡΠ΅Π΄Π½ΠΈΡΠΈΡΠ΅ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ (Π²ΠΌΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅, Π±ΡΠΈΡΠ΅ΡΠ΅, ΡΠΈΡΠ°ΡΠ΅, ΠΈΡΠ½.), ΠΏΡΠ΅Π΄ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ ΡΠ΅ΠΏΠ΅ΡΠΎΡ, ΡΠ΅ ΡΠ΅ (ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ)ΡΠΎΠ·Π΄Π°Π΄Π΅ ΠΌΠ΅ΠΌΡΠΊΡ ΠΏΡΠΎΡΡΠΎΡ, Π²ΠΎ ΠΊΠΎΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ°ΡΠ½ΠΈΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΡΠ΅Π»ΠΈ Π±ΡΠΎΠ΅Π²ΠΈ (ΡΠ΅ΠΊΠ²Π΅Π½ΡΠ°).
ΠΡΠΎΡΡΠΎΡΠΎΡ 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 ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΏΠΎΠΌΠ΅ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ°ΡΠ° Π·Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ΅ΡΠΈ ΠΏΡΠΈΠ³ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ. Π‘ΠΎΠ±ΠΈΡΠ°ΡΠΎΡ Π½Π° ΡΡΠ±ΡΠ΅ Π½Π° ΠΡΠ° Π΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΏΡΠ΅Π΄ ΡΠ΅ΠΊΠΎΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ΅ ΠΈ Π΅ ΠΏΡΠΈΠ½ΡΠ΄Π΅Π½ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π·Π°Π²ΡΡΠΈ. ΠΡΠΎΡΠ΅ΡΠΎΡ Π½Π° PHP ΡΠ΅ ΡΡΠ°ΡΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΡΠΎ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΈ Π·Π° ΡΠ΅ΠΏΠ΅Ρ, ΡΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ Π±Π°ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΈΠ·Π»Π΅Π·ΠΎΡ ΠΈ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ±ΠΈΡΠ°Ρ Π½Π° ΡΡΠ±ΡΠ΅.
* ΠΡΠΎΡΠΎΡ Π½Π° Π²ΡΡΠ΅ΠΆΠΈ, ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ° ΠΈ ΠΏΡΠ°Π³ΠΎΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΌΠ΅Π½Π°Ρ Π²ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ Π·Π° ΡΠ΅ΠΏΠ΅Ρ.
Π’Π΅ΡΡ ΡΡΠ΅Π΄ΠΈΠ½Π°
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ»Ρ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ Π½Π° MacBookPro (2015), ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ - Fedora 30 (Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ 5.3.8-200.fc30.x86_64). Tarantool Π±Π΅ΡΠ΅ Π»Π°Π½ΡΠΈΡΠ°Π½ Π²ΠΎ Π΄ΠΎΠΊΠ΅Ρ ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ "--network host"
.
ΠΠ΅ΡΠ·ΠΈΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ:
Tarantool: 2.3.0-115-g5ba5ed37e
ΠΠΎΠΊΠ΅Ρ: 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 (+ patch Π·Π° 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 ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΎΡ (Client). ΠΠΎ, ΠΎΠ²Π° Π½Π΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄ΡΠ²Π°ΡΠΊΠΈ, ΠΈΠΌΠ°ΡΡΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° Π²ΡΠΎΡΠΈΠΎΡ, ΠΏΠΎΠΊΡΠ°Ρ ΡΠΎΠ° ΡΡΠΎ Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ Π½Π° ΠΏΠΎΠ±Π°Π²Π΅Π½ ΡΠ°Π·ΠΈΠΊ, Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅: ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π° Π½ΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎ ΡΠ΅ΠΊΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ ΠΠΎΠ±Π°ΡΠ° ΠΈ ΠΠ΄Π³ΠΎΠ²ΠΎΡ (Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΠΠ·Π±Π΅ΡΠ΅ΡΠ΅ - ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ, Π° Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΠΠΆΡΡΠΈΡΠ°ΡΠ΅/ΠΠΎΡΡΠ°Π²ΠΈ β ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ), ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ ΡΡΠ±ΡΠ΅ΠΊΡΠΈ Π²ΡΡΠΊΠ°, ΠΠ°ΠΊΡΠ²Π°Ρ ΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ ΠΈ ΡΠ΅ΠΆΠΈΡΠΊΠΈ ΡΡΠΎΡΠΎΡΠΈ. ΠΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ, ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡΠ° ΠΈΠΌΠ° ΡΠ²ΠΎΡΠ° ΡΠ΅Π½Π°. Π‘Π΅ΠΏΠ°ΠΊ, Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ, 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 ΠΊΠΎΡΡΡΠΈΠ½ΠΈ ΠΈ Π²ΠΈΠ΄Π΅ΡΠ΅ ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π°:
ΠΡΠΎΡΠΎΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄Π° ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΠΈ Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ 3 ΠΏΠ°ΡΠΈ Π·Π°
ΠΠ° ΠΆΠ°Π», PECL ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΎΡ Π½Π΅ Π·Π°ΠΏΠΎΡΠ½Π° ΡΠΎ ext-async.
Π¨ΡΠΎ Π΅ ΡΠΎ SQL?
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π²ΠΎ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ SQL ΡΡΠ°Π½Π° Π²ΠΎ ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΌΠ°ΡΠ³ΠΈΠ½Π°ΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠ°.
Π‘Π²ΡΠ»
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎ Π³ΠΎ Π΄ΠΎΠ·Π½Π°Π²Π°ΠΌΠ΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈΠΎΡ Π±ΡΠΎΡ Π½Π° ΠΊΠΎΡΡΡΠΈΠ½ΠΈ, ΠΎΠ²ΠΎΡ ΠΏΠ°Ρ Π·Π° Π‘Π²ΡΠ»:
ΠΠ° Π·Π°ΡΡΠ°Π½Π΅ΠΌΠ΅ Π½Π° 25. ΠΠ° Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌΠ΅ ΠΈΡΡΠΈΠΎΡ ΡΡΠΈΠΊ ΠΊΠ°ΠΊΠΎ ΡΠΎ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΡΠ°ΡΠ° Async - Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°ΡΡΠ΅ 10,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠΌΠ΅ΡΡ 25 ΠΊΠΎΡΡΡΠΈΠ½ΠΈ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΡΡΡΠ΅ Π΅Π΄Π΅Π½ ΡΠ΅ΡΡ Π²ΠΎ ΠΊΠΎΡ ΡΠ΅Π»Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ ΡΠ° ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ Π½Π° 2 Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΠ° (ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ, ΡΠ΅ΠΊΠΎΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ 5,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΠΎ 25 ΠΊΠΎΡΡΡΠΈΠ½ΠΈ). ΠΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ SwooleProcess.
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ:
Swole ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ½ΠΈΠ·ΠΎΠΊ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π²ΠΎ ΡΠΏΠΎΡΠ΅Π΄Π±Π° ΡΠΎ Async ΠΊΠΎΠ³Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π²ΠΎ Π΅Π΄Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ, Π½ΠΎ ΡΠΎ 2 ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π΄ΡΠ°ΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π° (Π±ΡΠΎΡΠΎΡ 2 Π½Π΅ Π±Π΅ΡΠ΅ ΡΠ»ΡΡΠ°ΡΠ½ΠΎ ΠΈΠ·Π±ΡΠ°Π½; Π½Π° ΠΌΠΎΡΠ°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°, ΡΠΎΠ° Π±Π΅Π° 2 ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΊΠΎΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ°Π° Π½Π°ΡΠ΄ΠΎΠ±Π°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ).
ΠΠ°ΡΠ΅ΠΌ, Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΡΠ°ΡΠ° Async ΠΈΠΌΠ° ΠΈ API Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΠΈ, Π½ΠΎ ΡΠ°ΠΌΡ Π½Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π² ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ Π²ΠΎΠ΄Π΅ΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²ΠΈ Π²ΠΎ Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ (ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΡΠΌ Π·Π±ΡΠΊΠ°Π» Π½Π΅ΠΊΠ°Π΄Π΅).
SQL Π½Π°ΡΠΏΡΠΎΡΠΈ Π±ΠΈΠ½Π°ΡΠ΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»:
ΠΠ°ΠΊΠΎ ΠΈ ΠΊΠ°Ρ Async, ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΡΠ΅ ΠΈ SQL ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΡΠ΅ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ° Π²ΠΎ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠΎΡ ΡΠ΅ΠΆΠΈΠΌ.
ΠΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ
ΠΠΈΠ΄Π΅ΡΡΠΈ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° Parallel Π½Π΅ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π½Π° ΠΊΠΎΡΡΡΠΈΠ½ΠΈ, ΡΡΠΊΡ Π·Π° Π½ΠΈΡΠΊΠΈ, Π°ΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠ΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΈΠΎΡ Π±ΡΠΎΡ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π½ΠΈΡΠΊΠΈ:
Π’ΠΎΠ° Π΅ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ Π½Π° 16 Π½Π° ΠΌΠΎΡΠ°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°. ΠΡΠ΄Π΅ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ ΡΠ΅ΠΏΠ΅ΡΠΈ Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ Π½Π° 16 ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π½ΠΈΡΠΊΠΈ:
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ Π΅ ΡΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π°Ρ ΠΎΡΠΊΠΎΠ»ΠΊΡ ΡΠΎ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ (Π½Π΅ ΡΠΌΠ΅ΡΠ°ΡΡΠΈ Π³ΠΎ Swoole ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π½Π° 2 ΠΏΡΠΎΡΠ΅ΡΠΈ). ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π·Π° PECL ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΎΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Update ΠΈ Upsert ΡΠ΅ ΠΏΡΠ°Π·Π½ΠΈ. ΠΠ²Π° ΡΠ΅ Π΄ΠΎΠ»ΠΆΠΈ Π½Π° ΡΠ°ΠΊΡΠΎΡ Π΄Π΅ΠΊΠ° ΠΎΠ²ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ ΡΡΠΏΠ΅Π°ΡΠ° ΡΠΎ Π³ΡΠ΅ΡΠΊΠ° - Π½Π΅ Π·Π½Π°ΠΌ Π΄Π°Π»ΠΈ ΡΠΎΠ° Π±Π΅ΡΠ΅ Π²ΠΈΠ½Π° Π½Π° ext-parallel, ext-tarantool ΠΈΠ»ΠΈ ΠΈ Π΄Π²Π΅ΡΠ΅.
Π‘Π΅Π³Π° Π΄Π° Π³ΠΈ ΡΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠ΅ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° SQL:
ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ ΡΠ° ΡΠ»ΠΈΡΠ½ΠΎΡΡΠ° ΡΠΎ Π³ΡΠ°ΡΠΈΠΊΠΎΡ Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈΡΠ΅ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΎ?
ΠΠ°Π΅Π΄Π½ΠΎ
Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π° Π³ΠΈ ΡΡΠΌΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π²ΠΎ Π΅Π΄Π΅Π½ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½ Π·Π° Π΄Π° ΡΠ° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΡΠ΅Π»ΠΎΠΊΡΠΏΠ½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° Π·Π° ΡΠ΅ΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ. ΠΡΠ΄Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄Π΅Π½ Π½ΠΎΠ² ΡΠ΅ΡΡ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠΎΠ½ΠΎΡ, ΠΊΠΎΡ ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ ΡΠΌΠ΅ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»Π΅ - Π°ΡΠ΄Π΅ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Π΄Π° Π³ΠΈ ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ Async ΠΊΠΎΡΡΡΠΈΠ½ΠΈΡΠ΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Parallel*. ΠΠ΄Π΅ΡΠ°ΡΠ° Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΡΠ΅ Π½Π° Π³ΠΎΡΠ΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡΠ΅ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ Π΅ Π²Π΅ΡΠ΅
* ΠΠ΅ Π±Π΅ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π°Ρ Swoole ΠΊΠΎΡΡΡΠΈΠ½ΠΈ ΡΠΎ Parallel, ΡΠ΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ΠΎΠ²ΠΈΠ΅ Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ ΡΠ΅ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΈ.
ΠΠ½Π°ΡΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ:
ΠΠ°ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠΎΠΊ
Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠΎΠ΅ ΠΌΠΈΡΠ»Π΅ΡΠ΅, ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ°Π° ΡΠΎΡΠ΅ΠΌΠ° Π΄ΠΎΡΡΠΎΡΠ½ΠΈ, ΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΊΠΎΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° ΡΠΈΠ³ΡΡΠ΅Π½ ΡΡΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π½Π΅ Π΅ Π³ΡΠ°Π½ΠΈΡΠ°! ΠΠ°Π»ΠΈ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΡΠ΅ΡΠΈΡΠ΅ ΠΎΠ²Π° Π²ΠΎ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅Π±Π΅, ΡΠ°ΠΌΠΎ ΡΠ΅ ΠΊΠ°ΠΆΠ°ΠΌ Π΄Π΅ΠΊΠ° Π·Π° ΠΌΠ΅Π½Π΅ ΡΠΎΠ° Π±Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ ΠΊΠΎΡ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΊΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° βΠΈΡΡΠ΅Π΄ΠΈΡΠ΅β ΠΎΠ΄ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠΎΡ TCP ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡ ΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π½Π°ΠΏΠΎΡ. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ΄Π΅ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π½ΠΈΡΠΈΡΠ΅, ΡΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΡΠ²ΠΎ ΡΠ΅ Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ Π²Π°ΡΠ΅ΡΠΎ Π±Π°ΡΠ°ΡΠ΅ Π·Π° ΠΏΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅. Π¦Π΅Π»ΠΈΠΎΡ ΠΊΠΎΠ΄ ΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π΅ ΠΎΠ±ΡΠ°Π²Π΅Π½ Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π½Π°
ΠΠ·Π²ΠΎΡ: www.habr.com