เบเบปเบกเปเบเบตเบ, habr.
เบเปเบฒเปเบเบเบนเปเบซเบเบถเปเบเบเบธเบเบเบปเปเบเบฅเบฐเบเบปเบ
ClickHouse เปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบเปเบเบต. เบเบปเบงเบขเปเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฒเบเปเบญเบเบเปเปเบกเบนเบ 2TiB เบเบฒเบเบชเบฝเบเบเบฐเบเบดเบ, เบเบงเบเบกเบฑเบเปเบซเบกเบฒเบฐเบเบฑเบ 300GiB. เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเบฐโเบเปเปโเปเบเปโเบขเบนเปโเปเบโเบเบฒเบโเบเบฝเบโเบเบฝเบโเปเบโเบฅเบฐโเบญเบฝเบโ, เบกเบตโเบซเบผเบฒเบโเบเบญเบโเบเบปเบโเบเบงเบฒเบกโเบเปเบฝเบงโเบเบฑเบโเบซเบปเบงโเบเปเปโเบเบตเปโ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบปเบเบเปเบงเบฒเบเปเปเบเบปเบเบกเบฒเบเบตเป, เบเปเปเปเบกเปเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเบตเปเบฅเบตเบเบเบฑเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒ ClickHouse เบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เบเบฑเบเบซเบฒเบเบฑเบเบเบทเปเบเบเบตเปเบเปเบฅเบดเปเบเบ
เบขเบนเป glance เบเปเบฒเบญเบดเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบงเบเบเบฐเปเบฎเบฑเบเบงเบฝเบเปเบเปเบเบต. เบเบดเบเบเบฒเบก retention
), เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบกเบเปเบฒเปเบเบฐเบเปเบฒเบเบญเบ backend เบเบตเปเปเบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบ graphite-web:
เปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบงเปเบฒเบญเบฑเบเปเบ, เบเปเบฒเบ เบเบณ เปเบเบฑเบเบเปเบญเบเบฎเบนเปเบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเปเบฅเบฐเปเบชเบฑเปเบเบเบฒเบเบเบตเบงเบดเบเบเปเปเปเบเบเบญเบเบเปเปเบกเบนเบเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบเบทเปเบญเบเบเบฑเบเบเบญเบเบเบญเบเบเบปเบง *.MergeTree ClickHouse (เบเบฒเบเบฐเบฅเบฒเบเปเบญเบปเบฒเบกเบฒเบเบฒเบ
- เปเบเบ
ะฑะปะพะบ
เบเปเปเบกเบนเบ. เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบกเบฑเบเปเบกเปเบเบเบปเบงเบเบตเปเบงเบฑเบเบเบตเปเบกเบฒเบฎเบญเบ.
- เปเบเปเบฅเบฐเบเบฅเบฑเบญเบเบเบฑเปเบเบเปเบฒเบงเบเบทเบเบเบฑเบเบฎเบฝเบเบเบฒเบกเบฅเบฐเบซเบฑเบเบเปเบญเบเบเบตเปเบเบฐเบเบทเบเบเบฝเบเปเบชเปเปเบเปเบ.
ORDER BY
เบฅเบฐเบเบธเปเบเปเบงเบฅเบฒเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบ. - เบซเบผเบฑเบโเบเบฒเบโเบเบฒเบโเบเบฑเบโเปเบฅเบทเบญเบโ,
ะบััะพะบ
(part
) เบเปเปเบกเบนเบเบเบทเบเบเบฝเบเปเบชเปเปเบเปเบ.
- เปเบเบตเบเปเบงเบตเบเบงเบเบชเบญเบเปเบเบเบทเปเบเบซเบผเบฑเบเปเบเบทเปเบญเบเปเปเปเบซเปเบกเบตเบเบดเปเบเบชเปเบงเบเบเบฑเปเบเบเปเบฒเบงเบซเบผเบฒเบ, เปเบฅเบฐเปเบเบตเบเบเบทเปเบเบซเบผเบฑเบ
ัะปะธัะฝะธั
(merge
, เบเปเปโเปเบโเบเบตเป merge).
- เปเบเบตเบเปเบงเบตเบขเบธเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฒเบเบฅเบงเบกเบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบเบฑเบเบเบตเบเบตเปเบเปเปเบกเบนเบเบขเบธเบเปเบเบปเบฒเบเบฒเบเปเบซเบผเปเบเบปเปเบฒเบขเปเบฒเบเบเบดเบเบเบฑเบ
ะฟะฐััะธัะธั
(partition
), เปเบเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฐเบเบงเบเบเบฒเบเบเปเบงเบเบเบปเบเปเบญเบเบเปเบงเบเบเปเบฒเบชเบฑเปเบOPTIMIZE
. - เบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบกเบตโเบเบฝเบโเปเบเปโเบซเบเบถเปเบโเบชเบดเปเบโเปเบโเบเบฒเบโเปเบเปเบโเบเบฑเบโ, เบซเบผเบฑเบโเบเบฒเบโเบเบฑเปเบโเบเปเบฒเบโเบเบฐโเบเปเปโเบชเบฒโเบกเบฒเบโเบเปเบฒโเปเบเบตเบโเบเบฒเบ merge เปเบเบโเบเปเบฒโเปเบเปโเบเปเบฒโเบชเบฑเปเบโเบเบปเบโเบเบฐโเบเบดโเปเบเปโ;
OPTIMIZE ... FINAL
เบเบฑเปเบเบเบฑเปเบ, เบเบปเบงเบเบตเปเบงเบฑเบเบเปเบฒเบญเบดเบเบกเบฒเบฎเบญเบ. เปเบฅเบฐเปเบเบปเบฒเปเบเบปเปเบฒเปเบเปเปเบงเบฅเบฒเปเบเบดเบเบเบทเปเบเบเบตเปเบเบฒเบ. เปเบซเบเบเบฒเบเบเปเปเบกเบฒเบญเบฒเบเบเบฐเปเบเบเบเปเบฒเบเบเบฑเบเปเบเบเบฒเบกเบซเบผเบฒเบเบเบฑเบเปเบ:
- เบเบฐเปเบเบเบฒเบเปเบเปเบเบเบฑเบเบชเบฒเบกเบฒเบเบกเบตเบเบฐเบซเบเบฒเบเบเปเบญเบเบซเบผเบฒเบ (เบเปเปเบกเบทเป) เบซเบผเบทเปเบซเบเปเบซเบผเบฒเบ (เบซเบผเบฒเบเปเบเบทเบญเบ).
- เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบญเบฒเบเบเบฐเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเบเบญเบเปเบเบเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเปเปเบกเบนเบเบเบตเปเบชเปเบฒเบเบฑเบเบเปเบฒเบเบงเบเบซเบเบถเปเบเบเบฒเบเปเบเบเบฒเบเบดเบเบฑเบเบเบตเปเบกเบตเบเบฒเบเปเบเบทเปเบญเบเปเบซเบง (เบเปเบญเบเบเบตเปเบกเบตเบเบฒเบเบเบฑเบเบเบถเบเบเบฒเบเบงเบฑเบเปเบเบ), เบซเบผเบทเบญเบฒเบเบเบฐเบเปเป.
- เบเปเบฒเบกเบตเบเปเปเบกเบนเบเบซเบผเบฒเบ, เบเบดเปเบเบชเปเบงเบเบเบปเปเบเป, เปเบเบดเปเบเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบฅเบงเบกเบเบปเบงเบเบญเบเบเบทเปเบเบซเบฅเบฑเบเบญเบฒเบเบเบฐเปเบซเบเปเปเบฅเปเบง (เบเปเบฒเบเปเบฒเบเปเบฅเบทเบญเบเบเบฐเปเบเบเบฒเบเปเบเปเบเบเบฑเบเบเบตเปเบเปเปเปเบซเบกเบฒเบฐเบชเบปเบก), เบเบฐเบเปเปเบเบทเบเบฅเบงเบกเปเบเบปเปเบฒเบเบฑเบเบเปเบญเบเบเปเบญเบเปเบชเบปเบเป.
เปเบฅเบฐเบกเบฑเบเบชเบฐเปเบซเบกเบตเบชเบดเปเบเบชเบธเบเบฅเบปเบเบเบทเบเบฑเบ. เบเบทเปเบเบเบตเปเบเบตเปเบเบทเบเบเบญเบเบเบญเบเปเบเบ metrics เปเบ ClickHouse เบเบฝเบเปเบเปเปเบเบตเปเบกเบเบถเปเบเบเปเบฒ:
- เบเปเปเบชเบฐเบซเบกเบฑเบ
OPTIMIZE ... FINAL
เบเปเบงเบเบเบปเบเปเบญเบเบซเบผเบท - เบขเปเบฒเปเบชเปเบเปเปเบกเบนเบเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบดเบเบฑเบเบเบฑเบเบซเบกเบปเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบ, เบเบฑเปเบเบเบฑเปเบเปเบงเบซเบผเบทเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเบฅเบงเบกเบเบทเปเบเบซเบฅเบฑเบเบเบฐเปเบฅเบตเปเบกเบเบปเปเบ.
เบงเบดเบเบตเบเบตเบชเบญเบเปเบเบดเปเบเบเบทเบงเปเบฒเปเบเบฑเบเบงเบดเบเบตเบเบตเปเบเปเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฐเบเบฐเบเบดเบเบฑเบเปเบฅเบฐเบเบฑเปเบเบเบฑเปเบ, เบกเบฑเบเบเปเปเบเบทเบเบเปเบญเบเปเบฅเบฐเบเบทเบเบเบปเบเบฅเบญเบเบเปเบญเบ.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฝเบเบเบปเบงเบเบฝเบ python เบเปเบฒเบเบเบฒเบเบเบตเปเบชเบปเปเบ metrics dummy เบชเปเบฒเบฅเบฑเบเบเบธเบเปเบกเบทเปเบชเปเบฒเบฅเบฑเบ 4 เบเบตเบเบตเปเบเปเบฒเบเบกเบฒเปเบฅเบฐเปเบฅเปเบ cron เบเบธเบเปเบเบปเปเบงเปเบกเบ.
เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบ ClickHouse DBMS เปเบกเปเบเบญเบตเบเปเบชเปเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบฅเบฐเบเบปเบเบเบตเปเปเบงเบซเบผเบทเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฐเปเบฎเบฑเบเบงเบฝเบเบเบทเปเบเบเบฒเบเบเบฑเบเบซเบกเบปเบ, เปเบเปเบกเบฑเบเบเปเปเบฎเบนเปเบงเปเบฒเปเบงเบฅเบฒเปเบ, เบเปเบญเบเบเปเปเบชเบฒเบกเบฒเบเบฅเปเบเปเบฒเปเบงเบฅเบฒเบเบตเปเบเบดเปเบเบชเปเบงเบเปเบซเบเปเปเบเบปเปเบฒเปเบฅเบตเปเบกเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบฑเบ. เบเบฐโเบซเบเบฒเบโเบเปเบญเบโเปเบซเบกเปโ. เบกเบฑเบเปเบเปเบเบฒเบเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบญเบเบซเบฒเบงเบดเบเบตเบเบตเปเบเบฐเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบฒเบเบเบฑเบเบเบฑเบเปเบซเปเบญเบฑเบเบเบฐเปเบเบกเบฑเบ.
เบเปเปเบกเบนเบเปเบเบเบฒเบเบฐเบฅเบฒเบเบฅเบฐเบเบปเบ ClickHouse
เปเบซเปเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบ
- เบเบทเป db (
database
); - เบเบทเปโเบเบฒโเบเบฐโเบฅเบฒเบ (
table
); - เบเบทเปเบเบฒเบเบดเบเบฑเบ เปเบฅเบฐ ID (
partition
&partition_id
); - เปเบกเบทเปเบญเบชเบดเปเบเปเบเปเบเบทเบเบชเปเบฒเบเบเบทเปเบ (
modification_time
); - เบงเบฑเบโเบเบตโเบเปเบฒโเปโเบชเบธเบโเบเบตเปโเปเบฅเบฐโเบชเบนเบโเบชเบธเบโเปเบโเบชเบดเปเบ (เบเบฒเบโเปเบเปเบโเบเบฑเบโเปเบกเปเบโเปเบฎเบฑเบโเปเบเปโเปเบเบโเบกเบทเปโ) (
min_date
&max_date
);
เบเบญเบเบเบฑเปเบเบเบฑเบเบกเบตเบเบฒเบเบฐเบฅเบฒเบ
- เบเบทเป db (
Tables.database
); - เบเบทเปโเบเบฒโเบเบฐโเบฅเบฒเบ (
Tables.table
); - metric age เปเบเปเบงเบฅเบฒเบเบตเปเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเปเปเปเบเบเบงเบเบเบฐเบเบทเบเบเปเบฒเปเบเป (
age
);
เบเบฑเปเบเบเบฑเปเบ:
- เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฒเบเบฐเบฅเบฒเบเบเบญเบ chunks เปเบฅเบฐเบเบฒเบเบฐเบฅเบฒเบเบเบญเบเบเบปเบเบฅเบฐเบเบฝเบเบเบฒเบเบฅเบงเบเบฅเบงเบก.
- เบเบงเบโเปเบฎเบปเบฒโเบชเบปเบกโเบเบปเบโเบเบฒเบโเบเบฑเบโเบเบฑเบโเบเบญเบโเปเบเบปเบฒโเปเบเบปเปเบฒโเปเบฅเบฐโเปเบเปโเบฎเบฑเบโเบเบฒโเบเบฐโเบฅเบฒเบโเบเบฑเบโเบซเบกเบปเบ *GraphiteMergeTreeโ.
- เบเบงเบโเปเบฎเบปเบฒโเบเปเบฒโเบฅเบฑเบโเบเบญเบโเบซเบฒโเบเบฒเบโเปเบเปเบโเบเบฑเบโเบเบฑเบโเบซเบกเบปเบโเบเบตเปโ:
- เบซเบผเบฒเบเบเบงเปเบฒเบซเบเบถเปเบเบเบดเปเบ
- เบซเบผเบทเปเบเบดเบเปเบงเบฅเบฒเบเบตเปเบเบฐเบเปเบฒเปเบเปเบเบปเบเบฅเบฐเบเบฝเบเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเปเปเปเบ, เปเบฅเบฐ
modification_time
เปเบเปเบเบงเปเบฒเปเบงเบฅเบฒเบเบตเป.
ะ ะตะฐะปะธะทะฐัะธั
เบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบตเปโ
SELECT
concat(p.database, '.', p.table) AS table,
p.partition_id AS partition_id,
p.partition AS partition,
-- ะกะฐะผะพะต "ััะฐัะพะต" ะฟัะฐะฒะธะปะพ, ะบะพัะพัะพะต ะผะพะถะตั ะฑััั ะฟัะธะผะตะฝะตะฝะพ ะดะปั
-- ะฟะฐััะธัะธะธ, ะฝะพ ะฝะต ะฒ ะฑัะดััะตะผ, ัะผ (*)
max(g.age) AS age,
-- ะะพะปะธัะตััะฒะพ ะบััะบะพะฒ ะฒ ะฟะฐััะธัะธะธ
countDistinct(p.name) AS parts,
-- ะะฐ ัะฐะผัั ััะฐัััั ะผะตััะธะบั ะฒ ะฟะฐััะธัะธะธ ะฟัะธะฝะธะผะฐะตััั 00:00:00 ัะปะตะดัััะตะณะพ ะดะฝั
toDateTime(max(p.max_date + 1)) AS max_time,
-- ะะพะณะดะฐ ะฟะฐััะธัะธั ะดะพะปะถะฝะฐ ะฑััั ะพะฟัะธะผะธะทะธัะพะฒะฐะฝะฝะฐ
max_time + age AS rollup_time,
-- ะะพะณะดะฐ ัะฐะผัะน ััะฐััะน ะบััะพะบ ะฒ ะฟะฐััะธัะธะธ ะฑัะป ะพะฑะฝะพะฒะปัะฝ
min(p.modification_time) AS modified_at
FROM system.parts AS p
INNER JOIN
(
-- ะัะต ะฟัะฐะฒะธะปะฐ ะดะปั ะฒัะตั
ัะฐะฑะปะธั *GraphiteMergeTree
SELECT
Tables.database AS database,
Tables.table AS table,
age
FROM system.graphite_retentions
ARRAY JOIN Tables
GROUP BY
database,
table,
age
) AS g ON
(p.table = g.table)
AND (p.database = g.database)
WHERE
-- ะขะพะปัะบะพ ะฐะบัะธะฒะฝัะต ะบััะบะธ
p.active
-- (*) ะ ัะพะปัะบะพ ัััะพะบะธ, ะณะดะต ะฟัะฐะฒะธะปะฐ ะฐะณะณัะตะณะฐัะธะธ ัะถะต ะดะพะปะถะฝั ะฑััั ะฟัะธะผะตะฝะตะฝั
AND ((toDateTime(p.max_date + 1) + g.age) < now())
GROUP BY
table,
partition
HAVING
-- ะขะพะปัะบะพ ะฟะฐััะธัะธะธ, ะบะพัะพััะต ะผะปะฐะดัะต ะผะพะผะตะฝัะฐ ะพะฟัะธะผะธะทะฐัะธะธ
(modified_at < rollup_time)
-- ะะปะธ ั ะฝะตัะบะพะปัะบะธะผะธ ะบััะบะฐะผะธ
OR (parts > 1)
ORDER BY
table ASC,
partition ASC,
age ASC
เบชเบปเปเบเบเบทเบเปเบเปเบฅเบฐเบเบฒเบเบดเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบ *GraphiteMergeTree เปเบเบดเปเบเบเบฒเบเบฅเบงเบกเปเบเบปเปเบฒเบเบฑเบเบเบงเบเปเบฎเบฑเบเปเบซเปเบเบทเปเบเบเบตเปเบซเบงเปเบฒเบเบเบญเบเปเบเปเบ. เบชเบดเปเบเบเบฝเบงเบเบตเปเปเบซเบฅเบทเบญเบเบตเปเบเบฐเปเบฎเบฑเบเปเบกเปเบเปเบเบทเปเบญเบเปเบฒเบเบเบงเบเปเบเบปเบฒเบเบฑเบเบซเบกเบปเบเบเปเบงเบเบเบฒเบเบฎเปเบญเบเบเป OPTIMIZE ... FINAL
. เบเบฒเบเบเบฐเบเบดเบเบฑเบเบชเบธเบเบเปเบฒเบเบเบฑเบเบเปเบฒเบเบถเบเปเบเบดเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเปเบฒเบเบฑเบเบเบฑเบเบเบฒเบเบดเบเบฑเบเบเบตเปเบกเบตเบเบฒเบเบเบฑเบเบเบถเบเบเบฒเบเปเบเบทเปเบญเบเปเบซเบง.
เบเบตเปเปเบกเปเบเบชเบดเปเบเบเบตเปเปเบเบเบเบฒเบเปเบฎเบฑเบ
เบเปเบฒเบเปเบฒเบเบเปเบฒเปเบเบตเบเปเบเบเบเบฒเบเบขเบนเปเปเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบตเปเบกเบต ClickHouse, เบกเบฑเบเบเบฝเบเปเบเปเบเบฐเปเบฅเบตเปเบกเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเปเบซเบกเบ daemon. เปเบกเบทเปเบญเบซเบเบถเปเบเบเบปเปเบงเปเบกเบเบเปเบฒเบฎเปเบญเบเบเปเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบ, เบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบฒเบเปเบเปเบเบเบฑเบเปเบซเบกเปเบเบตเปเปเบเบปเปเบฒเบเบงเปเบฒเบชเบฒเบกเบกเบทเปเปเบเปเบเบฐเบเบปเบเบงเปเบฒเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบเป.
เปเบเบเบเบฒเบเบเบฑเบเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเปเบเปเบเบทเปเบญเบชเบฐเบซเบเบญเบเบขเปเบฒเบเบซเบเปเบญเบ deb packages, เปเบฅเบฐเบเปเบฒเปเบเบฑเบเปเบเปเบเปเบเบฑเบ rpm.
เปเบเบเบเบตเปเบเบฐเปเบเบฑเบเบเบฒเบเบชเบฐเบซเบฅเบธเบเปเบเป
เปเบเปเบฅเบเบฐ 9+ เปเบเบทเบญเบเบเบตเปเบเปเบฒเบเบกเบฒเบเปเบญเบเปเบเปเบขเบนเปเปเบเบเปเบฅเบดเบชเบฑเบเบเบญเบเบเปเบญเบ
เบซเบผเบฒเบเบฅเบดเบเบเบญเบเปเบเบเปเบฅเบฐ admin เปเบเปเปเบเปเปเบงเบฅเบฒเปเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเปเบฒเบฎเปเบญเบเบเป, เบฎเปเบงเบกเบเบฑเบเบเบฑเบ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com