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-แแก แจแแแชแแแแแ. แแแแแแแแแแแก แแแแจแแแแแแแแแ แจแแแฆแฃแแแ แแก แแ แแก, แ แแ แแก แแฃแจแแแแก แแฎแแแแ PHP-แแก ZTS (Zend Thread Safe) แแแ แกแแแกแแแ.
แ แแแแ แแแแขแแกแขแแ?
แแแแแ แแแแฃแจแแแ 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 แขแแ แแ.
{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
Docker: 19.03.3, build a872fc2f86
PHP: 7.3.11 (cli) (แแจแแแแแฃแแแ: 22 แแฅแขแแแแแ แ 2019 08:11:04)
แขแแ แแแขแฃแแ/แแแแแแขแ: 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantool: 0.3.2 (+ patch for 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 แแแแแฅแขแแ แแแ (แแแแแแขแแแ) แจแแแแ แแแแ. แแแแ แแ แแก แแแกแแแแแ แ แแ แแ แแก, แแฃ แแแแแแแแแแกแฌแแแแแ, แ แแ แแก แฃแแแแแกแแแแแ, แแแ แแ แแแแกแ, แ แแ แแแแฎแแ แชแแแแแแแ แฃแคแ แ แแแ แแแแแ, แ แแแแฃแ แแ แฃแคแ แ แแแข แกแแแฃแจแแแก แแกแ แฃแแแแก: แงแแแแแ แแแแแซแแฎแแแแ แแฅแแแแแ แแฎแแแ แแแแแฅแขแ. แแแแแฎแแแแ ะธ แ แแแแแ แแแแก (แแ แฉแแแแก แจแแแแฎแแแแแจแ - แแกแแแ แแ แแขแแ แแฃแแแแแแ แแแแแฎแแแแแก/แแแแแฎแแแแแก แจแแแแฎแแแแแจแ - แแแแ แแชแแแแแก), แชแแแแแฃแแ แแ แแแฃแแแแ แแแแจแแ แ, Packer ะธ Handler แแกแแแ แแกแแแ แแแแขแแแแ แแแแแแแแแก. แชแฎแแแแ, แแแฅแแแแแแแก แคแแกแ แแฅแแก. แแฃแแชแ, แแแแแแแ, 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 แแแแ แแชแแแแก แจแแ แแก แแฆแแแแคแฎแแ แแแ แแกแแแฅแ แแแฃแ แ แแแแแจแ.
แแแ แแแแแฃแ แแ
แแแแแแแแ แแแ แแแแแฃแ แ แแแคแแ แแแแแ แแฎแแแ แแ แ แแแ แฃแขแแแแแก, แแ แแแแ แซแแคแแแก, แแแแแ แแแแแแแแ แแแ แแแแแฃแ แ แซแแคแแแแก แแแขแแแแแฃแ แ แ แแแแแแแแ:
แฉแแแก แแแแ แแขแแ แฃแแ แแก 16-แก. แแแแแ แแแแฃแจแแแ แแแแแฅแขแแ แแก แแขแแแแแแแ 16 แแแ แแแแแฃแ แซแแคแแ:
แ แแแแ แช แฎแแแแแ, แจแแแแแ แแแแแ แฃแแแแแกแแ, แแแแ แ แแกแแแฅแ แแแฃแแ แแแคแแ แแแแแแแแ (แแ แฉแแแแแแแ Swoole-แก, แ แแแแแแช แแฃแจแแแแก 2 แแ แแชแแกแแ). แแแแแแแแแกแฌแแแแ, แ แแ PECL แแแแแฅแขแแ แแกแแแแก, Update แแ Upsert แแแแ แแชแแแแ แชแแ แแแแแ. แแก แแแแแฌแแแฃแแแ แแแแ, แ แแ แแก แแแแ แแชแแแแ แจแแชแแแแแ แฉแแแจแแแ - แแ แแแชแ, แแก แแงแ ext-parallel-แแก, ext-tarantool-แแก แแฃ แแ แแแแก แแ แแแ.
แแฎแแ แจแแแแแแ แแ SQL แจแแกแ แฃแแแแ:
แจแแแแฉแแแแ แแกแแแแกแแแ แแ แแคแแแแแ แกแแแฅแ แแแฃแแแ แแแจแแแแฃแแ แแแแแฅแขแแ แแแแกแแแแก?
แแ แแแ
แแ แแแแแก, แแแแแ แจแแแแฏแแแแ แงแแแแ แจแแแแแ แแ แ แแ แแคแแแจแ, แ แแ แแแฎแแ แขแแกแขแแ แแแแแ แแแคแแ แแแแแแแแก แกแแแ แแ แกแฃแ แแแ. แแแแแ แแแแแแแขแแ แฉแแ แขแจแ แแฎแแแแ แแ แแ แแฎแแแ แขแแกแขแ, แ แแแแแแช แฏแแ แแ แแแแแแแแแแแแ - แแแ แแแแแฃแ แแ แแแแฃแจแแแ Async แแแ แฃแขแแแแแ Parallel*-แแก แแแแแงแแแแแแ. แแแแแแฆแแแจแแฃแแ แแแคแแ แแแแแแแแก แแแขแแแ แแ แแแแก แแแแ แฃแแแ แแ แกแแแแแก
* แจแแฃแซแแแแแแ แแงแ Swoole coroutine-แแแแก แแแจแแแแ Parallel-แแ; แ แแแแ แช แฉแแแก, แแก แแแคแแ แแแแแแแ แจแแฃแแแแกแแแแแแ.
แแกแ แ แแ, แกแแแแแแ แจแแแแแแแ:
แแแแก แแแชแแแแ, แ แแ แแแกแแแแ
แฉแแแ แแแ แแ, แจแแแแแแแ แกแแแแแแ แฆแแ แกแแฃแแ แแฆแแแฉแแแ แแ แ แแขแแแฆแแช แแแ แฌแแฃแแแแฃแแ แแแ , แ แแ แแก แแ แแ แแก แแฆแแแ แ! แแญแแ แแแแแ แแฃ แแ แ แแแแก แแแแแฌแงแแแขแ แ แแแแฃแ แแ แแแฅแขแจแ แแฎแแแแ แกแแแฃแแแ แ แแแแแกแแแแก, แแ แแฎแแแแ แแแขแงแแ, แ แแ แฉแแแแแแก แแก แแงแ แกแแแแขแแ แแกแ แแฅแกแแแ แแแแแขแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แจแแแคแแกแแ, แแฃ แ แแแแแแแ แจแแแแซแแแแ "แแแแแฌแฃแ แแ" แกแแแฅแ แแแฃแแ TCP แแแแแฅแขแแ แแแแ แแแแแแแแฃแ แ แซแแแแกแฎแแแแแ. แแฃ แแฅแแแ แแแฅแแ แแแแแแ แกแแแ แแแแขแแชแแ แแแจแแแแแก แแแกแแฃแแฏแแแแกแแแแแ, แกแแแแแแแแแแ แแแแแแฎแแแแ แแฅแแแแก แแแแฎแแแแแก. แงแแแแ แแแแ แแแจแแแแแก แแแกแขแ แฃแฅแชแแแแแแ แแ แจแแแแแแแแ แแแแแฅแแแงแแแแฃแแแ แชแแแแ
แฌแงแแ แ: www.habr.com