Nimxu għal ClickHouse: 3 snin wara

Tliet snin ilu Viktor Tarnavsky u Alexey Milovidov minn Yandex fuq il-palk HighLoad ++ qal, kemm hi tajba ClickHouse, u kif ma jonqosx. U fl-istadju li jmiss kien hemm Alexander Zaitsev с rapport dwar iċ-ċaqliq lejn IkklikkjaHouse minn DBMS analitiku ieħor u bil-konklużjoni li IkklikkjaHouse, ovvjament, tajjeb, iżda mhux konvenjenti ħafna. Meta fl-2016 il-kumpanija LifeStreet, fejn Alexander imbagħad ħadem, kien qed jikkonverti sistema analitika multi-petabyte għal IkklikkjaHouse, kienet "triq tal-briks isfar" affaxxinanti mimlija perikli mhux magħrufa - IkklikkjaHouse dakinhar deher qisu kamp tal-mini.

Tliet snin wara IkklikkjaHouse sar ħafna aħjar - matul dan iż-żmien Alexander waqqaf il-kumpanija Altinity, li mhux biss tgħin lin-nies jimxu lejn IkklikkjaHouse għexieren ta 'proġetti, iżda wkoll itejjeb il-prodott innifsu flimkien ma' kollegi minn Yandex. Issa IkklikkjaHouse għadu mhux stroll bla ħsieb, iżda m'għadux kamp tal-mini.

Alexander ilu jaħdem ma 'sistemi distribwiti mill-2003, jiżviluppaw proġetti kbar fuq MySQL, Oracle и Vertika. Fuq l-aħħar HighLoad ++ 2019 Alexander, wieħed mill-pijunieri tal-użu IkklikkjaHouse, qal x'inhu dan id-DBMS issa. Aħna se nitgħallmu dwar il-karatteristiċi ewlenin IkklikkjaHouse: kif hija differenti minn sistemi oħra u f'liema każijiet huwa aktar effettiv li tużah. Bl-użu ta 'eżempji, se nħarsu lejn prattiki riċenti u ttestjati mill-proġett għal sistemi ta' bini bbażati fuq IkklikkjaHouse.


Retrospettiva: dak li ġara 3 snin ilu

Tliet snin ilu ttrasferijna l-kumpanija LifeStreet fuq IkklikkjaHouse minn database analitika oħra, u l-migrazzjoni tal-analiżi tan-netwerk tar-reklami dehret hekk:

  • Ġunju 2016. Fil Sors miftuħ deher IkklikkjaHouse u l-proġett tagħna beda;
  • Awissu Prova tal-Kunċett: netwerk kbir ta' reklamar, infrastruttura u 200-300 terabytes ta' data;
  • Ottubru. L-ewwel data tal-produzzjoni;
  • Diċembru. It-tagħbija sħiħa tal-prodott hija 10-50 biljun avveniment kuljum.
  • Ġunju 2017. Migrazzjoni b'suċċess tal-utenti lejn IkklikkjaHouse, 2,5 petabytes ta' data fuq raggruppament ta' 60 server.

Matul il-proċess ta’ migrazzjoni, kien hemm fehim dejjem akbar ta’ dan IkklikkjaHouse hija sistema tajba li hija pjaċevoli biex taħdem magħha, iżda dan huwa proġett intern ta 'Yandex. Għalhekk, hemm sfumaturi: Yandex l-ewwel se tittratta mal-klijenti interni tagħha stess u mbagħad biss mal-komunità u l-ħtiġijiet ta 'utenti esterni, u ClickHouse mbagħad ma laħqitx il-livell ta' intrapriża f'ħafna oqsma funzjonali. Huwa għalhekk li waqqafna Altinity f'Marzu 2017 biex nagħmlu IkklikkjaHouse saħansitra aktar mgħaġġla u aktar konvenjenti mhux biss għal Yandex, iżda wkoll għal utenti oħra. U issa aħna:

  • Aħna nħarrġu u ngħinu nibnu soluzzjonijiet ibbażati fuq IkklikkjaHouse sabiex il-klijenti ma jidħlux fl-inkwiet, u sabiex is-soluzzjoni finalment taħdem;
  • Aħna nipprovdu appoġġ 24/7 IkklikkjaHouse- installazzjonijiet;
  • Aħna niżviluppaw il-proġetti tal-ekosistema tagħna stess;
  • Aħna nimpenjaw ruħhom b'mod attiv magħna nfusna IkklikkjaHouse, iwieġeb għal talbiet minn utenti li jridu jaraw ċerti karatteristiċi.

U ovvjament, aħna ngħinu biex nimxu lejn IkklikkjaHouse с MySQL, Vertika, Oracle, Greenplum, Redshift u sistemi oħra. Konna involuti f’varjetà ta’ mossi, u kollha kellhom suċċess.

Nimxu għal ClickHouse: 3 snin wara

Għaliex jimxu lejn IkklikkjaHouse

Ma jonqosx! Din hija r-raġuni ewlenija. IkklikkjaHouse - database veloċi ħafna għal xenarji differenti:

Nimxu għal ClickHouse: 3 snin wara

Kwotazzjonijiet każwali minn nies li ilhom jaħdmu man-nies għal żmien twil IkklikkjaHouse.

Skalabbiltà. Fuq xi database oħra tista 'tikseb prestazzjoni tajba fuq biċċa waħda ta' ħardwer, iżda IkklikkjaHouse tista 'skala mhux biss vertikalment, iżda wkoll orizzontalment, sempliċiment billi żżid servers. Kollox ma jaħdimx bla xkiel kif nixtiequ, imma jaħdem. Tista' tespandi s-sistema hekk kif in-negozju tiegħek jikber. Huwa importanti li ma nkunux limitati bis-soluzzjoni issa u dejjem hemm potenzjal għall-iżvilupp.

Portabilità. M'hemm l-ebda rabta ma 'ħaġa waħda. Per eżempju, ma Amazon RedShift Huwa diffiċli li timxi x'imkien. A IkklikkjaHouse tista' tinstallah fuq il-laptop tiegħek, is-server, tiskjeraha fis-sħaba, mur Kubernetes — m'hemm l-ebda restrizzjonijiet fuq l-operat ta' l-infrastruttura. Dan huwa konvenjenti għal kulħadd, u dan huwa vantaġġ kbir li ħafna databases oħra simili ma jistgħux jiftaħar bih.

Flessibilità. IkklikkjaHouse ma tieqafx fuq ħaġa waħda, pereżempju, Yandex.Metrica, iżda tiżviluppa u tintuża f'aktar u aktar proġetti u industriji differenti. Jista 'jiġi estiż billi żżid kapaċitajiet ġodda biex issolvi problemi ġodda. Pereżempju, huwa maħsub li l-ħażna ta 'zkuk f'database hija manjieri ħżiena, għalhekk ħarġu bihom Elasticsearch. Iżda grazzi għall-flessibbiltà IkklikkjaHouse, tista 'wkoll taħżen zkuk fiha, u ħafna drabi dan huwa saħansitra aħjar minn ġewwa Elasticsearch - fi IkklikkjaHouse dan jeħtieġ 10 darbiet inqas ħadid.

Libera Open Source. M'għandekx għalfejn tħallas għal xejn. M'hemmx bżonn li tinnegozja l-permess biex tinstalla s-sistema fuq il-laptop jew is-server tiegħek. Ebda miżati moħbija. Fl-istess ħin, l-ebda teknoloġija oħra ta 'database Open Source ma tista' tikkompeti b'veloċità IkklikkjaHouse. MySQL, MariaDB, Greenplum - huma kollha ħafna aktar bil-mod.

Komunità, issuq u gost. Have IkklikkjaHouse komunità eċċellenti: laqgħat, chats u Alexey Milovidov, li jiċċarġja lilna lkoll bl-enerġija u l-ottimiżmu tiegħu.

Nimxu għal ClickHouse

Biex tmur IkklikkjaHouse għal xi raġuni, għandek bżonn biss tliet affarijiet:

  • Ifhem il-limitazzjonijiet IkklikkjaHouse u għalxiex mhux adattat.
  • Ħu vantaġġ teknoloġija u l-akbar saħħiet tagħha.
  • Esperiment. Anke tifhem kif taħdem IkklikkjaHouse, mhux dejjem ikun possibbli li wieħed ibassar meta se jkun aktar mgħaġġel, meta se jkun aktar bil-mod, meta se jkun aħjar, u meta se jkun agħar. Allura ipprova.

Problema li tiċċaqlaq

Hemm wieħed biss "iżda": jekk inti tmur IkklikkjaHouse minn xi ħaġa oħra, allura normalment xi ħaġa tmur ħażin. Aħna mdorrijin b'xi prattiċi u affarijiet li jaħdmu fid-database favorita tagħna. Per eżempju, kull min jaħdem miegħu SQL-databases jikkunsidraw is-sett ta' funzjonijiet li ġejjin obbligatorji:

  • tranżazzjonijiet;
  • restrizzjonijiet;
  • konsistenza;
  • indiċijiet;
  • AĠĠORNA/ĦAĦSAR;
  • NULLS;
  • millisekondi;
  • Casts tat-tip awtomatiku;
  • tingħaqad multipli;
  • diviżorji arbitrarji;
  • għodod għall-ġestjoni tal-clusters.

Ir-reklutaġġ huwa obbligatorju, iżda tliet snin ilu fi IkklikkjaHouse L-ebda waħda minn dawn il-funzjonijiet ma kienet disponibbli! Issa inqas minn nofs dak li ma ġiex implimentat jibqa ': transazzjonijiet, restrizzjonijiet, Konsistenza, millisekondi u ikkastjar tat-tip.

U l-ħaġa prinċipali hija li fil IkklikkjaHouse xi prattiki u approċċi standard ma jaħdmux jew jaħdmu b'mod differenti minn kif aħna mdorrijin. Dak kollu li jidher fih IkklikkjaHouse, jikkorrispondi għal "Mod ClickHouse", i.e. funzjonijiet huma differenti minn databases oħra. Pereżempju:

  • L-indiċijiet mhumiex magħżula, iżda maqbuża.
  • AĠĠORNA/ĦAĦSAR mhux sinkroniku, iżda mhux sinkroniku.
  • Hemm multipli joins, iżda m'hemm l-ebda query planner. Kif imbagħad jitwettqu ġeneralment mhuwiex ċar ħafna għan-nies mid-dinja tad-database.

ClickHouse Scripts

Fl-1960, matematiku Amerikan ta 'oriġini Ungeriża Wigner EP kiteb artiklu "L-effettività mhux raġonevoli tal-matematika fix-xjenzi naturali” (“L-Effettività Inkomprensibbli tal-Matematika fix-Xjenzi Naturali”) li d-dinja ta’ madwarna hija għal xi raġuni deskritta tajjeb mil-liġijiet matematiċi. Il-matematika hija xjenza astratta, u l-liġijiet fiżiċi espressi f'forma matematika mhumiex trivjali, u Wigner EP saħaq li din hija stramba ħafna.

Mill-perspettiva tiegħi, IkklikkjaHouse - l-istess stramba. Biex nirriformulaw lil Wigner, nistgħu ngħidu dan: l-effiċjenza inkonċepibbli hija tal-għaġeb IkklikkjaHouse f'varjetà wiesgħa ta 'applikazzjonijiet analitiċi!

Nimxu għal ClickHouse: 3 snin wara

Per eżempju, ejja nieħdu Maħżen tad-Dejta f'Ħin Real, li fiha d-data titgħabba kważi kontinwament. Irridu nirċievu talbiet mingħandu bit-tieni dewmien. Jekk jogħġbok - użaha IkklikkjaHouse, għax dan huwa x-xenarju li kien iddisinjat għalih. IkklikkjaHouse dan huwa eżattament kif jintuża mhux biss fuq il-web, iżda wkoll fil-marketing u l-analiżi finanzjarja, AdTech, kif ukoll in Sejbien ta' frodin. IN Ħażna tad-Data f'ħin reali skema strutturata kumplessa bħal "istilla" jew "snowflake" hija użata, ħafna tabelli bi Jissieħbu (xi kultant multipli), u d-dejta normalment tinħażen u tinbidel f'xi sistemi.

Ejja nieħdu xenarju ieħor - Serje ta' Ħin: monitoraġġ tal-apparati, netwerks, statistika tal-użu, Internet tal-Oġġetti. Hawnhekk niltaqgħu ma 'avvenimenti pjuttost sempliċi ordnati fil-ħin. IkklikkjaHouse ma kienx żviluppat oriġinarjament għal dan, iżda wriet ruħha li taħdem tajjeb, u huwa għalhekk li kumpaniji kbar jużaw IkklikkjaHouse bħala repożitorju għall-monitoraġġ tal-informazzjoni. Biex tesplora jekk huwiex adattat IkklikkjaHouse għal serje ta 'żmien, għamilna punt ta' referenza bbażat fuq l-approċċ u r-riżultati InfluxDB и TimecaleDB - speċjalizzati serje ta' żmien databases. IrriżultaLi IkklikkjaHouse, anki mingħajr ottimizzazzjoni għal kompiti bħal dawn, jirbaħ fuq qasam barrani:

Nimxu għal ClickHouse: 3 snin wara

В serje ta' żmien Normalment tintuża tabella dejqa - diversi kolonni żgħar. Ħafna dejta tista' tiġi mill-monitoraġġ—miljuni ta' rekords kull sekonda—u ġeneralment jiġu f'fqigħ żgħar (fil-ħin reali streaming). Għalhekk, hija meħtieġa skript ta 'inserzjoni differenti, u l-mistoqsijiet infushom għandhom l-ispeċifiċitajiet tagħhom stess.

Ġestjoni tar-Reġistrazzjoni. Il-ġbir ta' zkuk f'database normalment ikun ħażin, iżda IkklikkjaHouse dan jista' jsir b'xi kummenti kif deskritt hawn fuq. Ħafna kumpaniji jużaw IkklikkjaHouse eżattament għal dan il-għan. F'dan il-każ, nużaw tabella wiesgħa ċatta fejn naħżnu z-zkuk kollha (per eżempju, fil-forma JSON), jew maqtugħ f'biċċiet. Id-dejta ġeneralment titgħabba f'lottijiet kbar (fajls), u aħna nfittxu minn xi qasam.

Għal kull waħda minn dawn il-funzjonijiet, normalment jintużaw databases speċjalizzati. IkklikkjaHouse wie[ed jista’ jag[mel kollox u tant tajjeb li jissuperahom. Ejja issa nagħtu ħarsa aktar mill-qrib serje ta' żmien xenarju, u kif "issajjar" b'mod korrett IkklikkjaHouse għal dan ix-xenarju.

Time-Serje

Bħalissa dan huwa x-xenarju ewlieni li għalih IkklikkjaHouse ikkunsidrat is-soluzzjoni standard. Serje tal-ħin huwa sett ta' avvenimenti ordnati fiż-żmien, li jirrappreżentaw bidliet f'xi proċess matul iż-żmien. Pereżempju, din tista' tkun ir-rata tal-qalb kuljum jew in-numru ta' proċessi fis-sistema. Dak kollu li jagħti l-qurdien tal-ħin b'xi dimensjonijiet huwa serje ta' żmien:

Nimxu għal ClickHouse: 3 snin wara

Ħafna minn dawn it-tipi ta' avvenimenti ġejjin mill-monitoraġġ. Dan jista 'jkun mhux biss monitoraġġ tal-web, iżda wkoll apparat reali: karozzi, sistemi industrijali, IoT, fabbriki jew taxis bla ekwipaġġ, li fil-bagoll tagħhom Yandex diġà qed ipoġġi IkklikkjaHouse-server.

Pereżempju, hemm kumpaniji li jiġbru data minn vapuri. Kull ftit sekondi, sensuri fuq il-vapur tal-kontejners jibagħtu mijiet ta 'kejl differenti. L-inġiniera jistudjawhom, jibnu mudelli u jippruvaw jifhmu kemm il-bastiment jintuża b'mod effiċjenti, minħabba li vapur tal-kontejners m'għandux ikun idle lanqas għal sekonda. Kwalunkwe ħin ta' waqfien huwa telf ta' flus, għalhekk huwa importanti li titbassar ir-rotta sabiex l-waqfien ikunu minimi.

Illum il-ġurnata hemm tkabbir ta 'databases speċjalizzati li jkejlu serje ta' żmien. Fuq is-sit DB-Magni Id-databases differenti huma b'xi mod ikklassifikati, u tista' tarahom skont it-tip:

Nimxu għal ClickHouse: 3 snin wara

It-tip li qed jikber malajr huwa serje tal-ħins. Id-databases tal-grafiċi qed jikbru wkoll, iżda serje tal-ħins kienu qed jikbru aktar malajr matul l-aħħar ftit snin. Rappreżentanti tipiċi ta 'din il-familja ta' databases huma InfluxDB, Prometheus, KDB, TimecaleDB (mibnija fuq PostgreSQL), soluzzjonijiet minn Amazon. IkklikkjaHouse jista 'jintuża hawn ukoll, u jintuża. Ħa nagħtikom ftit eżempji pubbliċi.

Wieħed mill-pijunieri hija l-kumpanija CloudFlare (CDN-fornitur). Huma jimmonitorjaw tagħhom CDN permezz IkklikkjaHouse (DNS-talbiet, HTTP-mistoqsijiet) b'tagħbija enormi - 6 miljun avveniment kull sekonda. Kollox jgħaddi Kafka, tmur għal IkklikkjaHouse, li tipprovdi l-opportunità li tara dashboards ta 'avvenimenti fis-sistema f'ħin reali.

Comcast - wieħed mill-mexxejja fit-telekomunikazzjoni fl-Istati Uniti: Internet, televiżjoni diġitali, telefonija. Huma ħolqu sistema ta 'kontroll simili CDN fi ħdan Open Source il-proġett Kontroll tat-Traffiku Apache biex taħdem mad-dejta enormi tiegħek. IkklikkjaHouse użat bħala backend għall-analiżi.

percona mibnija ġewwa IkklikkjaHouse ġewwa tiegħek PMMbiex jaħżnu monitoraġġ ta 'varji MySQL.

Ħtiġiet Speċifiċi

Id-databases tas-serje tal-ħin għandhom ir-rekwiżiti speċifiċi tagħhom stess.

  • Inserzjoni veloċi minn ħafna aġenti. Irridu ndaħħlu dejta minn ħafna flussi malajr ħafna. IkklikkjaHouse Jagħmel dan tajjeb minħabba li l-inserzjonijiet kollha tiegħu mhumiex imblukkar. Kwalunkwe DAĦĦAL huwa fajl ġdid fuq disk, u inserzjonijiet żgħar jistgħu jiġu buffered b'xi mod jew ieħor. IN IkklikkjaHouse Huwa aħjar li tiddaħħal id-dejta f'lottijiet kbar aktar milli linja waħda kull darba.
  • Skema flessibbli. Fil serje ta' żmien normalment ma nafux l-istruttura tad-data kompletament. Huwa possibbli li tinbena sistema ta 'monitoraġġ għal applikazzjoni speċifika, iżda mbagħad huwa diffiċli li tużaha għal applikazzjoni oħra. Dan jeħtieġ skema aktar flessibbli. IkklikkjaHouse, jippermettilek tagħmel dan, minkejja li hija bażi ttajpjata b'mod qawwi.
  • Ħażna effiċjenti u tinsa tad-data. Normalment fi serje ta' żmien ammont kbir ta 'dejta, għalhekk għandha tinħażen bl-aktar mod effiċjenti possibbli. Per eżempju, fi InfluxDB kompressjoni tajba hija l-karatteristika ewlenija tagħha. Imma minbarra li taħżen, trid ukoll tkun tista '"tinsa" data antika u tagħmel xi tip ta' it-tnaqqis tal-kampjuni — għadd awtomatiku ta' aggregati.
  • Mistoqsijiet veloċi fuq data aggregata. Xi drabi huwa interessanti li wieħed iħares lejn l-aħħar 5 minuti b'eżattezza ta 'millisekondi, iżda fuq dejta ta' kull xahar minuta jew it-tieni granularità tista 'ma tkunx meħtieġa - statistika ġenerali hija biżżejjed. Appoġġ ta 'dan it-tip huwa meħtieġ, inkella talba għal 3 xhur se tieħu żmien twil ħafna biex titlesta anke fi IkklikkjaHouse.
  • Talbiet bħal "l-aħħar punt, minn». Dawn huma tipiċi għal serje ta' żmien mistoqsijiet: ħares lejn l-aħħar kejl jew stat tas-sistema f'mument fiż-żmien t. Dawn mhumiex mistoqsijiet pjaċevoli ħafna għal database, iżda jeħtieġ ukoll li tkun kapaċi twettaqhom.
  • Serje tal-ħin "Inkullar".. Serje tal-ħin hija serje taż-żmien. Jekk hemm żewġ serje ta 'żmien, ħafna drabi jeħtieġu li jkunu konnessi u korrelatati. Mhuwiex konvenjenti li tagħmel dan fuq id-databases kollha, speċjalment b'serje ta 'żmien mhux allinjati: hawn xi punti ta' żmien, hemm oħrajn. Tista 'tikkunsidra medja, iżda f'daqqa waħda xorta se jkun hemm toqba hemmhekk, għalhekk mhux ċar.

Ejja naraw kif dawn ir-rekwiżiti jintlaħqu fi IkklikkjaHouse.

L-iskema

В IkklikkjaHouse skema għal serje ta' żmien jista' jsir b'modi differenti, skont il-grad ta' regolarità tad-dejta. Huwa possibbli li tinbena sistema fuq data regolari meta nkunu nafu l-metriċi kollha minn qabel. Per eżempju, għamilt dan CloudFlare bil-monitoraġġ CDN hija sistema ottimizzata tajjeb. Tista 'tibni sistema aktar ġenerali li timmonitorja l-infrastruttura kollha u servizzi varji. Fil-każ ta' data irregolari, ma nafux minn qabel x'qed nissorveljaw - u dan huwa probabbilment l-aktar każ komuni.

Data regolari. Kolonni. L-iskema hija sempliċi - kolonni bit-tipi meħtieġa:

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);

Din hija tabella regolari li timmonitorja xi tip ta' attività tat-tagħbija tas-sistema (utent, sistema, idle, nice). Sempliċi u konvenjenti, iżda mhux flessibbli. Jekk irridu skema aktar flessibbli, allura nistgħu nużaw arrays.

Data irregolari. Arrays:

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 ...

Struttura Imbejta huma żewġ matriċi: metriċi.isem и metriċi.valur. Hawnhekk tista 'taħżen tali data ta' monitoraġġ arbitrarja bħala firxa ta 'ismijiet u firxa ta' kejl għal kull avveniment. Għal aktar ottimizzazzjoni, minflok struttura waħda bħal din, tista 'tagħmel diversi. Per eżempju, wieħed għal float-valur, ieħor - għal int-tifsira għaliex int Irrid naħżen b'mod aktar effiċjenti.

Iżda struttura bħal din hija aktar diffiċli biex taċċessaha. Int ser ikollok tuża kostruzzjoni speċjali, billi tuża funzjonijiet speċjali biex tiġbed il-valuri tal-ewwel l-indiċi u mbagħad il-firxa:

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

Iżda xorta taħdem pjuttost malajr. Mod ieħor biex taħżen data irregolari huwa permezz ta 'ringiela.

Data irregolari. Kordi. F'dan il-metodu tradizzjonali, mingħajr matriċi, l-ismijiet u l-valuri huma maħżuna simultanjament. Jekk 5 kejl jiġu minn apparat wieħed f'daqqa, 000 ringiela jiġu ġġenerati fid-database:

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', ...)

IkklikkjaHouse tlaħħaq ma 'dan - għandha estensjonijiet speċjali IkklikkjaHouse SQL. Pereżempju maxJekk — funzjoni speċjali li tikkalkula l-massimu b'metrika meta tiġi sodisfatta xi kundizzjoni. Tista 'tikteb diversi espressjonijiet bħal dawn f'talba waħda u immedjatament tikkalkula l-valur għal diversi metriċi.

Ejja nqabblu tliet approċċi:

Nimxu għal ClickHouse: 3 snin wara

Детали

Hawnhekk żidt "Daqs tad-Data tad-Disk" għal xi sett tad-dejta tat-test. Fil-każ ta 'kolonni, għandna l-iżgħar daqs tad-dejta: kompressjoni massima, veloċità massima ta' mistoqsija, iżda nħallsu billi jkollna nirreġistraw kollox f'daqqa.

Fil-każ ta 'arrays, kollox huwa ftit agħar. Id-dejta għadha kkompressata sew u mudell irregolari jista 'jinħażen. Iżda IkklikkjaHouse - database kolonni, u meta nibdew naħżnu kollox f'firxa, tinbidel f'ringiela waħda, u nħallsu għall-flessibbiltà b'effiċjenza. Għal kwalunkwe operazzjoni, ser ikollok taqra l-firxa kollha fil-memorja, imbagħad issib l-element mixtieq fiha - u jekk il-firxa tikber, allura l-veloċità tiddegrada.

F'waħda mill-kumpaniji li tuża dan l-approċċ (per eżempju, Über), arrays huma maqtugħin f'biċċiet ta '128 element. Dejta minn diversi eluf ta 'metriċi b'volum ta' 200 TB ta 'data/jum hija maħżuna mhux f'firxa waħda, iżda f'10 jew 30 matriċi b'loġika ta' ħażna speċjali.

L-aktar approċċ sempliċi huwa bi kordi. Iżda d-dejta hija kkompressata ħażin, id-daqs tat-tabella huwa kbir, u anke meta l-mistoqsijiet huma bbażati fuq diversi metriċi, ClickHouse ma taħdimx bl-aħjar mod.

Skema ibrida

Ejja nassumu li għażilna ċirkwit array. Imma jekk nafu li ħafna mid-dashboards tagħna juru biss metriċi tal-utent u tas-sistema, nistgħu wkoll jimmaterjalizzaw dawn il-metriċi f'kolonni minn firxa fil-livell tal-mejda b'dan il-mod:

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);

Meta ddaħħal IkklikkjaHouse se jgħoddhom awtomatikament. B'dan il-mod tista 'tgħaqqad in-negozju bi pjaċir: l-iskema hija flessibbli u ġenerali, iżda aħna ġibdet l-aktar kolonni użati ta' spiss. Innota li dan ma kienx jeħtieġ li tinbidel l-inserit u ETLli jkompli jdaħħal arrays fit-tabella. Għamilna biss ALTER TABELLA, żiedet koppja ta 'kelliema u ksibna skema ibrida u aktar mgħaġġla li tista' tibda tuża mill-ewwel.

Codecs u kompressjoni

Għal serje ta' żmien Huwa importanti kemm tippakkja d-data minħabba li l-ammont ta 'informazzjoni jista' jkun kbir ħafna. IN IkklikkjaHouse Hemm sett ta 'għodod biex jinkiseb effett ta' kompressjoni ta '1:10, 1:20, u xi kultant aktar. Dan ifisser li 1 TB ta 'dejta mhux ippakkjata fuq id-diska tieħu 50-100 GB. Daqs iżgħar huwa tajjeb, id-dejta tista 'tinqara u tiġi pproċessata aktar malajr.

Biex tikseb livell għoli ta 'kompressjoni, IkklikkjaHouse jappoġġja l-codecs li ġejjin:

Nimxu għal ClickHouse: 3 snin wara

Eżempju ta' tabella:

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);

Hawnhekk niddefinixxu l-codec DoubleDelta f'każ wieħed, fit-tieni - Gorilla, u żgur li se nżidu aktar LZ4 kompressjoni. Bħala riżultat, id-daqs tad-dejta fuq id-diska jitnaqqas ħafna:

Nimxu għal ClickHouse: 3 snin wara

Dan juri kemm l-istess dejta tieħu spazju, iżda billi tuża codecs u kompressjonijiet differenti:

  • f'fajl GZIP fuq disk;
  • fi ClickHouse mingħajr codecs, iżda b'kompressjoni ZSTD;
  • fi ClickHouse b'codecs u kompressjoni LZ4 u ZSTD.

Wieħed jista 'jara li tabelli bil-codecs jieħdu ħafna inqas spazju.

Kwistjonijiet tad-daqs

Mhux inqas importanti выбрать tip ta' data korrett:

Nimxu għal ClickHouse: 3 snin wara

Fl-eżempji kollha hawn fuq użajt Float64. Imma jekk għażilna Float32, allura dan ikun saħansitra aħjar. Dan intwera sew mill-guys minn Perkona fl-artiklu marbut hawn fuq. Huwa importanti li tuża l-aktar tip kompatt adattat għall-kompitu: saħansitra inqas għad-daqs tad-diska milli għall-veloċità tal-mistoqsija. IkklikkjaHouse sensittivi ħafna għal dan.

Jekk tista 'tuża int32 minflok int64, imbagħad jistennew żieda kważi doppja fil-prestazzjoni. Id-dejta tieħu inqas memorja, u l-"aritmetika" kollha taħdem ħafna aktar malajr. IkklikkjaHouse internament hija sistema strettament ittajpjata; tagħmel użu massimu mill-possibbiltajiet kollha li jipprovdu s-sistemi moderni.

Aggregazzjoni u Veduti mmaterjalizzati

L-aggregazzjoni u l-fehmiet materjali jippermettulek toħloq aggregati għal okkażjonijiet differenti:

Nimxu għal ClickHouse: 3 snin wara

Pereżempju, jista' jkollok dejta tas-sors mhux aggregata, u tista' tehmeż magħhom diversi fehmiet materjalizzati b'total awtomatiku permezz ta' magna speċjali SummingMergeTree (SMT). SMT hija struttura speċjali tad-dejta aggregata li tikkalkula l-aggregati awtomatikament. Id-dejta mhux ipproċessata tiddaħħal fid-database, hija awtomatikament aggregata, u d-dashboards jistgħu jintużaw immedjatament fuqha.

TTL - "tinsa" data antika

Kif "tinsa" data li m'għadhiex meħtieġa? IkklikkjaHouse jaf kif jagħmel dan. Meta toħloq tabelli, tista 'tispeċifika TTL espressjonijiet: pereżempju, li aħna naħżnu dejta ta' minuta għal ġurnata waħda, dejta ta' kuljum għal 30 jum, u qatt ma nmissu dejta ta' kull ġimgħa jew ta' xahar:

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 */

Multi-saffi - jaqsam id-data fuq diski

Filwaqt li tieħu din l-idea aktar, id-dejta tista 'tinħażen fiha IkklikkjaHouse f’postijiet differenti. Ejja ngħidu li rridu naħżnu dejta sħuna għall-aħħar ġimgħa fuq lokali veloċi ħafna SSD, u npoġġu aktar dejta storika f'post ieħor. IN IkklikkjaHouse dan issa huwa possibbli:

Nimxu għal ClickHouse: 3 snin wara

Tista' tikkonfigura politika ta' ħażna (politika tal-ħażna) Allura IkklikkjaHouse awtomatikament tittrasferixxi d-data malli tilħaq ċerti kundizzjonijiet għal ħażna oħra.

Imma dan mhux kollox. Fil-livell ta 'tabella speċifika, tista' tiddefinixxi regoli għal meta eżattament id-dejta tidħol f'ħażna kiesħa. Per eżempju, id-data hija maħżuna fuq disk veloċi ħafna għal 7 ijiem, u dak kollu li huwa eqdem jiġi trasferit għal waħda bil-mod. Dan huwa tajjeb għax jippermettilek iżżomm is-sistema fil-prestazzjoni massima, filwaqt li tikkontrolla l-ispejjeż u ma taħlix flus fuq data kiesħa:

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

Opportunitajiet uniċi IkklikkjaHouse

Fi kważi kollox IkklikkjaHouse Hemm "punti ewlenin" bħal dawn, iżda huma kkumpensati bl-esklussività - xi ħaġa li mhix f'databases oħra. Per eżempju, hawn huma xi wħud mill-karatteristiċi uniċi IkklikkjaHouse:

  • Arrays. Fil IkklikkjaHouse appoġġ tajjeb ħafna għall-arrays, kif ukoll il-kapaċità li twettaq kalkoli kumplessi fuqhom.
  • Aggregazzjoni ta' Strutturi tad-Data. Din hija waħda mill-"karatteristiċi qattiel" IkklikkjaHouse. Minkejja l-fatt li l-guys minn Yandex jgħidu li ma rridux naggregaw id-dejta, kollox huwa aggregat fi IkklikkjaHouse, għax huwa mgħaġġel u konvenjenti.
  • Fehmiet Materjalizzati. Flimkien ma 'strutturi ta' data aggregati, fehmiet materjalizzat jippermettulek tagħmel konvenjenti fil-ħin reali aggregazzjoni.
  • ClickHouse SQL. Din hija estensjoni tal-lingwa SQL b'xi karatteristiċi addizzjonali u esklussivi li huma disponibbli biss fi IkklikkjaHouse. Preċedentement, kien bħal espansjoni min-naħa waħda, u żvantaġġ min-naħa l-oħra. Issa kważi l-iżvantaġġi kollha meta mqabbla ma ' SQL 92 neħħejna, issa hija biss estensjoni.
  • lambda–espressjonijiet. Għadhom f'xi database?
  • ML-appoġġ. Dan huwa disponibbli f'databases differenti, xi wħud huma aħjar, xi wħud huma agħar.
  • sors miftuħ. Nistgħu nespandu IkklikkjaHouse flimkien. Issa ġewwa IkklikkjaHouse madwar 500 kontributur, u dan in-numru qiegħed dejjem jikber.

Mistoqsijiet delikati

В IkklikkjaHouse hemm ħafna modi differenti biex tagħmel l-istess ħaġa. Pereżempju, tista' tirritorna l-aħħar valur minn tabella fi tliet modi differenti għal CPU (hemm ukoll ir-raba ', iżda huwa saħansitra aktar eżotiku).

L-ewwel wieħed juri kemm huwa konvenjenti li tagħmel in IkklikkjaHouse mistoqsijiet meta trid tiċċekkja dak tupla li jinsabu fis-subquery. Din hija xi ħaġa li jien personalment verament tlift f'databases oħra. Jekk irrid inqabbel xi ħaġa ma 'subquery, allura f'databases oħra jista' jitqabbel biss skalar magħha, iżda għal diversi kolonni għandi bżonn nikteb Jissieħbu. Fil IkklikkjaHouse tista' tuża tuple:

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

It-tieni metodu jagħmel l-istess ħaġa iżda juża funzjoni aggregata argMax:

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

В IkklikkjaHouse hemm diversi għexieren ta 'funzjonijiet aggregati, u jekk tuża combinators, allura skont il-liġijiet tal-kombinatorics ikollok madwar elf minnhom. ArgMax - waħda mill-funzjonijiet li tikkalkula l-valur massimu: it-talba tirritorna l-valur usage_user, li fih jintlaħaq il-valur massimu maħluqa_at:

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

ASOF JOIN — "inkullar" ringieli b'ħinijiet differenti. Din hija karatteristika unika għal databases li hija disponibbli biss fi kdb+. Jekk hemm żewġ serje ta 'żmien bi ħinijiet differenti, ASOF JOIN jippermettilek li tiċċaqlaq u tgħaqqadhom f'talba waħda. Għal kull valur f'serje ta' żmien waħda, jinstab l-eqreb valur fl-oħra, u jintbagħtu lura fuq l-istess linja:

Nimxu għal ClickHouse: 3 snin wara

Funzjonijiet Analitiċi

Fl-istandard SQL-2003 tista' tikteb hekk:

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;

В IkklikkjaHouse Ma tistax tagħmel dan - ma tappoġġjax l-istandard SQL-2003 u probabbilment qatt mhu se tagħmel dan. Minflok, fi IkklikkjaHouse Hija drawwa li tikteb hekk:

Nimxu għal ClickHouse: 3 snin wara

Wiegħed lambdas - hawn huma!

Dan huwa analogu tal-mistoqsija analitika fl-istandard SQL-2003: jgħodd id-differenza bejn it-tnejn timestamp, tul, numru ordinal - dak kollu li normalment inqisu funzjonijiet analitiċi. IN IkklikkjaHouse Aħna ngħodduhom permezz ta 'arrays: l-ewwel nikkollassaw id-dejta f'firxa, wara nagħmlu dak kollu li rridu fuq l-array, u mbagħad nespanduha lura. Mhuwiex konvenjenti ħafna, jeħtieġ imħabba għall-ipprogrammar funzjonali għall-inqas, iżda huwa flessibbli ħafna.

Karatteristiċi Speċjali

Barra minn hekk, fi IkklikkjaHouse ħafna funzjonijiet speċjalizzati. Pereżempju, kif tiddetermina kemm qed isiru sessjonijiet fl-istess ħin? Kompitu ta 'monitoraġġ tipiku huwa li tiddetermina t-tagħbija massima b'talba waħda. IN IkklikkjaHouse Hemm funzjoni speċjali għal dan il-għan:

Nimxu għal ClickHouse: 3 snin wara

B'mod ġenerali, ClickHouse għandha funzjonijiet speċjali għal ħafna skopijiet:

  • runningDifferenza, runningAccumulate, ġar;
  • sumMap(ċavetta, valur);
  • timeSeriesGroupSum(uid, timestamp, valur);
  • timeSeriesGroupRateSum(uid, timestamp, valur);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • B'IMLI / BL-INBATI;
  • sempliċiLinearRegression, stochasticLinearRegression.

Din mhix lista kompluta ta 'funzjonijiet, hemm 500-600 b'kollox. Ħjiel: il-funzjonijiet kollha fi IkklikkjaHouse jinsab fit-tabella tas-sistema (mhux kollha huma dokumentati, iżda kollha huma interessanti):

select * from system.functions order by name

IkklikkjaHouse taħżen ħafna informazzjoni dwarha nfisha, inkluż tabelli tal-log, query_log, traċċa log, log ta 'operazzjonijiet bi blokki tad-data (part_log), log tal-metriċi, u log tas-sistema, li normalment jikteb fuq disk. Log metriċi huwa serje ta' żmien в IkklikkjaHouse fil-fatt IkklikkjaHouse: Id-database nnifisha jista' jkollha rwol serje ta' żmien databases, u b'hekk "jidħol" lilu nnifsu.

Nimxu għal ClickHouse: 3 snin wara

Din hija wkoll ħaġa unika - peress li nagħmlu xogħol tajjeb għalih serje ta' żmien, għaliex ma nistgħux naħżnu dak kollu li għandna bżonn fina nfusna? M'għandniex bżonn Prometheus, inżommu kollox għalina. Konnessi grafana u nissorveljaw lilna nfusna. Madankollu, jekk IkklikkjaHouse waqgħat, mhux se naraw għaliex, għalhekk normalment ma jagħmlux dan.

Raggruppament kbir jew ħafna żgħar IkklikkjaHouse

X'inhu aħjar - cluster wieħed kbir jew ħafna ClickHouses żgħar? Approċċ tradizzjonali għal DWH huwa raggruppament kbir li fih iċ-ċirkwiti huma allokati għal kull applikazzjoni. Wasalna għand l-amministratur tad-database - agħtina dijagramma, u tawna waħda:

Nimxu għal ClickHouse: 3 snin wara

В IkklikkjaHouse tista 'tagħmel dan differenti. Tista' tagħmel kull applikazzjoni tiegħek IkklikkjaHouse:

Nimxu għal ClickHouse: 3 snin wara

M'għandniex bżonn il-kbir mostruż aktar DWH u amministraturi intrattabbli. Nistgħu nagħtu kull applikazzjoni tagħha IkklikkjaHouse, u l-iżviluppatur jista 'jagħmel huwa stess, peress IkklikkjaHouse faċli ħafna biex tinstalla u ma teħtieġx amministrazzjoni kumplessa:

Nimxu għal ClickHouse: 3 snin wara

Imma jekk ikollna ħafna IkklikkjaHouse, u għandek bżonn tinstallah spiss, allura trid awtomat dan il-proċess. Għal dan nistgħu, pereżempju, nużaw Kubernetes и clickhouse-operatur. IN Kubernetes ClickHouse tista 'tpoġġiha "on-click": nista' nikklikkja buttuna, inħaddem il-manifest u d-database hija lesta. Nista' immedjatament noħloq dijagramma, nibda ntella' l-metriċi hemmhekk, u f'5 minuti għandi dashboard lest grafana. Huwa daqshekk sempliċi!

Ir-riżultat?

Allura, IkklikkjaHouse - Dan:

  • Mgħaġġel. Kulħadd jaf dan.
  • Sempliċement. Ftit kontroversjali, imma nemmen li huwa diffiċli fit-taħriġ, faċli fil-ġlieda. Jekk tifhem kif IkklikkjaHouse jaħdem, allura kollox huwa sempliċi ħafna.
  • Universalment. Huwa adattat għal xenarji differenti: DWH, Serje ta' Ħin, Ħażna ta' Log. Imma mhux OLTP database, għalhekk tippruvax tagħmel inserzjonijiet qosra u jaqra hemmhekk.
  • Interessanti. Probabbilment dak li jaħdem miegħu IkklikkjaHouse, esperjenzaw ħafna mumenti interessanti fis-sens tajjeb u ħażin. Per eżempju, ħareġ ħarġa ġdida, kollox waqaf jaħdem. Jew meta tħabtu ma 'biċċa xogħol għal jumejn, iżda wara li staqsejt mistoqsija fil-chat ta' Telegram, il-kompitu ġie solvut f'żewġ minuti. Jew bħal fil-konferenza fir-rapport ta 'Lesha Milovidov, screenshot minn IkklikkjaHouse kissru x-xandira HighLoad ++. Din it-tip ta’ ħaġa tiġri l-ħin kollu u tagħmilna ħajjitna diffiċli. IkklikkjaHouse qawwi u interessanti!

Tista' tara l-preżentazzjoni hawn.

Nimxu għal ClickHouse: 3 snin wara

Il-laqgħa tant mistennija ta 'żviluppaturi ta' sistemi ta 'tagħbija għolja fuq HighLoad ++ se ssir fid-9 u l-10 ta’ Novembru fi Skolkovo. Fl-aħħarnett, din se tkun konferenza offline (għalkemm bil-prekawzjonijiet kollha fis-seħħ), peress li l-enerġija ta 'HighLoad++ ma tistax tiġi ppakkjata onlajn.

Għall-konferenza, insibu u nuruk każijiet dwar il-kapaċitajiet massimi tat-teknoloġija: HighLoad++ kien, huwa u se jkun l-uniku post fejn tista 'titgħallem f'jumejn kif jaħdmu Facebook, Yandex, VKontakte, Google u Amazon.

Wara li għamilna l-laqgħat tagħna mingħajr interruzzjoni mill-2007, din is-sena se niltaqgħu għall-14-il darba. Matul dan iż-żmien, il-konferenza kibret 10 darbiet; is-sena li għaddiet, l-avveniment ewlieni tal-industrija ġabar flimkien 3339 parteċipant, 165 kelliem, rapporti u laqgħat, u 16-il binarju kienu għaddejjin simultanjament.
Is-sena li għaddiet kien hemm 20 karozza tal-linja, 5280 litru tè u kafè, 1650 litru xorb tal-frott u 10200 flixkun ilma. U 2640 kilogramma oħra ikel, 16 platt u 000 tazza. Mill-mod, bil-flus miġbura minn karta riċiklata, ħawwelna 25 nebbieta tal-ballut :)

Tista' tixtri l-biljetti hawn, tikseb aħbarijiet dwar il-konferenza - hawn, u tkellem fuq in-netwerks soċjali kollha: Telegramma, facebook, VKontakte и twitter.

Sors: www.habr.com

Żid kumment