ืืื ืืืืืื ืคื 10 ืืช ืืกืคืจ ืืฉืืืืชืืช ืืืกื ืื ืชืื ืื ืืืื ืืขืืืจ ืืฉืจืช ืคืจืืืืงืืืื ืืืชืจ ืืืฉืืืจ ืขื ืคืื ืงืฆืืื ืืืืช ืืืขืจืืช? ืื ื ืืกืคืจ ืืื ืืื ืืชืืืืื ื ืขื ืืืจืืื ืืืืฆืืขืื ืฉื ืืกื ืื ืชืื ืื ืฉืื ื, ืืื ืืืฆืขื ื ืืืคืืืืืืฆืื ืฉื ืฉืืืืชืืช SQL ืืื ืืฉืจืช ืืื ืฉืืืชืจ ืืฉืชืืฉืื ืืื ืืืขืืืช ืืช ืขืืืช ืืฉืืื ืืืืฉืื.
ืื ื ืขืืฉื ืฉืืจืืช ืื ืืืื ืชืืืืืื ืขืกืงืืื ืืืืจืืช ืื ืืื. ื-3 ืืืจืืช ืขืืืืืช ืืืชื ื. ืืืชืจ ื-10 ืืืฃ ืื ืฉืื ืขืืืืื ืขื ืืืขืจืืช ืฉืื ื ืืื ืืื ืืืฉื 4-10 ืฉืขืืช. ืื ืคืืชืจ ืืขืืืช ืฉืื ืืช ืฉื ืชืื ืื, ืืืืขื, ืืืืจื, ืืืืืช... ืื ื ืืฉืชืืฉืื ื-PostgreSQL 9.6. ืืฉ ืื ื ื-300 ืืืืืืช ืืืกื ืื ืชืื ืื ืืืชืงืืืืช ืขื 200 ืืืืืื ืฉืืืืชืืช (10 ืืืฃ ืฉืื ืืช) ืืื ืืื. ืืืืืฆืข ืืฉ ืื ื 3-4 ืืืฃ ืืงืฉืืช ืืฉื ืืื, ืืจืืขืื ืืคืขืืืื ืืืืชืจ ืืืชืจ ื-10 ืืืฃ ืืงืฉืืช ืืฉื ืืื. ืจืื ืืฉืืืืชืืช ืื OLAP. ืืฉ ืืจืื ืคืืืช ืชืืกืคืืช, ืฉืื ืืืื ืืืืืงืืช, ืืืืืจ ืขืืืก ื-OLTP ืงื ืืืกืืช. ืกืืคืงืชื ืืช ืื ืืืกืคืจืื ืืืื ืืื ืฉืชืืื ืืืขืจืื ืืช ืงื ื ืืืืื ืฉื ืืคืจืืืงื ืฉืื ื ืืืืืื ืขื ืืื ืื ืืกืืื ืฉืื ื ืืืื ืืืืืช ืฉืืืืฉื ืขืืืจื.
ืชืืื ื ืืืช. ืึดืืจึดื
ืืฉืืชืืื ื ืืคืืชืื, ืื ืืืืช ืืฉืื ื ืืืื ืกืื ืฉื ืขืืืก ืืืคืื ืขื ืืกื ืื ืชืื ืื ืืื ื ืขืฉื ืื ืืฉืจืช ืืคืกืืง ืืืฉืื. ืืขืช ืขืืฆืื ืืกืืก ืื ืชืื ืื, ืคืขืื ื ืขื ืคื ืืืืฆืืช ืืืืืืช ืืืฉืชืืื ื ืื ืืืจืืช ืืขืฆืื ื ืืจืื, ืื ืืจืื ื ืืืขืฆืืช ืืืืืืืช ืืื "ืื ืชืฉืชืืฉ ืืชืื ืืช
ืชืืื ื ืฉื ืื. ืกืึธืึดืืกืึดื
ืื ืืฉ ืื ื ืืขืจื 10 ืฉืืืืชืืช ืฉืื ืืช ืฉืืชืืฆืขืืช ืขื ืืกื ืื ืชืื ืื ืฉืื ื ืืืื. ืืชืื 10 ืืืฃ ืืื, ืืฉ ืืคืืฆืืช ืฉืืืืฆืขืืช 2-3 ืืืืืื ืคืขืืื ืขื ืืื ืืืฆืืข ืืืืฆืข ืฉื 0.1-0.3 ms, ืืืฉ ืฉืืืืชืืช ืขื ืืื ืืืฆืืข ืืืืฆืข ืฉื 30 ืฉื ืืืช ืฉื ืงืจืืืช 100 ืคืขืืื ืืืื.
ืื ื ืืชื ืืื ืืืฆืข ืืืคืืืืืืฆืื ืฉื ืื 10 ืืืฃ ืืฉืืืืชืืช, ืื ืืืืื ื ืืืืื ืืื ืืืืื ืืช ืืืืืฆืื ืฉืื ื ืขื ืื ืช ืืฉืคืจ ืืช ืืืฆืืขื ืืกื ืื ืชืื ืื ืืฆืืจื ื ืืื ื. ืืืืจ ืืกืคืจ ืืืืจืฆืืืช, ืืชืืื ื ืืืืง ืืงืฉืืช ืืกืืืื.
ืืงืฉืืช ืืืืืืืช
ืืื ืืฉืืืืชืืช ืืืืืืช ืืืืชืจ ืฉืืืงืืืช ืืช ืืืื ืืจื ืืืืชืจ (ืืืื ืืืืื). ืืื ืฉืืืืชืืช ืฉื ืงืจืืืช ืืขืชืื ืงืจืืืืช ืืืื ืื ืฉืืืืชืืช ืฉืืืงื ืืื ืจื ืืืื ืืืืฆืืข (ืฉืืืืชืืช ืืจืืืืช ืืชืืืคืืช ืขืืจื ืืืคืืืืืืฆืื ืืืืืจืฆืืืช ืืจืืฉืื ืืช ืฉื ืืืืืง ืขื ืืืืืจืืช). ืืชืืฆืื ืืื, ืืฉืจืช ืืืื ืืช ืืืจื ืืืื ืืืืฆืืขื. ืืชืจื ืืื, ืืฉืื ืืืคืจืื ืืงืฉืืช ืืืืืืืช ืืคื ืืื ืืืฆืืข ืืืื ืืื ืคืจื ืืคื ืืื IO. ืืฉืืืืช ืืืืคืืืืืืฆืื ืฉื ืฉืืืืชืืช ืืืื ืฉืื ืืช ืืืงืฆืช.
ืื ืืื ืืืงืืื ืฉื ืื ืืืืจืืช ืืื ืืขืืื ืขื ืืงืฉืืช TOP. ืืฉ ืืขื ืืื; ืืืคืืืืืืฆืื ืืคืืื ืฉื ืฉืืืืชื ืืืช ืืืืื ืืคื ืืช 5-10% ืืืฉืืืื. ืขื ืืืช, ืืื ืฉืืคืจืืืงื ืืชืืืจ, ืืืคืืืืืืฆืื ืฉื ืฉืืืืชืืช TOP ืืืคืืช ืืืฉืืื ืืืชืจ ืืืืชืจ ืื ืืจืืืืืืืืช. ืื ืืฉืืืืช ืืคืฉืืืืช ืืืจ ืขืืืื, ืืืืงืฉื ื"ืืืื" ืืืืชืจ ืืืืืช "ืจืง" 3-5% ืืืืฉืืืื. ืื ืฉืืืืชืืช TOP ืืกื ืืื ืืืงืืืช ืคืืืช ื-30-40% ืืืืื, ืกืืืจ ืืื ืื ืฉืืืจ ืขืฉืืช ืืืืฆืื ืืืจืื ืืื ืืขืืื ืืืืืจืืช ืืืืืข ืืืื ืืขืืืจ ืืืืคืืืืืืฆืื ืฉื ืฉืืืืชืืช ืืืงืืืฆื ืืืื.
ื ืืชืจ ืืขื ืืช ืขื ืืฉืืื ืืื ืฉืืืืชืืช ืืืืืืืช ืืฉ ืืืืื ืืงืืืฆื ืื. ืื ื ืืืจื ืืื ืืืงื ืืคืืืช 10, ืืื ืื ืืืชืจ ื-20. ืื ื ืืฉืชืื ืฉืืืื ืฉื ืืจืืฉืื ืืืืืจืื ืืงืืืฆืช ื-TOP ืืืื ืฉืื ื ืืื ืืืชืจ ื-10 ืคืขืืื. ืืืืืจ, ืื ืืื ืืืฆืืข ืืฉืืืืชื ืืืจื ืืืืืช ืืืืงืื ื-1 ื-10, ืื ืื ื ืืืงื TOP-10, ืื ืืืจืืื ืืื ืืืจืืชืืช ืืืชืจ, ืื ืื ื ืืืืื ืืช ืืืื ืืงืืืฆื ื-15 ืื 20.
ืืืืจืื ืืื ืื ืืื
ืื ืืื ืื ืืงืฉืืช ืฉืืืืขืืช ืืื ืืืจื TOP, ืืืขื 5-10% ืืืืจืื ืื. ืืืจื ืืื, ืืืืคืืืืืืฆืื ืฉื ืฉืืืืชืืช ืืื ืืืื ื ืืืืืื ืืช ืืืืืื ืืืืื ื ืืืจืช ืืช ืืืฆืืขื ืืฉืจืช. ืืงืฉืืช ืืื ืืืืืืช ืืฉืงืื ืขื 80%. ืืื ืื ืื ืืืงื ืขืื ืขื 50%, ืื ืืืืข ืืืื ืืืกืชืื ืขืืืื ืืืชืจ ืืงืคืืื.
ืึธื ึธื
ืืืืืจ, ืฉืืืืชืืช ืืื ืืืืขืืช ืืกืืฃ ืืืืงืืืช 5-10% ืืืืื. ืืชื ืืืื ืืฉืืื ืืื ืจืง ืื ืืชื ืื ืืฉืชืืฉ ืืืืื ืืืืืืืืื ืื ืืชืื ืฉืืืืชืืช, ืื ืื ืืืคืืืืืืฆืื ืฉืืื ืืืืื ืืืืืช ืืืื.
ืืื ืืืขืจืื ืื ืงืืืฆื?
ืื ื ืืฉืชืืฉ ืืฉืืืืชืช SQL ืฉืขืืืจืช ืืืฆืข ืืขืจืื ืืื ืขืืืจ PostgreSQL (ืื ื ืืืื ืฉื ืืชื ืืืชืื ืฉืืืืชื ืืืื ืขืืืจ DBMS ืจืืื ืืืจืื)
ืฉืืืืชืช SQL ืืืขืจืืช ืืืืื ืฉื ืงืืืฆืืช TOP-MEDIUM-TAIL
SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_tail) AS sum_tail
FROM
(
SELECT CASE WHEN rn <= 20 THEN tt_percent ELSE 0 END AS time_top,
CASE WHEN rn > 20 AND rn <= 800 THEN tt_percent ELSE 0 END AS time_medium,
CASE WHEN rn > 800 THEN tt_percent ELSE 0 END AS time_tail
FROM (
SELECT total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query,
ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn
FROM pg_stat_statements
ORDER BY total_time DESC
) AS t
)
AS ts
ืืชืืฆืื ืฉื ืืฉืืืืชื ืืื ืฉืืืฉ ืขืืืืืช, ืฉืื ืืืช ืืื ืืืืื ืืช ืืืื ืืืื ืฉืืืงื ืืขืื ืฉืืืืชืืช ืืงืืืฆื ืื. ืืชืื ืืืงืฉื ืืฉ ืฉื ื ืืกืคืจืื (ืืืงืจื ืฉืื ืื 20 ื-800) ืฉืืคืจืืืื ืืื ืืงืฉืืช ืืงืืืฆื ืืืช ืืืืจืช.
ืื ืืฉืชืืืื ืืขืจื ื ืชืื ืืืงืฉืืช ืืชืงืืคื ืฉืื ืืืื ืขืืืืช ืืืืคืืืืืืฆืื ืืขืืฉืื.
ืืชืจืฉืื ืืจืื ืื ืืืงื ืฉื ืืงืฉืืช ื-TOP ืืจื ืืืืืช, ืื "ืืืืืจืื ืืืืฆืขืืื" ืืืื.
ืืืชืืื, ืืืงืฉืืช TOP ืืืื ืืขืืืืช ืืืืืช. ืขื ืืืื ื ืขืืื ืืืืืช ืืืืืืช, ืืืงื ืฉื ืืงืฉืืช TOP ืืจื, ืืืื ืฆืจืื ืืขืฉืืช ืืืชืจ ืืืืชืจ ืืืืฆืื ืืื ืืืจื ืืงืฉืืช ืงืฉืืช.
ืืื ืืงืื ืืช ืืงืกื ืืืงืฉืืช ืื ื ืืฉืชืืฉืื ืืืงืฉื ืืืื
SELECT * FROM (
SELECT ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn, total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query
FROM pg_stat_statements
ORDER BY total_time DESC
) AS T
WHERE
rn <= 20 -- TOP
-- rn > 20 AND rn <= 800 -- MEDIUM
-- rn > 800 -- TAIL
ืืืื ืจืฉืืื ืฉื ืืืื ืืงืืช ืื ืคืืฆืืช ืืืืชืจ ืฉืขืืจื ืื ื ืืืืืฅ ืืช ืืฉืืืืชืืช ืืืืืืืืช:
- ืขืืฆืื ืืืืฉ ืฉื ืืืขืจืืช, ืืืฉื, ืขืืืื ืืืืฉ ืฉื ืืืืืงืช ืืืชืจืืืช ืืืืฆืขืืช ืืชืืื ืืืืขืืช ืืืงืื ืฉืืืืชืืช ืชืงืืคืชืืืช ืืืกื ืื ืชืื ืื
- ืืืกืคื ืื ืฉืื ืื ืฉื ืืื ืืงืกืื
- ืฉืืชืื ืฉืืืืชืืช ORM ื-SQL ืืืืจ
- ืฉืืชืื ืืืืืื ืฉื ืืขืื ืช ื ืชืื ืื ืขืฆืื ืืช
- ืฉืืืจื ืืืืืื ืืืืฆืขืืช ืื-ื ืืจืืืืืฆืื ืฉื ื ืชืื ืื. ืืืืืื, ืืฉ ืื ื ืืืืืจ ืฉืืืื ืืฉืืื -> ืืฉืืื ืืช -> ืืงืฉื -> ืืงืฉื. ืืืืืจ, ืื ืืกืืจื ืืฉืืืืช ืืืคืืืงืฆืื ืืจื ืืืืืืช ืืืจืืช. ืืื ืื ืืงืฉืจ ืืช ืื ืืืืืืืช ืืื ืืงืฉื, ืฉืืคืื ื ืืช ืืงืืฉืืจ ืืืงืฉื ืืืืืช ืืฉืืืืื.
- ืฉืืืจื ืืืืืื ืฉื ืืืืืืช ืกืืืืืช ืขื ืกืคืจื ืขืืื ืืืขืชืื ืจืืืงืืช ืืฉื ืื ืืืืืืช ืืืืืจืื ืืชืืื ืืช.
ืืคืขืืื ืืฉืื ืืืื ืืกืชืืื ืืชืื ืื ืืืืฉ ืืจืฉืื, ืืื ืื ืกืืคืงื 5-10% ืืขืืืก ืืืขืจืืช ืืืื ืืืฆืืงืื. ืขื ืืืื, ืืืืืื ืืคื ืงืื ืืืชืจ ืืืืชืจ, ืื ืืจืฉ ืขืืฆืื ืืืืฉ ืจืฆืื ื ืืืชืจ ืืืืชืจ.
ืืืจ ืื ืืคื ืื ื ืืช ืชืฉืืืช ืืื ื ืืงืืืฆืช ืืืงืฉืืช ืืฉื ืืื - ืงืืืฆืช ืืืืืจืื ืืืื ืืื. ืืฉ ืื ืขืื ืืจืื ืฉืืืืชืืช ืื ืจืื ืืื ืฉืืืงื ืืจืื ืืื ืื ืชื ืืช ืืงืืืฆื ืืืื. ืขื ืืืช, ืจืื ืืฉืืืืชืืช ืืชืืจืจื ืืคืฉืืืืช ืืืื ืืืืคืืืืืืฆืื, ืืืขืืืช ืจืืืช ืืืจื ืขื ืขืฆืื ืขืฉืจืืช ืคืขืืื ืืืืจืืืฆืืืช ืฉืื ืืช. ืื ื ืืืืืืืช ืืืื ืืืคืืืืืืฆืืืช ืืืคืืกืืืช ืฉืืืื ื ืขื ืขืฉืจืืช ืฉืืืืชืืช ืืืืืช ืืื ืงืืืฆื ืฉื ืฉืืืืชืืช ืืืคืืืืืืฆืื ืืืจืืื ืืช ืืกื ืื ืชืื ืื ื-3-5%.
- ืืืงืื ืืืืืง ื ืืืืืช ืฉื ืจืฉืืืืช ืืืืฆืขืืช COUNT ืืกืจืืงืช ืืืื ืืืื, ืืืื ืืืฉืชืืฉ ื-EXISTS
- ื ืคืืจ ื-DISTINCT (ืืื ืืชืืื ืืืื, ืืื ืืคืขืืื ืืคืฉืจ ืืืืคืืจ ืืื ื ืืงืืืช ืขื ืืื ืืืจืื ืืืงืฉื ืคื 10-100).
ืืืืืื, ืืืงืื ืฉืืืืชื ืืืืืจ ืืช ืื ืื ืืืื ืืืืืช ืืฉืืืืื ืืืืื (DELIVERY)
SELECT DISTINCT P.ID, P.FIRST_NAME, P.LAST_NAME FROM DELIVERY D JOIN PERSON P ON D.DRIVER_ID = P.ID
ืขืฉื ืฉืืืืชื ืขื PERSON ืงืื ืืืกืืช ืืืืื
SELECT P.ID, P.FIRST_NAME, P.LAST_NAME FROM PERSON WHERE EXISTS(SELECT D.ID FROM DELIVERY WHERE D.DRIVER_ID = P.ID)
ื ืจืื ืฉืืฉืชืืฉื ื ืืฉืืืืชืช ืืฉื ื ืืงืืจืืฆืื, ืืื ืื ื ืืชื ืืืืจืืช ืฉื ืืืชืจ ืืคื 10.
- ืืืงืจืื ืจืืื, COUNT ื ื ืืฉ ืืืืืืื ื
ืืืืืฃ ืืืืฉืื ืขืจื ืืฉืืขืจ - ืืืงืื
UPPER(s) LIKE JOHN%โ
ืฉืืืืฉ
s ILIKE โJohn%โ
ืื ืืงืฉื ืกืคืฆืืคืืช ืืืืฆื ืืคืขืืื ืคื 3-1000. ืืืจืืช ืืืืฆืืขืื ืืืจืฉืืืื, ืืืชืืื ื ืจืื ืื ื ืฉืืื ืืขื ืืืฆืข ืืืคืืืืืืฆืื ืฉื ืฉืืืืชื ืฉืืืงืืช 10 ืืืคืืืช ืืฉื ืืื ืืืฉืืืชื, ืืื ืืืช ื-3 ืืฉืืืืชืืช ืืืืืืช ืืืืชืจ, ืืชืืคืกืช ืืืืืช ืืืืื ืืืื ืืืขืื ื ืืืืื ืฉื ืืกื ืื ืชืื ืื. ืืื ืขื ืืื ืืืืช ืืืชื ืืชืืื ืขื ืงืืืฆืช ืฉืืืืชืืช ืืืืชื ืกืื, ืืืื ื ืืืืจื ืืืื ืืืืืื. ืืื ืื ืืืืื ืืื ืืกืงืืจื ืืื ืืช ืฉื ืื ืืืืช ืืฉืืืืชืืช, ืืชืื ื ืืื ืกืงืจืืคืืื ืคืฉืืืื ืฉืืฉืชืืฉื ืืืืืืืื ืจืืืืจืืื ืืื ืืืฆืื ืฉืืืืชืืช ืืืืชื ืกืื. ืืชืืฆืื ืืื, ืืืคืืฉ ืืืืืืื ืฉื ืงืืืฆืืช ืฉืืืืชืืช ืืคืฉืจ ืื ื ืืฉืคืจ ืขืื ืืืชืจ ืืช ืืืืฆืืขืื ืฉืื ื ืืืืืฅ ืฆื ืืข.
ืืชืืฆืื ืืื, ืื ื ืขืืืืื ืขื ืืืชื ืืืืจื ืืืจ ืฉืืืฉ ืฉื ืื. ืืขืืืก ืืืืื ืืืืืฆืข ืืื ื-30%, ืืฉืืืื ืืื ืืืืข ื-70%. ืืกืคืจ ืืืงืฉืืช, ืืื ืื ืืกืคืจ ืืืฉืชืืฉืื, ืืื ืคื 10 ืืขืจื. ืืื ืื ืืืืืช ืืืขืงื ืืชืืื ืืืจ ืืืชื ืงืืืฆืืช ืฉื ืืงืฉืืช TOP-MEDIUM. ืืจืืข ืฉืืืคืืขื ืืงืฉื ืืืฉื ืืงืืืฆืช TOP, ืื ื ืืื ืื ืชืืื ืืืชื ืืื ืกืื ืืืจื ืืืชื. ืื ื ืืืืงืื ืืช ืงืืืฆืช MEDIUM ืคืขื ืืฉืืืข ืืืืฆืขืืช ืกืงืจืืคืืื ืื ืืชืื ืฉืืืืชืืช. ืื ืื ื ื ืชืงืืื ืืฉืืืืชืืช ืืืฉืืช ืฉืื ื ืืืจ ืืืืขืื ืืืฆื ืืืฆืข ืืืคืืืืืืฆืื, ืื ื ืืฉื ืื ืืืชื ืืืืืจืืช. ืืคืขืืื ืื ื ืืืฆืืื ืฉืืืืช ืืืคืืืืืืฆืื ืืืฉืืช ืฉื ืืชื ืืืืฉื ืขื ืืกืคืจ ืฉืืืืชืืช ืื ืืื ืืช.
ืืคื ืืชืืืืืช ืฉืื ื, ืืฉืจืช ืื ืืืื ืืขืืื ืืืืืื ืืืกืคืจ ืืืฉืชืืฉืื ืคื 3-5 ื ืืกืคืื. ื ืืื, ืืฉ ืื ื ืขืื ืืก ืืื ืืฉืจืืื - ืขืืืื ืื ืืขืืจื ื ืฉืืืืชืืช SELECT ืืืจืื, ืืคื ืฉืืืืืฅ. ืืื ืื ืื ื ืื ืขืืฉืื ืืืช ืืืืืข, ืื ืื ืื ื ืจืืฆืื ืงืืื ืื ืืืฆืืช ืืืืืืื ืืช ืืืคืฉืจืืืืช ืฉื ืืืคืืืืืืฆืื "ืืืื" ืืคื ื ืืคืขืืช ื"ืืจืืืืจืื ืืืืื".
ืืื ืืืงืืจืชื ืขื ืืขืืืื ืฉื ืขืฉืชื ืขืฉืืื ืืืฆืืข ืฉืืืืฉ ืืงื ื ืืืื ืื ืื. ืงื ื ืฉืจืช ืืืง ืืืชืจ ืืืงืื ืืืืื ืืื ืฉื ืืืืืื. ืืืชืื ืฉืืฉืจืช ืื ืืขืื ืื ืื ืืจืื, ืืืืืื ืืืืืื ืฉืขืืืื ืื ืืืฆืื ื ืืช ืืืืืืช ืืืจืืื ืืื ืืืช. ืขื ืืืช, ืจืง ืืกืคืจ ืืืงืฉืืช ืืื ืคื 10. ืืืืื ืืกืคืจ ืฉื ืื ืืืื ืืคืื ืงืฆืืื ืืืืช ืฉื ืืืขืจืืช ืืืขืช ืืฉ ืืืชืจ ืกืืื ืืงืฉืืช. ืืืืืช ื-caching, ืืคืื ืงืฆืืื ืืืืช ืฉืืืืชื ืืืืฆืขืช ืืคืืืช ืืงืฉืืช, ืืืงืฉืืช ืืขืืืืช ืืืชืจ. ืื ืืืืจ ืฉืืชื ืืืื ืืืืคืื ืืืืื ืืขืื 5 ืืื ืืงืื ืืช ืืงืื ืืชืืืฆื ืืืืืชื. ืืื, ืขื ืคื ืืืขืจืืืช ืืฉืืจื ืืืช ืืืืชืจ, ืื ื ืืืืืื ืืืืจ ืฉืืชืืืฆื ืืืืชื ืคื 50 ืื ืืืชืจ. ืืคืขืืช ืฉืจืช ืื ืืืช ืชืขืื ืคื 50 ืืืชืจ. ืืืืืื ืืืชืืฉื ืืื ืฉืืจืืข ืฉืืืฆืขืื ืืืคืืืืืืฆืื ืื ืขืืื ืื ืืืื, ืืืืฉืืื ืขืืืจ ืืฉืจืช ืืืืฉืืจ ืืืืข ืืื ืืืืฉ.
ืืงืืจ: www.habr.com