Tislijiet, habr.
Jekk xi ħadd jisfrutta s-sistema
ClickHouse issolvi l-problemi deskritti tajjeb. Pereżempju, wara li jittrasferixxu 2TiB ta 'dejta minn whisper, jidħlu fi 300GiB. Mhux se nitkellem fuq it-tqabbil fid-dettall; hemm ħafna artikli dwar dan is-suġġett. Barra minn hekk, sa ftit ilu, mhux kollox kien perfett bil-ħażna ClickHouse tagħna.
Problemi bl-ispazju kkunsmat
L-ewwel daqqa t'għajn, kollox għandu jaħdem tajjeb. Wara retention
), imbagħad oħloq tabella skont ir-rakkomandazzjoni tal-backend magħżul għal graphite-web:
Sabiex tifhem liema waħda, trid tkun taf kif jaħdmu l-inserzjonijiet u l-mogħdija tal-ħajja ulterjuri tad-dejta fit-tabelli tal-magni tal-familja *MergeTree ClickHouse (mapep meħuda minn
- Imdaħħal
блок
data. Fil-każ tagħna, kienu l-metriċi li waslu.
- Kull blokka bħal din tiġi magħżula skont iċ-ċavetta qabel ma tinkiteb fuq id-diska.
ORDER BY
speċifikat meta tinħoloq it-tabella. - Wara l-għażla,
кусок
(part
) id-data tinkiteb fuq disk.
- Is-server jimmonitorja fl-isfond sabiex ma jkunx hemm ħafna biċċiet bħal dawn, u jniedi l-isfond
слияния
(merge
, minn hawn 'il quddiem jingħaqdu).
- Is-server jieqaf jaħdem jingħaqad waħdu hekk kif id-data tieqaf attivament tiċċirkola fil-
партицию
(partition
), iżda tista 'tibda l-proċess manwalment bil-kmandOPTIMIZE
. - Jekk għad fadal biċċa waħda biss fil-partizzjoni, allura ma tkunx tista' tmexxi l-għaqda billi tuża l-kmand tas-soltu; trid tuża
OPTIMIZE ... FINAL
Allura, jaslu l-ewwel metriċi. U jieħdu ftit spazju. L-avvenimenti sussegwenti jistgħu jvarjaw xi ftit skont ħafna fatturi:
- Iċ-ċavetta tal-qsim tista' tkun jew żgħira ħafna (ġurnata) jew kbira ħafna (diversi xhur).
- Il-konfigurazzjoni taż-żamma tista' taqbel ma' diversi limiti sinifikanti ta' aggregazzjoni tad-dejta fil-partizzjoni attiva (fejn il-metriċi huma rreġistrati), jew forsi le.
- Jekk hemm ħafna dejta, allura l-aktar biċċiet bikrija, li minħabba l-għaqda fl-isfond jistgħu diġà jkunu enormi (jekk tagħżel ċavetta ta 'qsim mhux ottimali), mhux se jingħaqdu ma' biċċiet żgħar friski.
U dejjem jispiċċa l-istess. L-ispazju okkupat mill-metriċi fi ClickHouse jiżdied biss jekk:
- ma japplikawx
OPTIMIZE ... FINAL
manwalment jew - ddaħħalx id-dejta fil-ħitan kollha fuq bażi kontinwa, sabiex illum jew għada tibda taħlita ta' sfond
It-tieni metodu jidher li huwa l-aktar faċli biex jiġi implimentat u, għalhekk, huwa żbaljat u ġie ppruvat l-ewwel.
Ktibt script python pjuttost sempliċi li bagħat metriċi finta għal kull jum għall-aħħar 4 snin u dam cron kull siegħa.
Peress li l-operat kollu ta 'ClickHouse DBMS huwa bbażat fuq il-fatt li din is-sistema illum jew għada se tagħmel ix-xogħol kollu ta' l-isfond, iżda mhux magħruf meta, ma stajtx nistenna l-mument meta l-biċċiet kbar qodma deign jibdew jingħaqdu ma ' oħrajn żgħar ġodda. Deher ċar li kellna bżonn infittxu mod kif nawtomatizzaw l-ottimizzazzjonijiet sfurzati.
Informazzjoni fit-tabelli tas-sistema ClickHouse
Ejja nagħtu ħarsa lejn l-istruttura tal-mejda
- isem db (
database
); - isem it-tabella (
table
); - isem u ID tal-partizzjoni (
partition
&partition_id
); - meta nħolqot il-biċċa (
modification_time
); - data minima u massima f'biċċa (il-qsim isir bil-ġurnata) (
min_date
&max_date
);
Hemm ukoll mejda
- isem db (
Tables.database
); - isem it-tabella (
Tables.table
); - età metrika meta għandha tiġi applikata l-aggregazzjoni li jmiss (
age
);
So:
- Għandna tabella ta 'biċċiet u tabella ta' regoli ta 'aggregazzjoni.
- Aħna ngħaqqdu l-intersezzjoni tagħhom u nġibu t-tabelli kollha *GraphiteMergeTree.
- Qegħdin infittxu l-ħitan kollha li fihom:
- aktar minn biċċa waħda
- jew wasal iż-żmien li tiġi applikata r-regola ta’ aggregazzjoni li jmiss, u
modification_time
anzjani minn dan il-mument.
Реализация
Din it-talba
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
jirritorna kull waħda mill-partizzjonijiet tat-tabella *GraphiteMergeTree li l-għaqda tagħhom għandha tillibera spazju fuq id-diska. L-unika ħaġa li fadal hija li tgħaddi minnhom kollha b'talba OPTIMIZE ... FINAL
. L-implimentazzjoni finali tqis ukoll il-fatt li m'hemmx bżonn li tmiss diviżorji b'reġistrazzjoni attiva.
Dan huwa eżattament dak li jagħmel il-proġett
Jekk tmexxi l-programm fuq server ma' ClickHouse, sempliċiment jibda jaħdem fil-modalità daemon. Darba fis-siegħa tiġi eżegwita talba, billi jiġi ċċekkjat jekk dehrux diviżorji ġodda eqdem minn tlett ijiem li jistgħu jiġu ottimizzati.
Il-pjanijiet immedjati tagħna huma li nipprovdu mill-inqas pakketti deb, u jekk possibbli wkoll rpm.
Minflok ma tikkonkludi
Matul l-aħħar 9+ xhur ilni ġewwa l-kumpanija tiegħi
Diversi litri ta 'birra u jiem admin intefqu fuq l-iżvilupp tat-talba, flimkien ma
Sors: www.habr.com