ClickHouse + Graphite: ื›ื™ืฆื“ ืœื”ืคื—ื™ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ืฆืจื™ื›ืช ืฉื˜ื— ื”ื“ื™ืกืง

ClickHouse + Graphite: ื›ื™ืฆื“ ืœื”ืคื—ื™ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ืฆืจื™ื›ืช ืฉื˜ื— ื”ื“ื™ืกืง

ืฉืœื•ื ืจื‘, ื”ืื‘.

ืื ืžื™ืฉื”ื• ืžื ืฆืœ ืืช ื”ืžืขืจื›ืช ืจืฉืช ื’ืจืคื™ื˜ ื•ื ืชืงืœ ื‘ื‘ืขื™ื™ืช ื‘ื™ืฆื•ืขื™ ืื—ืกื•ืŸ ืœื—ื™ืฉื” (IO, ืฉื˜ื— ื“ื™ืกืง ื ืฆืจืš), ืื– ื”ืกื™ื›ื•ื™ ืฉ-ClickHouse ื”ื•ืฆื ื›ืชื—ืœื™ืฃ ืฆืจื™ืš ืœื”ื™ื•ืช ืื—ื“. ื”ืฆื”ืจื” ื–ื• ืžืจืžื–ืช ืฉื”ื˜ืžืขื” ืฉืœ ืฆื“ ืฉืœื™ืฉื™ ื›ื‘ืจ ืžืฉืžืฉืช ื›ืžื“ื“ื™ ืงื‘ืœืช ื“ืžื•ืŸ, ืœืžืฉืœ ืคื—ืžืŸ ืกื•ืคืจ ืื• ื’ื•-ืงืจื‘ื•ืŸ.

ClickHouse ืคื•ืชืจ ื”ื™ื˜ื‘ ืืช ื”ื‘ืขื™ื•ืช ื”ืžืชื•ืืจื•ืช. ืœื“ื•ื’ืžื”, ืœืื—ืจ ื”ืขื‘ืจืช 2TiB ืฉืœ ื ืชื•ื ื™ื ืžืœื—ื™ืฉื”, ื”ื ืžืชืื™ืžื™ื ืœ-300GiB. ืœื ืืชืขื›ื‘ ืขืœ ื”ื”ืฉื•ื•ืื” ื‘ืคื™ืจื•ื˜; ื™ืฉ ื”ืจื‘ื” ืžืืžืจื™ื ื‘ื ื•ืฉื ื–ื”. ื‘ื ื•ืกืฃ, ืขื“ ืœืื—ืจื•ื ื”, ืœื ื”ื›ืœ ื”ื™ื” ืžื•ืฉืœื ืขื ืื—ืกื•ืŸ ื”-ClickHouse ืฉืœื ื•.

ื‘ืขื™ื•ืช ืขื ืฉื˜ื— ื ืฆืจืš

ื‘ืžื‘ื˜ ืจืืฉื•ืŸ, ื”ื›ืœ ืืžื•ืจ ืœืขื‘ื•ื“ ื›ืžื• ืฉืฆืจื™ืš. ื”ื‘ื ืชื™ืขื•ื“, ืฆื•ืจ ืชืฆื•ืจื” ืขื‘ื•ืจ ืขืจื›ืช ืื—ืกื•ืŸ ื”ืžื“ื“ื™ื (ื‘ื”ืžืฉืš retention), ื•ืื– ืฆื•ืจ ื˜ื‘ืœื” ืœืคื™ ื”ื”ืžืœืฆื” ืฉืœ ื”ืงืฆื” ื”ืื—ื•ืจื™ ืฉื ื‘ื—ืจ ืขื‘ื•ืจ graphite-web: ื‘ื™ืช ืคื—ืžืŸ-ืงืœื™ืง+ื’ืจืคื™ื˜-ืงืœื™ืง ื”ืื•ืก ืื• ื’ืจืคืื•ื–, ืชืœื•ื™ ื‘ืื™ื–ื• ืžื—ืกื ื™ืช ืžืฉืชืžืฉื™ื. ื•... ืคืฆืฆืช ื”ื–ืžืŸ ืžืชืคื•ืฆืฆืช.

ื›ื“ื™ ืœื”ื‘ื™ืŸ ืื™ื–ื” ืžื”ื, ืืชื” ืฆืจื™ืš ืœื“ืขืช ืื™ืš ืคื•ืขืœื™ื ืชื•ืกืคื•ืช ื•ืืช ืžืกืœื•ืœ ื”ื—ื™ื™ื ื”ื ื•ืกืฃ ืฉืœ ื ืชื•ื ื™ื ื‘ื˜ื‘ืœืื•ืช ืฉืœ ืžื ื•ืขื™ ืžืฉืคื—ืช *MergeTree ClickHouse (ืชืจืฉื™ืžื™ื ืฉื ืœืงื—ื• ืž ืžืฆื’ื•ืช ืืœื›ืกื™ื™ ื–ื˜ืœืคื™ืŸ):

  • ืžื•ึผื›ื ึธืก ะฑะปะพะบ ื ืชื•ื ื™ื. ื‘ืžืงืจื” ืฉืœื ื•, ืืœื• ื”ืžื“ื“ื™ื ืฉื”ื’ื™ืขื•.
    ClickHouse + Graphite: ื›ื™ืฆื“ ืœื”ืคื—ื™ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ืฆืจื™ื›ืช ืฉื˜ื— ื”ื“ื™ืกืง
  • ื›ืœ ื‘ืœื•ืง ื›ื–ื” ืžืžื•ื™ืŸ ืœืคื™ ื”ืžืคืชื— ืœืคื ื™ ื”ื›ืชื™ื‘ื” ืœื“ื™ืกืง. ORDER BYืฉืฆื•ื™ืŸ ื‘ืขืช โ€‹โ€‹ื™ืฆื™ืจืช ื”ื˜ื‘ืœื”.
  • ืœืื—ืจ ืžื™ื•ืŸ, ะบัƒัะพะบ (part) ื”ื ืชื•ื ื™ื ื ื›ืชื‘ื™ื ืœื“ื™ืกืง.
    ClickHouse + Graphite: ื›ื™ืฆื“ ืœื”ืคื—ื™ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ืฆืจื™ื›ืช ืฉื˜ื— ื”ื“ื™ืกืง
  • ื”ืฉืจืช ืขื•ืงื‘ ื‘ืจืงืข ื›ืš ืฉืื™ืŸ ื”ืจื‘ื” ื—ืœืงื™ื ื›ืืœื”, ื•ืžืฉื™ืง ืจืงืข ัะปะธัะฝะธั (merge, ืœื”ืœืŸ ืžื™ื–ื•ื’).
    ClickHouse + Graphite: ื›ื™ืฆื“ ืœื”ืคื—ื™ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ืฆืจื™ื›ืช ืฉื˜ื— ื”ื“ื™ืกืง
    ClickHouse + Graphite: ื›ื™ืฆื“ ืœื”ืคื—ื™ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ืฆืจื™ื›ืช ืฉื˜ื— ื”ื“ื™ืกืง
  • ื”ืฉืจืช ืžืคืกื™ืง ืœื”ืจื™ืฅ ืžื™ื–ื•ื’ื™ื ืžืขืฆืžื• ื‘ืจื’ืข ืฉื”ื ืชื•ื ื™ื ืžืคืกื™ืงื™ื ืœื–ืจื•ื ื‘ืื•ืคืŸ ืคืขื™ืœ ืœืชื•ืš ื”ืฉืจืช ะฟะฐั€ั‚ะธั†ะธัŽ (partition), ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ืืช ื”ืชื”ืœื™ืš ื‘ืื•ืคืŸ ื™ื“ื ื™ ืขื ื”ืคืงื•ื“ื” OPTIMIZE.
  • ืื ื ื•ืชืจื” ืจืง ื—ืœืง ืื—ื“ ื‘ืžื—ื™ืฆื”, ืœื ืชื•ื›ืœ ืœื”ืจื™ืฅ ืืช ื”ืžื™ื–ื•ื’ ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ื”ืจื’ื™ืœื”; ืขืœื™ืš ืœื”ืฉืชืžืฉ OPTIMIZE ... FINAL

ืื–, ื”ืžื“ื“ื™ื ื”ืจืืฉื•ื ื™ื ืžื’ื™ืขื™ื. ื•ื”ื ืชื•ืคืกื™ื ืงืฆืช ืžืงื•ื. ืื™ืจื•ืขื™ื ื”ื‘ืื™ื ืขืฉื•ื™ื™ื ืœื”ืฉืชื ื•ืช ื‘ืžื™ื“ื” ืžืกื•ื™ืžืช ื‘ื”ืชืื ืœื’ื•ืจืžื™ื ืจื‘ื™ื:

  • ืžืคืชื— ื”ืžื—ื™ืฆื•ืช ื™ื›ื•ืœ ืœื”ื™ื•ืช ืงื˜ืŸ ืžืื•ื“ (ื™ื•ื) ืื• ื’ื“ื•ืœ ืžืื•ื“ (ืžืกืคืจ ื—ื•ื“ืฉื™ื).
  • ืชืฆื•ืจืช ื”ืฉืžื™ืจื” ืขืฉื•ื™ื” ืœื”ืชืื™ื ืœืžืกืคืจ ืกืคื™ ืฆื‘ื™ืจืช ื ืชื•ื ื™ื ืžืฉืžืขื•ืชื™ื™ื ื‘ืชื•ืš ื”ืžื—ื™ืฆื” ื”ืคืขื™ืœื” (ืฉื ื ืจืฉืžื™ื ืžื“ื“ื™ื), ืื• ืฉืœื.
  • ืื ื™ืฉ ื”ืจื‘ื” ื ืชื•ื ื™ื, ืื– ื”ื ืชื—ื™ื ื”ืžื•ืงื“ืžื™ื ื‘ื™ื•ืชืจ, ืฉื‘ืฉืœ ืžื™ื–ื•ื’ ื‘ืจืงืข ืขืฉื•ื™ื™ื ืœื”ื™ื•ืช ื›ื‘ืจ ืขื ืงื™ื™ื (ืื ืชื‘ื—ืจื• ื‘ืžืคืชื— ืžื—ื™ืฆื•ืช ืœื ืื•ืคื˜ื™ืžืœื™), ืœื ื™ืชืžื–ื’ื• ื‘ืขืฆืžื ืขื ื ืชื—ื™ื ืงื˜ื ื™ื ื˜ืจื™ื™ื.

ื•ื–ื” ืชืžื™ื“ ื ื’ืžืจ ืื•ืชื• ื“ื‘ืจ. ื”ืฉื˜ื— ืฉืชื•ืคืก ืขืœ ื™ื“ื™ ืžื“ื“ื™ื ื‘-ClickHouse ื’ื“ืœ ืจืง ืื:

  • ืœื ื—ืœื™ื OPTIMIZE ... FINAL ื™ื“ื ื™ืช ืื•
  • ืืœ ืชื›ื ื™ืก ื ืชื•ื ื™ื ืœื›ืœ ื”ืžื—ื™ืฆื•ืช ื‘ืื•ืคืŸ ืฉื•ื˜ืฃ, ื›ืš ืฉื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ื™ืชื—ื™ืœ ืžื™ื–ื•ื’ ืจืงืข

ื ืจืื” ืฉื”ืฉื™ื˜ื” ื”ืฉื ื™ื™ื” ื”ื™ื ื”ืงืœื” ื‘ื™ื•ืชืจ ืœื™ื™ืฉื•ื, ื•ืœื›ืŸ ื”ื™ื ืฉื’ื•ื™ื” ื•ื ื•ืกืชื” ืชื—ื™ืœื”.
ื›ืชื‘ืชื™ ืกืงืจื™ืคื˜ ืคื™ืชื•ืŸ ืคืฉื•ื˜ ืœืžื“ื™ ืฉืฉืœื— ืžื“ื“ื™ ื“ืžื” ืœื›ืœ ื™ื•ื ื‘-4 ื”ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช ื•ื”ืจื™ืฅ ืงืจื•ืŸ ื›ืœ ืฉืขื”.
ืžื›ื™ื•ื•ืŸ ืฉื›ืœ ื”ืคืขื•ืœื” ืฉืœ ClickHouse DBMS ืžื‘ื•ืกืกืช ืขืœ ื”ืขื•ื‘ื“ื” ืฉื”ืžืขืจื›ืช ื”ื–ื• ืชืขืฉื” ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ืืช ื›ืœ ืขื‘ื•ื“ืช ื”ืจืงืข, ืื‘ืœ ืœื ื™ื“ื•ืข ืžืชื™, ืœื ื™ื›ื•ืœืชื™ ืœื—ื›ื•ืช ืœืจื’ืข ืฉื‘ื• ื”ื—ืœืงื™ื ื”ืขื ืงื™ื™ื ื”ื™ืฉื ื™ื ืžืชืขื™ื™ืคื™ื ืœื”ืชื—ื™ืœ ืœื”ืชืžื–ื’ ืขื ืงื˜ื ื™ื ื—ื“ืฉื™ื. ื”ืชื‘ืจืจ ืฉืขืœื™ื ื• ืœื—ืคืฉ ื“ืจืš ืœื”ืคื•ืš ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื›ืคื•ื™ื•ืช ืœืื•ื˜ื•ืžื˜ื™ื•ืช.

ClickHouse + Graphite: ื›ื™ืฆื“ ืœื”ืคื—ื™ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ืฆืจื™ื›ืช ืฉื˜ื— ื”ื“ื™ืกืง

ืžื™ื“ืข ื‘ื˜ื‘ืœืื•ืช ืžืขืจื›ืช ClickHouse

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืžื‘ื ื” ื”ื˜ื‘ืœื” system.parts. ื–ื”ื• ืžื™ื“ืข ืžืงื™ืฃ ืขืœ ื›ืœ ื—ืœืง ืžื›ืœ ื”ื˜ื‘ืœืื•ืช ื‘ืฉืจืช ClickHouse. ืžื›ื™ืœ, ื‘ื™ืŸ ื”ื™ืชืจ, ืืช ื”ืขืžื•ื“ื•ืช ื”ื‘ืื•ืช:

  • ืฉื db (database);
  • ืฉื ืฉื•ืœื—ืŸ (table);
  • ืฉื ื•ืžื–ื”ื” ืžื—ื™ืฆื” (partition & partition_id);
  • ื›ืืฉืจ ื”ื™ืฆื™ืจื” ื ื•ืฆืจื” (modification_time);
  • ืชืืจื™ืš ืžื™ื ื™ืžื•ื ื•ืžืงืกื™ืžื•ื ื‘ื™ืฆื™ืจื” (ื”ื—ืœื•ืงื” ืžืชื‘ืฆืขืช ืœืคื™ ื™ื•ื) (min_date & max_date);

ื™ืฉ ื’ื ืฉื•ืœื—ืŸ system.graphite_retentions, ืขื ื”ืฉื“ื•ืช ื”ืžืขื ื™ื™ื ื™ื ื”ื‘ืื™ื:

  • ืฉื db (Tables.database);
  • ืฉื ืฉื•ืœื—ืŸ (Tables.table);
  • ื’ื™ืœ ืžื˜ืจื™ ืฉื‘ื• ื™ืฉ ืœื”ื—ื™ืœ ืืช ื”ืฆื‘ื™ืจื” ื”ื‘ืื” (age);

ืื–:

  1. ื™ืฉ ืœื ื• ื˜ื‘ืœื” ืฉืœ ื ืชื—ื™ื ื•ื˜ื‘ืœื” ืฉืœ ื›ืœืœื™ ืฆื‘ื™ืจื”.
  2. ืื ื• ืžืฉืœื‘ื™ื ืืช ื”ืฆื•ืžืช ืฉืœื”ื ื•ืžืงื‘ืœื™ื ืืช ื›ืœ ื”ื˜ื‘ืœืื•ืช *GraphiteMergeTree.
  3. ืื ื• ืžื—ืคืฉื™ื ืืช ื›ืœ ื”ืžื—ื™ืฆื•ืช ื‘ื”ืŸ:
    • ื™ื•ืชืจ ืžื—ืชื™ื›ื” ืื—ืช
    • ืื• ืฉื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ื—ื™ืœ ืืช ื›ืœืœ ื”ืฆื‘ื™ืจื” ื”ื‘ื, ื• 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. ื”ื™ื™ืฉื•ื ื”ืกื•ืคื™ ืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ ื’ื ืืช ื”ืขื•ื‘ื“ื” ืฉืื™ืŸ ืฆื•ืจืš ืœื’ืขืช ื‘ืžื—ื™ืฆื•ืช ืขื ื”ืงืœื˜ื” ืคืขื™ืœื”.

ื–ื” ื‘ื“ื™ื•ืง ืžื” ืฉื”ืคืจื•ื™ืงื˜ ืขื•ืฉื” graphite-ch-optimizer. ืขืžื™ืชื™ื ืœืฉืขื‘ืจ ืž- Yandex.Market ื ื™ืกื• ืืช ื–ื” ื‘ื™ื™ืฆื•ืจ, ืืช ื”ืชื•ืฆืื” ืฉืœ ื”ืขื‘ื•ื“ื” ื ื™ืชืŸ ืœืจืื•ืช ืœืžื˜ื”.

ClickHouse + Graphite: ื›ื™ืฆื“ ืœื”ืคื—ื™ืช ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ืฆืจื™ื›ืช ืฉื˜ื— ื”ื“ื™ืกืง

ืื ืชืคืขื™ืœ ืืช ื”ืชื•ื›ื ื™ืช ืขืœ ืฉืจืช ืขื ClickHouse, ื”ื™ื ืคืฉื•ื˜ ืชืชื—ื™ืœ ืœืขื‘ื•ื“ ื‘ืžืฆื‘ ื“ืžื•ืŸ. ืื—ืช ืœืฉืขื” ืชื‘ื•ืฆืข ืฉืื™ืœืชื”, ืฉืชื‘ื“ื•ืง ื”ืื ื”ื•ืคื™ืขื• ืžื—ื™ืฆื•ืช ื—ื“ืฉื•ืช ื‘ื ื•ืช ื™ื•ืชืจ ืžืฉืœื•ืฉื” ื™ืžื™ื ืฉื ื™ืชืŸ ืœื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”.

ื”ืชื•ื›ื ื™ื•ืช ื”ืžื™ื™ื“ื™ื•ืช ืฉืœื ื• ื”ืŸ ืœืกืคืง ืœืคื—ื•ืช ื—ื‘ื™ืœื•ืช ื“ื‘, ื•ืื ืืคืฉืจ ื’ื ืกืœ"ื“.

ื‘ืžืงื•ื ืžืกืงื ื”

ื‘ืžื”ืœืš 9+ ื”ื—ื•ื“ืฉื™ื ื”ืื—ืจื•ื ื™ื ื”ื™ื™ืชื™ ื‘ื—ื‘ืจื” ืฉืœื™ innogames ื‘ื™ืœื” ื–ืžืŸ ืจื‘ ื‘ื”ืชืขืกืงื•ืช ื‘ืฆื•ืžืช ืฉืœ ClickHouse ื•-graphite-web. ื–ื• ื”ื™ื™ืชื” ื—ื•ื•ื™ื” ื˜ื•ื‘ื”, ืฉื”ื‘ื™ืื” ืœืžืขื‘ืจ ืžื”ื™ืจ ืžืœื—ื™ืฉื” ืœ-ClickHouse ื›ืžืื’ืจ ืžื“ื“ื™ื. ืื ื™ ืžืงื•ื•ื” ืฉื”ืžืืžืจ ื”ื–ื” ื”ื•ื ื—ืœืง ืžื”ื”ืชื—ืœื” ืฉืœ ืกื“ืจื” ืขืœ ืื™ืœื• ืฉื™ืคื•ืจื™ื ืขืฉื™ื ื• ื‘ื—ืœืงื™ื ื”ืฉื•ื ื™ื ืฉืœ ื”ืขืจื™ืžื” ื”ื–ื•, ื•ืžื” ื ืขืฉื” ื‘ืขืชื™ื“.

ื›ืžื” ืœื™ื˜ืจื™ื ืฉืœ ื‘ื™ืจื” ื•ื™ืžื™ ื ื™ื”ื•ืœ ื”ื•ืฉืงืขื• ื‘ืคื™ืชื•ื— ื”ื‘ืงืฉื”, ื™ื—ื“ ืขื v0devil, ื•ืขืœ ื›ืš ืื ื™ ืจื•ืฆื” ืœื”ื‘ื™ืข ืœื• ืืช ืชื•ื“ืชื™. ื•ื’ื ืœืกืงื™ืจืช ื”ืžืืžืจ ื”ื–ื”.

ื“ืฃ ื”ืคืจื•ื™ืงื˜ ื‘-github

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”