Te neke ki ClickHouse: 3 tau i muri mai

E toru tau ki muri ko Viktor Tarnavsky raua ko Alexey Milovidov mai i Yandex i runga i te atamira UtuWhakauru ++ ka korerotia, pehea te pai o ClickHouse, me pehea e kore ai e puhoi. Na i runga i te atamira i muri i reira Alexander Zaitsev с pūrongo mo te neke ki PaateneToko mai i tetahi atu DBMS tātari me te whakatau ko tera PaateneToko, o te akoranga, pai, engari e kore e tino watea. I te tau 2016 te kamupene LifeStreet, i te wa i mahi ai a Alexander, e huri ana i te punaha tātari maha-petabyte ki PaateneToko, he "ara pereki kowhai" whakamihiihi ki tonu i nga aitua e kore e mohiotia - PaateneToko i tera wa ka rite ki te mara maina.

E toru tau i muri mai PaateneToko I tino pai ake - i tenei wa i whakaturia e Alexander te kamupene Altinity, ehara i te mea ka awhina i nga tangata ki te neke PaateneToko he maha nga kaupapa, engari ka whakapai ake i te hua ake me nga hoa mahi mai i Yandex. Inaianei PaateneToko ehara tonu i te hikoi haere noa, engari ehara i te waahi maina.

Kua mahi a Alexander me nga punaha tohatoha mai i te tau 2003, e whakawhanake ana i nga kaupapa nui MySQL, Oracle и Pouaka. I te whakamutunga Utu Nui ++ 2019 Alexander, tetahi o nga pionia o te whakamahi PaateneToko, i korero he aha tenei DBMS inaianei. Ka ako tatou mo nga ahuatanga matua PaateneToko: he pehea te rereke mai i etahi atu punaha me nga keehi ka pai ake te whakamahi. Ma te whakamahi i nga tauira, ka titiro tatou ki nga mahi hou me te whakamatautau-a-kaupapa mo nga punaha hanga whare i runga PaateneToko.


Retrospective: he aha te mea i tupu 3 tau ki muri

E toru tau ki muri ka whakawhitia e matou te kamupene LifeStreet i runga i PaateneToko mai i tetahi atu patengi raraunga tātari, me te ahua o te hekenga tātaritanga whatunga panui penei:

  • Pipiri 2016. In Takahanga tuwhera puta PaateneToko ka timata ta matou kaupapa;
  • Akuhata Tohu o te Ariā: whatunga pānuitanga nui, hanganga me te 200-300 terabytes o nga raraunga;
  • Oketopa. Nga raraunga whakaputa tuatahi;
  • Hakihea. Ko te kawenga hua katoa ko te 10-50 piriona nga huihuinga ia ra.
  • Pipiri 2017. Hekenga angitu o nga kaiwhakamahi ki PaateneToko, 2,5 petabytes o nga raraunga i runga i te kahui 60 tūmau.

I te wa o te hekenga, kua tupu te maarama ki tera PaateneToko he punaha pai e pai ana ki te mahi, engari he kaupapa o roto o Yandex tenei. Na reira, he rerekee: Ka mahi tuatahi a Yandex ki ona ake kaihoko o roto, katahi ano me te hapori me nga hiahia o nga kaiwhakamahi o waho, a kaore a ClickHouse i eke ki te taumata hinonga i roto i nga waahanga maha. Koira te take i whakatuu ai a Altinity i te Maehe 2017 hei hanga PaateneToko he tere ake, he watea hoki ehara mo Yandex anake, engari mo etahi atu kaiwhakamahi. Na inaianei ko matou:

  • Ka whakangungu, ka awhina matou ki te hanga otinga i runga i PaateneToko kia kore ai nga kaihoko e raru, kia whai hua ai te otinga;
  • Ka whakaratohia e matou he tautoko 24/7 PaateneToko- whakaurunga;
  • Ka whakawhanake tatou i a tatou ake kaupapa rauwiringa kaiao;
  • Ka whakapau kaha tatou ki a tatou ano PaateneToko, te whakautu ki nga tono a nga kaiwhakamahi e hiahia ana ki te kite i etahi ahuatanga.

Ae ra, ka awhina matou ki te neke ki PaateneToko с MySQL, Pouaka, Oracle, Greenplum, Redshift me etahi atu punaha. Kua whai waahi matou ki nga momo nekehanga, kua angitu katoa.

Te neke ki ClickHouse: 3 tau i muri mai

He aha te neke ki PaateneToko

E kore e puhoi! Koinei te tino take. PaateneToko - tino tere putunga raraunga mo nga ahuatanga rereke:

Te neke ki ClickHouse: 3 tau i muri mai

Ko nga korero ohorere mai i nga tangata kua roa e mahi tahi ana me nga tangata PaateneToko.

Tauineine. I runga i etahi atu papaarangi ka taea e koe te whakatutuki i nga mahi pai i runga i tetahi waahanga taputapu, engari PaateneToko ka taea e koe te awhatatia ehara i te poutū anake, engari i te whakapae, ma te taapiri i nga kaitoro. Kaore nga mea katoa e pai ana ki ta maatau e pai ai, engari ka mahi. Ka taea e koe te whakawhānui ake i te punaha i te wa e tipu ana to pakihi. Ko te mea nui kia kaua tatou e whakawhäitihia e te otinga i naianei, a, kei kona ano pea te whanaketanga.

Te kawe. Karekau he hononga ki tetahi mea. Hei tauira, me Amazon RedShift He uaua ki te neke ki tetahi waahi. A PaateneToko ka taea e koe te whakauru ki runga i to pona, tūmau, toha ki te kapua, haere ki Kubernetes - karekau he here mo te whakahaerenga o nga hanganga. He watea tenei mo te katoa, he painga nui tenei kaore e taea e te maha atu o nga papaa raraunga rite te whakamanamana.

Te ngawari. PaateneToko e kore e mutu i tetahi mea, hei tauira, Yandex.Metrica, engari ka whakawhanakehia, ka whakamahia i roto i nga kaupapa rereke me nga ahumahi. Ka taea te whakawhānui ake ma te taapiri i nga kaha hou ki te whakaoti rapanga hou. Hei tauira, e whakaponohia ana he kino nga tikanga te penapena rakau ki roto i te paataka korero, na reira i puta mai Te rangahau elastic. Engari he mihi ki te ngawari PaateneToko, ka taea hoki e koe te penapena i nga raarangi ki roto, a he pai ake tenei ki roto Te rangahau elastic - i roto i PaateneToko me 10 nga wa iti ake te rino.

Kore utu Open Source. Kaore koe e utu mo tetahi mea. Kaore he take ki te whiriwhiri whakaaetanga ki te whakauru i te punaha ki runga i to pona, i to kaimau ranei. Kaore he utu huna. I te wa ano, kaore e taea e etahi atu hangarau raraunga Open Source te whakataetae tere PaateneToko. MySQL, MariaDB, Greenplum - he puhoi katoa.

Hapori, taraiwa me ngahau. Kia PaateneToko hapori tino pai: nga huihuinga, nga korerorero me Alexey Milovidov, nana nei tatou katoa i kii me tona kaha me tona tumanako.

Te neke ki ClickHouse

Hei haere ki PaateneToko mo etahi take, e toru noa nga mea e hiahiatia ana e koe:

  • Kia mohio ki nga here PaateneToko me te aha e kore e pai.
  • Tangohia painga hangarau me ona tino kaha.
  • Whakamatau. Ahakoa te maarama me pehea te mahi PaateneToko, e kore e taea te matapae i nga wa katoa ka tere ake, ka iti ake, ka pai ake, ka kino ake. No reira whakamatauria.

raruraru neke

Kotahi noa iho "engari": ki te neke koe ki PaateneToko mai i tetahi atu mea, katahi ka raru tetahi mea. Kua waia matou ki etahi mahi me nga mea e mahi ana i roto i ta maatau putunga tino pai. Hei tauira, ko te tangata e mahi tahi ana SQKa whakaarohia e te L-paunga raraunga te huinga mahi e whai ake nei he mea whakahau:

  • hokohoko;
  • herenga;
  • riterite;
  • tohu tohu;
  • WHAKAMAHI/MUU;
  • NULLs;
  • mirihakona;
  • momo maka aunoa;
  • hono maha;
  • wehewehenga tikanga;
  • taputapu whakahaere huinga.

He herenga te whakauru, engari e toru tau ki muri i roto PaateneToko Kaore tetahi o enei mahi i waatea! Inaianei iti iho i te haurua o nga mea kaore ano kia whakatinanahia e toe ana: nga whakawhitiwhitinga, nga herenga, te riterite, nga mirimitapa me te momo makanga.

A ko te mea nui kei roto PaateneToko Ko etahi o nga tikanga me nga huarahi e kore e whai hua, e rere ke ana ranei i ta tatou i mahi ai. Ko nga mea katoa ka puta mai i roto PaateneToko, e hāngai ana ki "ClickHouse ara", ara. He rereke nga mahi mai i etahi atu papaarangi. Hei tauira:

  • Kaore nga tohu i tohua, engari ka pekehia.
  • WHAKAMAHI/MUU ehara i te tukutahi, engari he tukutahi.
  • He maha nga hononga, engari kaore he mahere uiui. Ko te peheatanga o aua mahi kaore i te tino marama ki nga tangata o te ao putunga raraunga.

Nga Tuhituhi ClickHouse

I te tau 1960, he tohunga pangarau o Amerika no Hungarian Wigner EP tuhia he tuhinga "Ko te whaihua kore o te pangarau i roto i nga tikanga maaori” (“The Incomprehensible Effectiveness of Mathematics in the Natural Sciences”) ko te ao huri noa i a tatou mo etahi take i tino whakaahuahia e nga ture pangarau. Ko te pangarau he putaiao waitara, a ko nga ture a-tinana e whakaatuhia ana i roto i te ahua pangarau ehara i te mea iti, a Wigner EP i kii he tino rerekee tenei.

Ki taku titiro, PaateneToko - te taua ke. Ki te whakahua ano i a Wigner, ka taea e tatou te kii penei: he mea whakamiharo te mahi kore e taea te whakaaro PaateneToko i roto i te whānuitanga o nga momo tono tātari!

Te neke ki ClickHouse: 3 tau i muri mai

Hei tauira, me tango Waa Tuturu Raraunga Raraunga, ka utaina nga raraunga tata tonu. Kei te pirangi matou ki te whiwhi tono mai i a ia me te whakaroa tuarua. Tena koa - whakamahia PaateneToko, no te mea koinei te ahuatanga i hangaia mo. PaateneToko Ko te tikanga tenei e whakamahia ana ehara i te ipurangi anake, engari i roto i te maakete me te tātari putea, AdTech, kei roto hoki Te kimi tinihangan. IN Waea Tuturu Raraunga he kaupapa hanganga matatini penei i te "whetu" me te "snowflake" ka whakamahia, he maha nga ripanga Hono (i etahi wa ka maha), ka penapena nga raraunga ka huri i etahi punaha.

Me tango tetahi atu ahuatanga - Wā Rangatū: te aro turuki i nga taputapu, whatunga, tatauranga whakamahinga, Ipurangi o nga Mea. I konei ka tutaki tatou ki nga kaupapa tino ngawari kua whakaritea i te waa. PaateneToko kaore i whakawhanakehia i te tuatahi mo tenei, engari kua whakaatuhia he pai te mahi, na reira ka whakamahia e nga kamupene nui PaateneToko hei putunga korero mo te aro turuki. Ki te tuhura mehemea e tika ana PaateneToko mo te raupapa-wa, i hanga e matou he tohu i runga i te huarahi me nga hua InfluxDB и TimescaleDB - motuhake raupapa-wa pātengi raraunga. Kua puta, e PaateneToko, ahakoa kaore he arotautanga mo enei mahi, ka wikitoria i runga i te mara ke:

Te neke ki ClickHouse: 3 tau i muri mai

В raupapa-wa I te nuinga o te wa ka whakamahia he ripanga whaiti - he maha nga pou iti. He maha nga raraunga ka puta mai i te aro turuki—miriona rekoata mo ia hekona—a ko te nuinga ka puta mai i roto i nga pupuhi iti (wā-tūturu roma). Na reira, me hiahia he tuhinga whakauru rereke, a ko nga patai kei a raatau ake korero.

Whakahaere Taki. Ko te kohikohi i nga raarangi ki roto i te papaa raraunga he kino te nuinga, engari PaateneToko ka taea tenei ki etahi korero pera i runga ake nei. He maha nga kamupene e whakamahi ana PaateneToko tika mo tenei kaupapa. I tenei keehi, ka whakamahia e matou he teepu whanui papatahi kei reira ka penapenahia nga raarangi katoa (hei tauira, i te ahua JSON), ka tapatapahia ranei. Ko te nuinga o nga wa ka utaina nga raraunga i roto i nga puranga nui (nga konae), ka rapu maatau ma etahi waahi.

Mo ia o enei mahi, ko te nuinga o nga wa ka whakamahia nga papaunga raraunga motuhake. PaateneToko Ka taea e tetahi te mahi i nga mea katoa me te pai kia nui atu i a raatau. Kia ata titiro tatou inaianei raupapa-wa tauari, me pehea te "tunu" tika PaateneToko mo tenei ahuatanga.

Waa-Rarangi

I tenei wa koinei te ahuatanga matua mo tenei PaateneToko whakaarohia te otinga paerewa. Wā-raupapa he huinga takahanga kua whakaritea i roto i te waa, e tohu ana i nga huringa o etahi mahi i roto i te waa. Hei tauira, koinei pea te tere o te ngakau ia ra, te maha ranei o nga tukanga i roto i te punaha. Ko nga mea katoa e tohu ana i te waa me etahi waahanga raupapa-wa:

Te neke ki ClickHouse: 3 tau i muri mai

Ko te nuinga o enei momo huihuinga ka ahu mai i te aroturuki. Ehara i te mea ko te tirotiro i te paetukutuku anake, engari ko nga taputapu tuuturu: nga motuka, nga punaha ahumahi, IoT, nga wheketere, nga taakete kore ranei, kei roto i te pouaka kei te whakanohohia e Yandex PaateneToko-tūmau.

Hei tauira, he kamupene kei te kohikohi raraunga mai i nga kaipuke. Ia torutoru hēkona, ka tukuna e nga pūoko i runga i te kaipuke ipu nga rau rereke rereke. Ka rangahauhia e nga miihini, ka hanga tauira me te ngana ki te mohio ki te kaha o te whakamahi i te waka, na te mea kaua te kaipuke ipu e noho mangere mo te tuarua. Ka ngaro te moni mo nga wa whakangao, no reira he mea nui te matapae i te huarahi kia iti ai te aukati.

I enei ra kei te tipu haere nga papaa raraunga motuhake e ine ana raupapa-wa. I runga i te pae DB-Miihini Ko nga papaa raraunga rereke kua tohua, ka taea e koe te tiro ma te momo:

Te neke ki ClickHouse: 3 tau i muri mai

Ko te momo tipu tere raupapa was. Kei te tipu haere ano nga papaunga kauwhata, engari raupapa wakua tere ake te tipu i roto i nga tau kua hipa. Ko nga maangai o tenei whanau o nga papaa raraunga ko InfluxDB, Prometheus, KDB, TimescaleDB (i hanga ki runga PostgreSQL), rongoā mai Amazon. PaateneToko Ka taea hoki te whakamahi i konei, ka whakamahia. Ka hoatu e ahau etahi tauira mo te iwi.

Ko tetahi o nga pionia ko te kamupene Cloudflare (CDN-kaiwhakarato). Ka aroturuki ratou i o raatau CDN i roto i PaateneToko (DNS- tono, HTTP-Queries) me te kawenga nui - 6 miriona kaupapa mo ia hekona. Ka haere nga mea katoa Kafka, ka haere ki PaateneToko, e whakarato ana i te whai waahi ki te kite i nga papatohu o nga huihuinga i roto i te punaha i te waa tuuturu.

Comcast - tetahi o nga kaihautu i roto i nga korero waea i Amerika: Ipurangi, pouaka whakaata mamati, waea waea. I hanga e ratou he punaha whakahaere rite CDN i roto i te anga Open Source te kaupapa Mana Whakahaere Apache ki te mahi me o raraunga nui. PaateneToko whakamahia hei tuara mo te tātaritanga.

percona hangaia ki roto PaateneToko roto i to PMMki te rokiroki aroturuki o ngā momo MySQL.

Nga Whakaritenga Tauwhāiti

Kei nga papaa raraunga raupapa-waa o raatau ake whakaritenga.

  • Te whakaurunga tere mai i nga kaihoko maha. Me tere rawa te whakauru raraunga mai i nga awa maha. PaateneToko He pai tenei na te mea ko ana whakaurunga katoa kaore i te aukati. Tetahi kōkuhu he konae hou kei runga i te kōpae, a ka taea te aukati i nga whakauru iti i tetahi huarahi, i tetahi atu. IN PaateneToko He pai ake te whakauru i nga raraunga ki roto i nga puranga nui, kaua ki te raina kotahi i te wa kotahi.
  • Kaupapa hangore. Ko te raupapa-wa kaore matou e tino mohio ki te hanganga raraunga. Ka taea te hanga i tetahi punaha aroturuki mo tetahi tono motuhake, engari he uaua ki te whakamahi mo tetahi atu tono. Me whai kaupapa ngawari ake tenei. PaateneToko, ka taea e koe te mahi i tenei, ahakoa he turanga tino patopato.
  • He pai te rokiroki me te wareware i nga raraunga. I te nuinga o te waa raupapa-wa he nui te nui o nga raraunga, no reira me penapena kia pai. Hei tauira, i InfluxDB pai kōpeketanga ko tona āhuatanga matua. Engari i tua atu i te rokiroki, me kaha koe ki te "wareware" i nga raraunga tawhito me te mahi i etahi momo whakahekenga — tatau aunoa o nga whakahiato.
  • Uiui tere mo nga raraunga whakahiato. I etahi wa he pai ki te titiro ki nga meneti e 5 kua hipa me te tika o nga manomano, engari i runga i nga meneti raraunga ia marama, karekau pea e hiahiatia te waahanga - he nui nga tatauranga whanui. Ko te tautoko o tenei ahua e tika ana, ki te kore he tono mo te 3 marama ka roa rawa te whakaoti ahakoa i roto PaateneToko.
  • Nga tono penei "wāhi whakamutunga, rite o». He tikanga enei mo raupapa-wa nga patai: tirohia te inenga whakamutunga, te ahua ranei o te punaha i tetahi wa t. Ehara enei i nga patai tino pai mo te putunga raraunga, engari me kaha koe ki te mahi.
  • "Gluing" raupapa wa. Wā-raupapa he raupapa wa. Mēnā e rua ngā rangatū wā, me tūhono me te hono. Kaore i te watea ki te mahi i tenei i runga i nga papaa raraunga katoa, ina koa me nga raupapa waahi kore e hono: koinei etahi waahi, ko etahi atu. Ka taea e koe te whakaaro toharite, engari katahi ano ka puta he kohao ki reira, no reira kaore i te marama.

Kia kite tatou me pehea enei whakaritenga e tutuki ai PaateneToko.

Ko te kaupapa

В PaateneToko kaupapa mo raupapa-wa ka taea te mahi i roto i nga huarahi rereke, i runga i te tohu o te auau o nga raraunga. Ka taea te hanga i tetahi punaha i runga i nga raraunga auau ina mohio tatou ki nga inenga katoa i mua. Hei tauira, i mahia e au tenei Cloudflare me te aroturuki CDN he punaha tino pai. Ka taea e koe te hanga i tetahi punaha whanui e aro turuki ana i nga hanganga katoa me nga momo ratonga. Mo nga raraunga koretake, kaore matou e mohio i mua he aha ta matou e aro turuki ana - a koinei pea te keehi tino noa.

Raraunga auau. Ngā tīwae. He ngawari te kaupapa - nga pou me nga momo e hiahiatia ana:

CREATE TABLE cpu (
  created_date Date DEFAULT today(),  
  created_at DateTime DEFAULT now(),  
  time String,  
  tags_id UInt32,  /* join to dim_tag */
  usage_user Float64,  
  usage_system Float64,  
  usage_idle Float64,  
  usage_nice Float64,  
  usage_iowait Float64,  
  usage_irq Float64,  
  usage_softirq Float64,  
  usage_steal Float64,  
  usage_guest Float64,  
  usage_guest_nice Float64
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

He ripanga auau tenei e aro turuki ana i etahi momo mahi uta punaha (kaiwhakamahi, pūnaha, mangere, nehenehe). He ngawari me te waatea, engari kaore i te ngawari. Mena kei te pirangi tatou i tetahi kaupapa ngawari ake, ka taea e taatau te whakamahi i nga raupapa.

Raraunga koretake. Huanga:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  )
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

hanganga Niha e rua nga rarangi: metrics.ingoa и metrics.value. I konei ka taea e koe te penapena i nga raraunga aro turuki noa hei huinga ingoa me te huinga inenga mo ia huihuinga. Mo te arotautanga ake, hei utu mo te hanga kotahi, ka taea e koe te hanga i etahi. Hei tauira, kotahi mo mānu-uara, tetahi - mo int-te tikanga na te mea int Kei te pirangi au ki te penapena pai ake.

Engari he uaua ake te uru atu ki taua hanganga. Me whakamahi koe i tetahi hanganga motuhake, ma te whakamahi i nga mahi motuhake hei tango i nga uara o te tuatahi o te taurangi katahi ano te huinga:

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Engari ka tere tonu te mahi. Ko tetahi atu huarahi ki te penapena i nga raraunga koretake ko te rarangi.

Raraunga koretake. Nga aho. I tenei tikanga tuku iho, kaore he raupapa, ka rongoa nga ingoa me nga uara i te wa kotahi. Ki te 5 nga inenga ka puta mai i te taputapu kotahi i te wa kotahi, 000 nga rarangi ka hangaia i roto i te paataka raraunga:

CREATE TABLE cpu_rlc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metric_name LowCardinality(String),  
  metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);


SELECT 
    maxIf(metric_value, metric_name = 'usage_user'),
    ... 
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)

PaateneToko ka tutuki tenei - he taapiri motuhake PaateneToko SQL. Hei tauira, maxIf — he mahi motuhake e tatau ana i te morahi ma te ine ka tutuki etahi ahuatanga. Ka taea e koe te tuhi i etahi momo korero penei i roto i te tono kotahi ka tatau tonu i te uara mo etahi inenga.

Kia whakatauritea e toru nga huarahi:

Te neke ki ClickHouse: 3 tau i muri mai

taipitopito

I konei kua taapirihia e ahau te "Rahi Raraunga Disk" mo etahi huinga raraunga whakamatautau. Mo nga pou, kei a matou te iti rawa o te rahi o nga raraunga: kopeketanga teitei, te tere o te patai, engari ka utua e matou ma te tuhi i nga mea katoa i te wa kotahi.

I roto i te take o nga raupapa, he iti ake te kino o nga mea katoa. Kei te pai tonu te kopaki o nga raraunga, ka taea te penapena i tetahi tauira koretake. Engari PaateneToko - he pātengi raraunga tīwae, ā, ka tīmata tātau ki te penapena i ngā mea katoa i roto i te raupapa, ka huri hei rarangi kotahi, ka utu maatau mo te ngawari me te whai hua. Mo nga mahi katoa, me panui koe i te huinga katoa ki roto i te mahara, katahi ka kimihia te huānga e hiahiatia ana i roto - a, ki te tipu te huinga, ka heke te tere.

I tetahi o nga kamupene e whakamahi ana i tenei huarahi (hei tauira, über), ka tapahia nga huānga kia 128 nga huānga. Ko nga raraunga mai i nga mano tini me te rahinga o te 200 TB o nga raraunga/ra kaore i te rongoa i roto i te raupapa kotahi, engari i roto i nga raupapa 10, 30 ranei me te arorau rokiroki motuhake.

Ko te huarahi tino ngawari ko nga aho. Engari ko nga raraunga he iti rawa te kopiri, he nui te rahi o te tepu, a ahakoa ka pa mai nga paatai ​​​​i runga i nga waahanga maha, kaore a ClickHouse e mahi pai.

Kaupapa ranu

Me whakaaro kua whiriwhiria e tatou he ara iahiko hurangi. Engari ki te mohio matou ko te nuinga o a maatau papatohu e whakaatu ana i nga inenga kaiwhakamahi me nga punaha, ka taea e taatau te whakauru i enei inenga ki roto i nga pou mai i te huinga i te taumata ripanga penei:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  ),
  usage_user Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_user')],
  usage_system Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_system')]
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

I te wa e whakauru ana PaateneToko ka tatau aunoa ratou. Ma tenei ka taea e koe te whakakotahi i nga pakihi me te ahuareka: he ngawari te kaupapa me te whanui, engari i tangohia e matou nga pou e tino whakamahia ana. Kia mahara kaore tenei i hiahia ki te whakarereke i te whakauru me te ETLkei te whakauru tonu i nga huānga ki te ripanga. I mahi noa matou TANGI KAUPAPA, i tapirihia etahi kaikorero e rua ka whiwhi matou i te kaupapa ranu me te tere ake ka taea e koe te timata ki te whakamahi i tenei wa tonu.

Kotēkē me te kōpeketanga

Ki raupapa-wa He mea nui te pai o to kete i nga raraunga na te mea ka nui rawa te nui o nga korero. IN PaateneToko He huinga taputapu ki te whakatutuki i te paheketanga o te 1:10, 1:20, me etahi wa ake. Ko te tikanga ko te 1 TB o nga raraunga kua wetewetehia i runga i te kōpae ka nui ake te 50-100 GB. He pai te rahi iti, ka taea te panui me te tukatuka tere ake nga raraunga.

Hei whakatutuki i te taumata teitei o te kōpeketanga, PaateneToko tautoko ana i nga kotēkē e whai ake nei:

Te neke ki ClickHouse: 3 tau i muri mai

Tauira ripanga:

CREATE TABLE benchmark.cpu_codecs_lz4 (
    created_date Date DEFAULT today(), 
    created_at DateTime DEFAULT now() Codec(DoubleDelta, LZ4), 
    tags_id UInt32, 
    usage_user Float64 Codec(Gorilla, LZ4), 
    usage_system Float64 Codec(Gorilla, LZ4), 
    usage_idle Float64 Codec(Gorilla, LZ4), 
    usage_nice Float64 Codec(Gorilla, LZ4), 
    usage_iowait Float64 Codec(Gorilla, LZ4), 
    usage_irq Float64 Codec(Gorilla, LZ4), 
    usage_softirq Float64 Codec(Gorilla, LZ4), 
    usage_steal Float64 Codec(Gorilla, LZ4), 
    usage_guest Float64 Codec(Gorilla, LZ4), 
    usage_guest_nice Float64 Codec(Gorilla, LZ4), 
    additional_tags String DEFAULT ''
)
ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

I konei ka tautuhia e matou te codec Tataurua i tetahi take, i te tuarua - Gorilla, ka tino taapiri atu ano tatou LZ4 kōpeketanga. Ko te mutunga, ka tino whakaitihia te rahi o nga raraunga i runga i te kōpae:

Te neke ki ClickHouse: 3 tau i muri mai

E whakaatu ana tenei i te nui o te mokowhiti o te raraunga kotahi, engari ma te whakamahi i nga kotēkē me te kōpeketanga rerekē:

  • i roto i te kōnae GZIP i runga i te kōpae;
  • i roto i te ClickHouse kahore he kotēkē, engari ki te kōpeketanga ZSTD;
  • i ClickHouse me nga kotēkē me te kōpeketanga LZ4 me ZSTD.

Ka kitea he iti ake te waahi o nga ripanga me nga kotēkē.

Rawe rahi

Ehara i te mea iti выбрать momo raraunga tika:

Te neke ki ClickHouse: 3 tau i muri mai

I nga tauira katoa i runga ake nei i whakamahia e au Mānu64. Engari ki te whiriwhiri tatou Mānu32, ka pai ake tena. I tino whakaatuhia tenei e nga taangata mai i Perkona i roto i te tuhinga e hono ana i runga ake nei. He mea nui ki te whakamahi i te momo kiato e tika ana mo te mahi: he iti ake mo te rahi o te kōpae i te tere uinga. PaateneToko tino tairongo ki tenei.

Mena ka taea e koe te whakamahi int32 Tuhinga o mua int64, katahi ka tatari kia tata rua nga pikinga o te mahi. He iti ake te mahara o nga raraunga, a ka tere ake te mahi o nga "aritmetika" katoa. PaateneToko o roto he punaha tino patopato, he tino whakamahi i nga huarahi katoa ka tukuna e nga punaha hou.

Te whakahiato me te Tirohanga Tutuki

Ko te whakahiato me nga tirohanga whakahiato ka taea e koe te hanga whakahiato mo nga waa rereke:

Te neke ki ClickHouse: 3 tau i muri mai

Hei tauira, kei a koe he raraunga puna kore whakahiato, a ka taea e koe te taapiri i nga momo tirohanga ki a raatau me te whakahiato aunoa ma te miihini motuhake. SummingMergeTree (SMT). SMT he hanganga raraunga whakahiato motuhake e tatau aunoa i nga whakahiato. Ka whakauruhia nga raraunga mata ki roto i te paataka raraunga, ka whakahiato aunoa, ka taea te whakamahi i nga papatohu ki runga tonu.

TTL - "wareware" nga raraunga tawhito

Me pehea te "wareware" i nga raraunga kaore e hiahiatia ana? PaateneToko e mohio ana ki te mahi i tenei. A, no te hanga ripanga, ka taea e koe te tautuhi TTL nga korero: hei tauira, ka rokiroki matou i nga raraunga meneti mo te ra kotahi, nga raraunga o ia ra mo nga ra 30, kaua rawa e pa ki nga raraunga ia wiki, ia marama ranei:

CREATE TABLE aggr_by_minute
…
TTL time + interval 1 day

CREATE TABLE aggr_by_day
…
TTL time + interval 30 day

CREATE TABLE aggr_by_week
…
/* no TTL */

taumata-maha - wehewehe raraunga puta noa i nga kōpae

Ka mau ake tenei whakaaro, ka taea te penapena raraunga ki roto PaateneToko i nga waahi rereke. Whakaarohia kei te pirangi matou ki te penapena raraunga wera mo te wiki kua hipa i runga i te rohe tere rawa SSD, a ka tukuna e matou etahi atu raraunga o mua ki tetahi atu waahi. IN PaateneToko ka taea tenei inaianei:

Te neke ki ClickHouse: 3 tau i muri mai

Ka taea e koe te whirihora i tetahi kaupapa here rokiroki (kaupapa here rokiroki) Na PaateneToko ka whakawhiti aunoa i nga raraunga ina tae ki etahi tikanga ki tetahi atu rokiroki.

Engari ehara i te mea ko tera anake. I te taumata o tetahi ripanga motuhake, ka taea e koe te tautuhi i nga ture mo te wa tika ka uru nga raraunga ki te rokiroki makariri. Hei tauira, ka penapena nga raraunga ki runga i te kōpae tere rawa mo nga ra e 7, ka whakawhitia nga mea tawhito ki te puhoi. He pai tenei na te mea ka taea e koe te pupuri i te punaha ki te tino mahi, i a koe e whakahaere ana i nga utu me te kore e moumou moni mo nga raraunga makariri:

CREATE TABLE 
... 
TTL date + INTERVAL 7 DAY TO VOLUME 'cold_volume', 
    date + INTERVAL 180 DAY DELETE

Nga ahuatanga ahurei PaateneToko

Tata ki nga mea katoa PaateneToko He "whakahirahira" enei, engari he mea whakakorikori na te motuhake - he mea kaore i roto i etahi atu putunga raraunga. Hei tauira, koinei etahi o nga ahuatanga ahurei PaateneToko:

  • Huanga. Ko te PaateneToko tautoko tino pai mo nga raupapa, me te kaha ki te mahi i nga tatauranga uaua ki runga i a raatau.
  • Te Whakakotahi i nga Hanganga Raraunga. Koinei tetahi o nga "ahua whakamate" PaateneToko. Ahakoa te mea ko nga taangata mai i Yandex e kii ana kaore matou e hiahia ki te whakahiato raraunga, kua whakahiatohia nga mea katoa ki roto. PaateneToko, no te mea he tere me te watea.
  • Nga Tirohanga Whai Rawa. I te taha o nga hanganga raraunga whakahiato, ka taea e nga tirohanga hangai kia watea koe wā-tūturu whakahiatotanga.
  • ClickHouse SQL. He toronga reo tenei SQL me etahi atu waahanga motuhake e waatea ana i roto PaateneToko. I mua, he rite ki te roha i tetahi taha, me te kino ki tetahi atu. Inaianei tata katoa nga ngoikoretanga ka whakaritea ki SQL 92 i tangohia e matou, inaianei he toronga noa.
  • lambda–whakapuaki. Kei roto tonu ratou i tetahi putunga raraunga?
  • ML-tautoko. Kei te waatea tenei i roto i nga papaa raraunga rereke, he pai ake etahi, he kino etahi.
  • puna tuwhera. Ka taea e tatou te whakawhānui PaateneToko tahi. Inaianei kei roto PaateneToko tata ki te 500 nga kaikoha, a kei te piki haere tonu tenei nama.

Nga patai uaua

В PaateneToko he maha nga huarahi rereke hei mahi i taua mea. Hei tauira, ka taea e koe te whakahoki i te uara whakamutunga mai i te ripanga ma nga huarahi rereke e toru mo PTM (kei reira ano te tuawha, engari he mea ke atu).

Ko te tuatahi e whakaatu ana i te watea ki te mahi i roto PaateneToko nga patai ina hiahia koe ki te tirotiro i tera tuple kei roto i te patai. He mea tenei i tino ngaro ahau i etahi atu papaa raraunga. Mena kei te pirangi au ki te whakatairite i tetahi mea ki te patai, katahi ka taea te whakataurite ki etahi atu papaa raraunga he scalar anake, engari mo etahi pou me tuhi e au. Hono. Ko te PaateneToko Ka taea e koe te whakamahi i te tuple:

SELECT *
  FROM cpu 
 WHERE (tags_id, created_at) IN 
    (SELECT tags_id, max(created_at)
        FROM cpu 
        GROUP BY tags_id)

He rite tonu te mahi a te tikanga tuarua engari he mahi whakahiato argMax:

SELECT 
    argMax(usage_user), created_at),
    argMax(usage_system), created_at),
...
 FROM cpu 

В PaateneToko He maha nga mahi whakahiato, a, ki te whakamahi koe i nga whakakotahi, ka rite ki nga ture o te whakakotahi ka whiwhi koe mo te kotahi mano. ArgMax - tetahi o nga mahi e tatau ana i te uara teitei: ka whakahokia e te tono te uara whakamahi_kaiwhakamahi, ka tae ki te uara teitei hangaia_i:

SELECT now() as created_at,
       cpu.*
  FROM (SELECT DISTINCT tags_id from cpu) base 
  ASOF LEFT JOIN cpu USING (tags_id, created_at)

ASOF Hono - "whakapiri" rarangi ki nga wa rereke. He ahuatanga motuhake tenei mo nga papaunga raraunga e waatea ana ki roto kdb+. Mēnā e rua ngā rangatū wā me ngā wā rerekē, ASOF Hono ka taea e koe te neke me te hanumi i roto i te tono kotahi. Mo ia uara i roto i te raupapa wa kotahi, ka kitea te uara tata ki tetahi atu, ka whakahokia ki te raina kotahi:

Te neke ki ClickHouse: 3 tau i muri mai

Nga Mahi Taatari

I roto i te paerewa SQL-2003 ka taea e koe te tuhi penei:

SELECT origin,
       timestamp,
       timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
       timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
       ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
       COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
  FROM mytable
ORDER BY origin, timestamp;

В PaateneToko Kaore e taea e koe - kaore i te tautoko i te paerewa SQL-2003 a kare pea e mahi. Engari, i roto i PaateneToko He tikanga kia penei te tuhi:

Te neke ki ClickHouse: 3 tau i muri mai

I oati ahau ki nga lambdas - koinei!

He tairitenga tenei mo te patai tātari i te paerewa SQL-2003: ka tatau ia i te rereketanga i waenga i nga mea e rua tohu wa, roa, tau ordinal - nga mea katoa ka whakaarohia e matou he mahi tātari. IN PaateneToko Ka tatauhia e matou ma roto i nga rarangi: tuatahi ka tiango nga raraunga ki roto i te rarangi, ka mutu ka mahia e matou nga mea katoa e hiahia ana matou ki te rarangi, katahi ka whakawhānuihia e matou. Ehara i te mea tino watea, he iti rawa te aroha ki te kaupapa mahi, engari he tino ngawari.

Nga waahanga motuhake

I tua atu, i roto i PaateneToko maha nga mahi motuhake. Hei tauira, me pehea te whakatau e hia nga huihuinga i te wa kotahi? Ko te mahi aroturuki angamaheni ko te whakatau i te kawenga morahi me te tono kotahi. IN PaateneToko He mahi motuhake mo tenei kaupapa:

Te neke ki ClickHouse: 3 tau i muri mai

I te nuinga o te waa, he mahi motuhake a ClickHouse mo nga kaupapa maha:

  • runningDifference, runningAccumulate, hoa tata;
  • sumMap(matua, uara);
  • timeSeriesGroupSum(uid, waitohuwā, uara);
  • timeSeriesGroupRateSum(uid, waitohuwā, uara);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • KI TE WHAKAKI / KI TE TITI;
  • SimpleLinearRegression, stochasticLinearRegression.

Ehara tenei i te rarangi katoa o nga mahi, he 500-600 te katoa. Tohu: nga mahi katoa kei roto PaateneToko kei roto i te ripanga punaha (kaore katoa i tuhia, engari he mea whakamere katoa):

select * from system.functions order by name

PaateneToko he maha nga korero e rongoa ana mo ia ano, tae atu ki tepu rangitaki, rangitaki_uiui, rangitaki tohu, rangitaki o nga mahi me nga poraka raraunga (wahanga_raupapa), te raarangi inenga, me te raarangi punaha, ka tuhia ki te kōpae. Ko nga inenga rangitaki raupapa-wa в PaateneToko i roto i te meka PaateneToko: Ka taea e te pātengi raraunga ake te mahi raupapa-wa pātengi raraunga, na reira "kai" ano.

Te neke ki ClickHouse: 3 tau i muri mai

He mea ahurei ano tenei - na te mea he pai ta matou mahi raupapa-wa, he aha e kore e taea e tatou te penapena i nga mea katoa e hiahiatia ana e tatou i roto ia tatou? Kaore matou e hiahia Prometheus, ka pupuri tatou i nga mea katoa ki a tatou ano. Kua hono Karepe a ka aroturuki matou ia matou ano. Heoi, mena PaateneToko ka hinga, kaore matou e kite he aha, na te tikanga kaore ratou e mahi.

He kahui nui, he maha ranei nga mea iti PaateneToko

He aha te mea pai - kotahi tautau nui, maha ranei nga ClickHouses iti? Te huarahi tuku iho ki DWH he kahui nui e tohatohahia ai nga iahiko mo ia tono. I tae mai matou ki te kaiwhakahaere papaa raraunga - homai he hoahoa ki a matou, a ka homai e ratou tetahi:

Te neke ki ClickHouse: 3 tau i muri mai

В PaateneToko ka taea e koe te mahi rereke. Ka taea e koe te hanga i ia tono nau ake PaateneToko:

Te neke ki ClickHouse: 3 tau i muri mai

Kare e hiahiatia ana e matou te mea nanakia DWH me nga kaiwhakahaere kaha. Ka taea e taatau te hoatu ki ia tono tana ake PaateneToko, a ka taea e te kaiwhakawhanake te mahi i a ia ano, mai PaateneToko he tino ngawari ki te whakauru me te kore e hiahiatia he whakahaere uaua:

Te neke ki ClickHouse: 3 tau i muri mai

Engari mena he nui ta tatou PaateneToko, ka hiahia koe ki te whakauru maha, ka hiahia koe ki te whakaaunoa i tenei tukanga. Mo tenei ka taea e tatou, hei tauira, te whakamahi Kubernetes и whare clickhouse-kaiwhakahaere. IN Kubernetes ClickHouse ka taea e koe te tuku "i runga i te paatene": Ka taea e au te patene i te paatene, te whakahaere i te whakaaturanga me te reri te putunga raraunga. Ka taea e au te hanga hoahoa tonu, ka tiimata ki te tuku inenga ki reira, a i roto i te 5 meneti kua reri taku papatohu Karepe. He tino ngawari!

He aha i te mutunga?

Na PaateneToko - Tenei:

  • Tere. E mohio ana te katoa ki tenei.
  • Naku. He iti te tautohetohe, engari e whakapono ana ahau he uaua ki te whakangungu, he ngawari ki te whawhai. Mena ka mohio koe me pehea PaateneToko ka mahi, katahi ka tino ngawari nga mea katoa.
  • Wananga. He pai mo nga ahuatanga rereke: DWH, Waa Raupapa, Rokiroki Rangitaki. Engari ehara NGARU pātengi raraunga, na kaua e ngana ki te whakauru poto me te panui ki reira.
  • He pai. Ko te tangata pea e mahi tahi ana PaateneToko, he maha nga wa whakamere i roto i te ahua pai me te kino. Hei tauira, ka puta he putanga hou, ka mutu nga mahi katoa. I a koe e tohe ana ki tetahi mahi mo nga ra e rua, engari i muri i te patai i tetahi patai i roto i te korerorero Telegram, ka whakaotihia te mahi i roto i nga meneti e rua. Ka rite ranei ki te huihuinga i te ripoata a Lesha Milovidov, he whakaahua mai i PaateneToko pakaru te haapurororaa UtuWhakauru ++. Ko tenei momo mea ka tupu i nga wa katoa ka uaua to tatou oranga. PaateneToko kanapa me te whakamere!

Ka taea e koe te matakitaki i te whakaaturanga konei.

Te neke ki ClickHouse: 3 tau i muri mai

Ko te hui kua roa e tatarihia ana e nga kaiwhakawhanake o nga punaha kawenga nui i UtuWhakauru ++ ka puta i te Noema 9 me te 10 i Skolkovo. Ka mutu, he hui tuimotu tenei (ahakoa me nga mahi tupato katoa), i te mea kaore e taea te kii ipurangi te kaha o HighLoad++.

Mo te huihuinga, ka kitea e matou, ka whakaatu atu ki a koe nga keehi e pa ana ki nga kaha o te hangarau: Ko te HighLoad ++, ko te waahi anake ka taea e koe te ako i nga ra e rua me pehea te mahi a Facebook, Yandex, VKontakte, Google me Amazon.

No te mea ka tu a tatou hui me te kore aukati mai i te tau 2007, i tenei tau ka hui mo te 14 o nga wa. I tenei wa, 10 nga wa i piki ake ai te huihuinga; i tera tau, i huia e te hui ahumahi matua 3339 nga kaiuru, 165 nga kaikorero, nga purongo me nga huihuinga, a 16 nga riipene e rere ana i te wa kotahi.
I tera tau e 20 nga pahi, 5280 rita o te ti me te kawhe, 1650 rita o nga inu huarākau me te 10200 ipu wai. Me etahi atu 2640 kirokaramu kai, 16 pereti me te 000 kapu. Ae ra, na nga moni i kohia mai i te pepa hangarua, 25 nga tipu oki i whakato :)

Ka taea e koe te hoko tikiti konei, tiki korero mo te hui - konei, me te korero i runga i nga whatunga hapori katoa: waea, Facebook, Vkontakte и Twitter.

Source: will.com

Tāpiri i te kōrero