
Ekele, habr.
Ọ bụrụ na onye ọ bụla na-eji usoro wee zute nsogbu arụmọrụ nchekwa (IO, ohere diski riri), mgbe ahụ ohere nke a tụrụ ClickHouse dị ka onye nnọchi kwesịrị ịdị otu. Nkwupụta a na-egosi na ejirila mmejuputa ndị ọzọ dị ka daemon na-anata metrik, dịka ọmụmaatụ ma ọ bụ .
ClickHouse na-edozi nsogbu ndị akọwara nke ọma. Dịka ọmụmaatụ, mgbe ebufechara 2TiB data site na ntanye, ha dabara na 300GiB. Agaghị m etinye aka na ntụnyere n'uju; enwere ọtụtụ akụkọ gbasara isiokwu a. Na mgbakwunye, ruo n'oge na-adịbeghị anya, ọ bụghị ihe niile zuru oke na ebe nchekwa ClickHouse anyị.
Nsogbu na ohere eripịara
Na nlele mbụ, ihe niile kwesịrị ịrụ ọrụ nke ọma. Na-eso , mepụta nhazi maka atụmatụ nchekwa metrics (ọkwa retention), wee mepụta tebụl dị ka nkwenye nke azụ azụ ahọpụtara maka graphite-web: + ma ọ bụ , dabere na nke a ga-eji tojupụtara. Na ... oge bombu na-aga.
Iji ghọta nke ahụ, ịkwesịrị ịma ka ntinye si arụ ọrụ na ụzọ ndụ data ọzọ na tebụl nke injinia * ezinụlọ.MergeTree ClickHouse (mmadụ ewepụtara na Alexey Zatelepin):
- Etinyere
блокdata. N'ọnọdụ anyị, ọ bụ metrik bịarutere.

- A na-ahazi ngọngọ dị otú ahụ ọ bụla dịka igodo siri dị tupu edee ya na diski.
ORDER BYakọwapụtara mgbe ị na-eke tebụl. - Mgbe hachara,
кусок(part) Edere data na diski.

- Ihe nkesa ahụ na-enyocha n'azụ ka ọ ghara inwe ọtụtụ ụdị dị otú ahụ, wee malite ndabere
слияния(merge, ugbu a jikọrọ).


- Ihe nkesa na-akwụsị ịgbakọ ọnụ n'onwe ya ozugbo data kwụsịrị ịbanye na ya
партицию(partition), ma ị nwere ike iji aka gị malite usoro ahụOPTIMIZE. - Ọ bụrụ na ọ bụ naanị otu akụkụ fọdụrụ na nkebi ahụ, ị gaghị enwe ike iji iwu a na-emebu mee njikọ ahụ;
OPTIMIZE ... FINAL
Yabụ, metrik nke mbụ rutere. Ha wegharakwa ohere. Ihe ndị na-esote nwere ike ịdịgasị iche dabere n'ọtụtụ ihe:
- Igodo nkewa nwere ike ịbụ obere (otu ụbọchị) ma ọ bụ buru ibu (ọtụtụ ọnwa).
- Nhazi njide ahụ nwere ike dabara ọtụtụ ọnụ ụzọ nchịkọta data dị mkpa n'ime nkebi nọ n'ọrụ (ebe edere metrik), ma ọ bụ ikekwe ọ bụghị.
- Ọ bụrụ na e nwere ọtụtụ data, mgbe mbụ chunks, nke n'ihi ndabere merging nwere ike ugbua ibu (ọ bụrụ na ị na-ahọrọ a na-abụghị ezigbo partitioning igodo), agaghị jikota onwe ha na ọhụrụ obere chunks.
Ọ na-agwụkwa otu ihe mgbe niile. Oghere nke metrik ji na ClickHouse na-abawanye naanị ma ọ bụrụ:
- etinyela akwụkwọ
OPTIMIZE ... FINALaka ma ọ bụ - etinyela data n'ime akụkụ niile na-aga n'ihu, ka n'oge na-adịghị anya, njikọta ndabere ga-amalite
Usoro nke abụọ yiri ka ọ kachasị mfe iji mejuputa ya, ya mere, ọ ezighi ezi ma nwalere ya na mbụ.
Edere m edemede Python dị mfe nke na-eziga metrics dummy kwa ụbọchị maka afọ 4 gara aga wee na-agba cron kwa elekere.
Ebe ọ bụ na ọrụ niile nke ClickHouse DBMS dabeere na eziokwu na usoro a ga-eme elu mee ma ọ bụ mgbe e mesịrị na-eme niile ndabere ọrụ, ma ọ na-amaghị mgbe, M na-enweghị ike ichere maka oge mgbe ochie nnukwu iberibe deign na-amalite merging na. ndị ọhụrụ ọhụrụ. Ọ bịara doo anya na ọ dị anyị mkpa ịchọ ụzọ anyị ga-esi rụọ ọrụ mmanye mmanye.

Ozi dị na tebụl usoro ClickHouse
Ka anyị leba anya na nhazi nke tebụl . Nke a bụ ozi zuru oke gbasara mpempe tebụl ọ bụla na sava ClickHouse. Nwere, n'etiti ihe ndị ọzọ, kọlụm ndị a:
- db aha (
database); - aha tebụl (
table); - aha nkebi na ID (
partition&partition_id); - mgbe emechara mpempe akwụkwọ ahụ (
modification_time); - Opekempe na ụbọchị kachasị na ibe (a na-eme nkewa kwa ụbọchị)
min_date&max_date);
E nwekwara tebụl , ya na ubi ndị a na-atọ ụtọ:
- db aha (
Tables.database); - aha tebụl (
Tables.table); - metric afọ mgbe a ga-etinye nchịkọta na-esote (
age);
Ya mere:
- Anyị nwere tebụl nke chunks na tebụl nke iwu nchịkọta.
- Anyị na-ejikọta ọnụ ụzọ ha wee nweta tebụl * GraphiteMergeTree.
- Anyị na-achọ akụkụ niile nke:
- ihe karịrị otu ibe
- ma ọ bụ oge eruola itinye iwu nchịkọta na-esote, na
modification_timetọrọ karịa oge a.
Mmejuputa iwu
Arịrịọ a
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 ASCweghachi nke ọ bụla n'ime akụkụ tebụl * GraphiteMergeTree nke ijikọ ha kwesịrị ịtọhapụ oghere diski. Naanị ihe ga-eme bụ ịgafe ha niile na arịrịọ OPTIMIZE ... FINAL. Mmezu ikpeazụ ahụ na-eburukwa n'uche eziokwu ahụ bụ na ọ dịghị mkpa imetụ akụkụ na ndekọ na-arụ ọrụ aka.
Nke a bụ kpọmkwem ihe ọrụ ahụ na-eme . Ndị ọrụ ibe mbụ sitere na Yandex.Market gbalịrị ya na mmepụta, a pụrụ ịhụ nsonaazụ nke ọrụ n'okpuru.

Ọ bụrụ na ị na-eji ClickHouse na-eme mmemme ahụ na sava, ọ ga-amalite ịrụ ọrụ na ọnọdụ daemon. Otu oge n'otu elekere, a ga-eme ajụjụ, na-elele ma akụkụ ọhụrụ karịrị ụbọchị atọ apụtala nke enwere ike ịhazi ya.
Atụmatụ anyị ozugbo bụ ịnye opekata mpe ngwugwu ụgwọ, ma ọ bụrụ na ọ ga-ekwe omume kwa rpm.
Kama nkwubi okwu
N'ime ọnwa 9+ gara aga, anọ m n'ime ụlọ ọrụ m jiri oge dị ukwuu na-atụgharị n'ọnụ ụzọ ClickHouse na graphite-web. Ọ bụ ahụmịhe dị mma, nke butere mgbanwe ngwa ngwa site na ntanye ntanye gaa na ClickHouse dị ka ebe nchekwa metrik. Enwere m olileanya na isiokwu a bụ ihe mmalite nke usoro banyere ihe ndozi anyị mebere n'akụkụ dị iche iche nke nchịkọta a, yana ihe a ga-eme n'ọdịnihu.
A nọrọ ọtụtụ lita biya na ụbọchị nchịkwa iji mepụta arịrịọ ahụ, yana , nke m chọrọ igosipụta ekele m n'ebe ọ nọ. Na kwa maka inyocha edemede a.
isi: www.habr.com




