Tena koe, habr.
Mena ka whakamahia e tetahi te punaha
He pai te whakatau a ClickHouse i nga raru kua whakaahuahia. Hei tauira, i muri i te whakawhiti i te 2TiB o nga raraunga mai i te muhumuhu, ka uru ki te 300GiB. E kore ahau e noho ki runga i nga korero whakatairite; he maha nga tuhinga mo tenei kaupapa. I tua atu, tae noa ki tenei wa, kaore nga mea katoa i tino pai ki to maatau rokiroki ClickHouse.
Nga raru mo te waahi kua pau
I te titiro tuatahi, me mahi pai nga mea katoa. Whai muri retention
), ka hanga he ripanga kia rite ki te taunakitanga o te tuara kua tohua mo te graphite-web:
Kia mohio ai koe ko tehea, me mohio koe me pehea te mahi whakauru me te huarahi ora o nga raraunga i roto i nga tepu miihini o te whanau *Rakau Hanumi ClickHouse (nga tūtohi i tangohia mai i
- Kua whakauruhia
блок
raraunga. I a maatau, ko nga inenga i tae mai.
- Ka kōmakaia ia poraka kia rite ki te kī i mua i te tuhi ki te kōpae.
ORDER BY
i tohua i te wa e hanga ana i te ripanga. - Whai muri i te whakariterite,
кусок
(part
) ka tuhia te raraunga ki te kōpae.
- Ka aro turuki te tūmau i te papamuri kia kore ai e maha nga waahanga penei, ka whakarewahia te papamuri
слияния
(merge
, ka hanumi a muri ake nei).
- Ka mutu te whakahaere o te tūmau ka hanumi i a ia ano ka mutu te rere o te raraunga ki roto i te
партицию
(partition
), engari ka taea e koe te tiimata i te mahi ma te whakahauOPTIMIZE
. - Mena kotahi noa te waahanga e toe ana i roto i te wehewehenga, karekau koe e kaha ki te whakahaere i te hanumi ma te whakamahi i te whakahau o mua; me whakamahi koe
OPTIMIZE ... FINAL
Na, ka tae mai nga inenga tuatahi. Na ka tango ratou i etahi waahi. Ka rereke pea nga huihuinga o muri mai i runga i nga mea maha:
- Ko te taviri wehewehe he iti rawa (he ra) he nui rawa ranei (he maha nga marama).
- Ka uru pea te whirihora pupuri ki etahi paepae whakahiato raraunga nui i roto i te wehewehenga hohe (kei te waahi ka tuhia nga ine), kaore ranei.
- Mena he nui nga raraunga, katahi ka nui kee nga waahanga tuatahi, na te whakakotahitanga papamuri (mehemea ka kowhiria e koe he taviri wehewehe kore-pai), ka kore e hanumi ki nga wahi iti hou.
A he rite tonu te mutunga. Ko te waahi e nohoia ana e nga inenga i ClickHouse ka piki noa mena:
- kaua e tono
OPTIMIZE ... FINAL
ā-ringa ranei - kaua e whakauru raraunga ki roto i nga waahanga katoa i runga i te kaupapa haere tonu, kia wawe ka timata te hanumi papamuri
Ko te tikanga tuarua te ahua ngawari ki te whakatinana, na reira, he he, i whakamatauria i te tuatahi.
I tuhia e ahau he tuhinga python tino ngawari i tukuna i nga inenga mo ia ra mo nga tau e 4 kua pahure ake nei me te whakahaere cron ia haora.
I te mea ko nga mahi katoa a ClickHouse DBMS kei runga i te meka ka mahi tenei punaha i nga mahi papamuri katoa, engari kaore i te mohiotia ahea, kaore i taea e au te tatari mo te wa ka tiimata nga waahanga nui tawhito ki te whakakotahi me nga mea iti hou. I marama mai me rapu huarahi ki te whakaaunoa i nga arotautanga kaha.
Nga korero kei roto i nga ripanga punaha ClickHouse
Kia titiro tatou ki te hanganga tepu
- ingoa db (
database
); - ingoa tepu (
table
); - ingoa wehewehe me te ID (
partition
&partition_id
); - i te wa i hangaia ai te waahanga (
modification_time
); - te iti me te morahi o te ra i roto i tetahi waahanga (ko te wehewehe i te ra) (
min_date
&max_date
);
He tepu ano
- ingoa db (
Tables.database
); - ingoa tepu (
Tables.table
); - tau ineine ka hoatu te whakahiatotanga e whai ake nei (
age
);
Na:
- Kei a matou he ripanga mohanga me te ripanga ture whakahiato.
- Ka whakakotahihia e matou o raatau whakawhitinga ka whiwhi i nga ripanga katoa *GraphiteMergeTree.
- Kei te rapu matou mo nga waahanga katoa kei roto:
- neke atu i te kotahi wahi
- kua tae mai ranei te wa ki te whakamahi i te ture whakahiato e whai ake nei, a
modification_time
pakeke ake i tenei wa.
Реализация
Ko tenei tono
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
ka whakahoki ia o nga *GraphiteMergeTree wehewehe ripanga me whakawātea te mokowā kōpae ki te hanumi. Heoi ano te mea hei mahi ma ratou katoa me te tono OPTIMIZE ... FINAL
. Ko te whakatinanatanga whakamutunga ka mau ki te meka kaore he take ki te pa ki nga waahanga me te tuhi kaha.
Koinei tonu te mahi a te kaupapa
Mena kei te whakahaere koe i te papatono i runga i te tūmau me ClickHouse, ka timata noa te mahi i roto i te aratau daemon. Kia kotahi haora ka mahia he tono, ka tirohia mena kua puta nga waahanga hou kua pakeke ake i te toru ra ka taea te whakatika.
Ko ta maatau mahere tonu ko te whakarato i te iti rawa o nga putea nama, a mena ka taea ano hoki te rpm.
Engari o te mutunga
I roto i nga marama 9+ kua hipa kua noho ahau ki roto i taku kamupene
He maha nga rita o te pia me nga ra whakahaere i pau ki te whakawhanake i te tono, me te
Source: will.com