Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Tulo ka tuig ang milabay Viktor Tarnavsky ug Alexey Milovidov gikan sa Yandex sa entablado Taas nga Load++ giingnan, nga ClickHouse maayo, ug sa unsang paagi kini dili mohinay. Ug sa sunod nga yugto mao ang Alexander Zaitsev с report mahitungod sa pagbalhin ngadto sa clickhouse gikan sa laing analytical DBMS ug uban sa konklusyon nga clickhouse, siyempre, maayo, apan dili kaayo kombenyente. Sa diha nga sa 2016 ang kompanya LifeStreet, diin nagtrabaho kaniadto si Alexander, naghubad sa multi-petabyte analytical system ngadto sa clickhouse, kini usa ka makaiikag nga "yellow brick nga dalan", puno sa wala mailhi nga mga kapeligrohan - clickhouse unya murag minahan.

Paglabay sa tulo ka tuig clickhouse nahimong mas maayo - niining panahona gitukod ni Alexander ang kompanya nga Altinity, nga dili lamang makatabang sa pagbalhin clickhouse dosena nga mga proyekto, apan gipauswag usab ang produkto mismo kauban ang mga kauban gikan sa Yandex. Karon clickhouse dili gihapon usa ka walay kabalaka nga paglakaw, apan dili na usa ka mina.

Si Alexander nalambigit sa gipang-apod-apod nga mga sistema sukad sa 2003, pagpalambo sa dagkong mga proyekto sa MySQL, Oracle и Vertica. Sa kataposan HighLoad++ 2019 Alexander, usa sa mga pioneer sa paggamit clickhouse, nagsulti kung unsa kini nga DBMS karon. Makakat-on kita mahitungod sa mga nag-unang bahin clickhouse: sa unsa nga paagi kini lahi gikan sa ubang mga sistema ug sa unsa nga mga kaso kini mao ang mas epektibo sa paggamit niini. Gamit ang mga pananglitan, atong tagdon ang mga bag-o ug napamatud-an sa proyekto nga mga gawi alang sa mga sistema sa pagtukod nga gibase sa clickhouse.


Retrospective: unsay nahitabo 3 years ago

Tulo ka tuig ang milabay gibalhin namo ang kompanya LifeStreet sa clickhouse gikan sa laing database sa analytics, ug ang ad network analytics migration ingon niini:

  • Hunyo 2016. Sa Bukas nga Tinubdan mitungha clickhouse ug nagsugod sa among proyekto;
  • Agosto. Pamatuod Sa Konsepto: dako nga ad network, imprastraktura ug 200-300 terabytes nga datos;
  • Oktubre. Unang datos sa produksiyon;
  • Disyembre. Tibuok nga load sa produkto - 10-50 bilyon nga mga panghitabo kada adlaw.
  • Hunyo 2017. Malampuson nga paglalin sa mga tiggamit sa clickhouse, 2,5 petabytes sa datos sa usa ka pungpong sa 60 ka mga server.

Sa pag-uswag sa paglalin, ang pagsabut mitubo niana clickhouse usa ka maayo nga sistema nga makapahimuot sa pagtrabaho, apan kini usa ka internal nga proyekto sa Yandex. Busa, adunay mga nuances: Yandex una sa pag-atubang sa iyang kaugalingon nga internal nga mga kustomer ug lamang unya sa komunidad ug sa mga panginahanglan sa mga eksternal nga tiggamit, samtang ang ClickHouse wala makaabot sa lebel sa negosyo sa daghang mga lugar nga magamit kaniadto. Mao nga kaniadtong Marso 2017, among gitukod ang Altinity aron mahimo clickhouse mas paspas ug mas sayon ​​dili lamang alang sa Yandex, kondili alang usab sa ubang mga tiggamit. Ug karon kami:

  • Nagbansay kami ug nagtabang sa paghimo og mga solusyon base sa clickhouse aron ang mga kustomer dili mapuno sa mga bumps, ug aron ang solusyon sa katapusan molihok;
  • Naghatag kami og 24/7 nga suporta clickhouse- mga instalasyon;
  • Nagpalambo kami sa among kaugalingon nga mga proyekto sa ekosistema;
  • Aktibo nga mopasalig sa akong kaugalingon clickhouse, pagtubag sa mga hangyo gikan sa mga tiggamit nga gusto makakita sa pipila ka mga bahin.

Ug siyempre, nagtabang kami sa paglihok sa clickhouse с MySQL, Vertica, pulong sa Dios, Greenplum, Redshift ug uban pang mga sistema. Naapil mi sa lain-laing mga relokasyon ug silang tanan nagmalampuson.

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Nganong mubalhin man sa clickhouse

Dili mohinay! Kini ang panguna nga hinungdan. clickhouse - paspas kaayo nga database alang sa lainlaing mga senaryo:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Random nga mga kinutlo gikan sa mga tawo nga nagtrabaho kauban clickhouse.

Scalability. Sa ubang mga database, mahimo nimong makab-ot ang maayong pasundayag sa usa ka piraso sa hardware, apan clickhouse mahimo nimong sukdon dili lamang sa bertikal, apan usab sa pahalang pinaagi sa pagdugang sa mga server. Ang tanan dili molihok nga hapsay sama sa among gusto, apan kini molihok. Mahimo nimong pauswagon ang sistema samtang molambo ang imong negosyo. Importante nga dili kita limitado sa desisyon karon ug kanunay adunay potensyal alang sa kalamboan.

Pagkamadaladala. Walay attachment sa usa ka butang. Pananglitan, uban sa Amazon RedShift lisod mubalhin ug lugar. A clickhouse mahimo nimo kini ibutang sa imong laptop, server, i-deploy kini sa panganod, adto sa Kubernetes - walay mga pagdili sa operasyon sa imprastraktura. Kini sayon ​​​​alang sa tanan, ug kini usa ka dako nga bentaha nga dili ikapasigarbo sa daghang uban pang susama nga mga database.

Flexibility. clickhouse wala mohunong sa usa ka butang, pananglitan, Yandex.Metrica, apan gipalambo ug gigamit sa nagkadaghang lain-laing mga proyekto ug industriya. Mahimo kini nga mapalapdan pinaagi sa pagdugang sa mga bag-ong bahin aron masulbad ang mga bag-ong problema. Pananglitan, gituohan nga ang pagtipig sa mga troso sa usa ka database dili maayo nga pamatasan, mao nga tungod niini sila adunay Elasticsearch. Apan salamat sa pagka-flexible clickhouse, mahimo usab nimong tipigan ang mga log niini, ug kasagaran mas maayo pa kini kaysa sa Elasticsearch - sa clickhouse nagkinahanglan kini og 10 ka pilo nga mas ubos nga puthaw.

Libre Open Source. Dili nimo kinahanglan nga bayran ang bisan unsang butang. Dili kinahanglan nga makigsabot sa pagtugot nga ibutang ang sistema sa imong laptop o server. Walay tinago nga bayranan. Sa samang higayon, walay laing Open Source database nga teknolohiya ang makakompetensya sa katulin clickhouse. MySQL, MariaDB, Greenplum - silang tanan mas hinay.

Komunidad, drive ug makalingaw. Sa clickhouse dako nga komunidad: meetups, chats ug Alexey Milovidov, nga nagsugo kanatong tanan sa iyang kusog ug pagkamalaumon.

Pagbalhin sa ClickHouse

Sa pagbalhin sa clickhouse sa usa ka butang, tulo lang ka butang ang imong gikinahanglan:

  • Sabta ang mga limitasyon clickhouse ug unsa kini dili angay.
  • Gamita ang mga benepisyo teknolohiya ug ang pinakadako nga kalig-on niini.
  • Eksperimento. Bisan nahibal-an kung giunsa kini molihok clickhouse, dili kanunay posible nga matagna kung kanus-a kini mas paspas, kanus-a kini hinay, kanus-a kini mahimong mas maayo, ug kanus-a kini mograbe. Busa sulayi.

Ang problema sa paglihok

Adunay usa lamang ka "apan": kung mobalhin ka sa clickhouse uban sa laing butang, kasagaran adunay dili maayo. Naanad kami sa pipila ka mga praktis ug mga butang nga nagtrabaho sa among paborito nga database. Pananglitan, bisan kinsa nga nagtrabaho kauban SQL-database, gikonsiderar ang mosunod nga hugpong sa mga gimbuhaton nga mandatory:

  • mga transaksyon;
  • mga pagpugong;
  • pagkamakanunayon;
  • mga indeks;
  • I-UPDATE/DELETE;
  • NULLs;
  • millisecond;
  • awtomatikong mga pagkakabig sa tipo;
  • daghang pag-apil;
  • arbitraryong mga partisyon;
  • mga himan sa pagdumala sa cluster.

Ang pagrekrut kay mandatory, pero tulo ka tuig na ang milabay sa clickhouse walay bisan usa niini nga mga bahin! Karon wala’y katunga sa wala pa matuman nga nahabilin: mga transaksyon, mga pagpugong, Pagkakonsistent, millisecond ug tipo nga paghulma.

Ug ang nag-unang butang mao nga sa clickhouse pipila ka sumbanan nga mga gawi ug mga pamaagi dili molihok o dili molihok sa paagi nga atong naandan. Ang tanan nga makita sa clickhouse, katumbas sa "click balay paagi”, i.e. Ang mga gimbuhaton lahi sa ubang mga DB. Pananglitan:

  • Ang mga indeks wala gipili, apan gilaktawan.
  • I-UPDATE/DELETE dili synchronous, apan asynchronous.
  • Adunay daghang mga pag-apil, apan walay tigplano sa pangutana. Kung giunsa sila gipatuman sa kasagaran dili kaayo klaro sa mga tawo gikan sa kalibutan sa database.

Mga Sitwasyon sa ClickHouse

Sa 1960, usa ka Amerikanong mathematician nga Hungarian ang gigikanan WignerEP misulat ug artikuloAng dili makatarunganon nga pagkaepektibo sa matematika sa natural nga siyensya"("Ang dili masabtan nga pagkaepektibo sa matematika sa natural nga mga siyensya") nga ang kalibutan sa atong palibot tungod sa usa ka hinungdan nga maayo nga gihulagway sa mga balaod sa matematika. Ang matematika usa ka abstract nga siyensya, ug ang mga pisikal nga balaod nga gipahayag sa porma sa matematika dili hinungdanon, ug WignerEP gipasiugda nga kini talagsaon kaayo.

Gikan sa akong panglantaw, clickhouse - parehas nga katingad-an. Aron mabag-o ang Wigner, mahimo naton kini isulti: katingalahan ang dili mahunahuna nga kahusayan clickhouse sa usa ka halapad nga lainlain nga mga aplikasyon sa analitikal!

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Pananglitan, atong kuhaon Tinuod nga Oras nga Data Warehouse, diin ang datos gikarga halos kanunay. Gusto namon nga makadawat mga hangyo gikan kaniya sa usa ka ikaduha nga paglangan. Palihug gamita clickhousetungod kay kini gidisenyo alang niini nga senaryo. clickhouse kini mao ang paagi nga kini gigamit dili lamang sa web, apan usab sa marketing ug pinansyal nga analytics, AdTech, ingon man sa Deteksyon sa pagpanglimbongn. SA Real-time nga Data Warehouse usa ka komplikado nga structured schema sama sa "star" o "snowflake" ang gigamit, daghang mga lamesa nga adunay DAGHAN (usahay daghan), ug ang datos kasagarang gitipigan ug giusab sa pipila ka mga sistema.

Atong kuhaon ang laing senaryo - Serye sa Oras: mga himan sa pag-monitor, network, estadistika sa paggamit, internet sa mga butang. Dinhi atong nahimamat ang medyo yano nga mga panghitabo nga gi-order sa oras. clickhouse wala orihinal nga naugmad alang niini, apan nagpakita sa iyang kaugalingon nga maayo, mao nga gigamit sa mga dagkong kompanya clickhouse isip usa ka tipiganan alang sa pagmonitor sa impormasyon. Aron tan-awon kung kini mohaum clickhouse para sa time-series, naghimo mi ug benchmark base sa approach ug resulta InfluxDB и TimescaleDB - espesyalista serye sa panahon mga database. Nahimo kini, kana clickhouse, bisan kung wala’y pag-optimize alang sa ingon nga mga buluhaton, nakadaog usab sa usa ka langyaw nga natad:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

В serye sa panahon kasagaran usa ka pig-ot nga lamesa ang gigamit - daghang gagmay nga mga kolum. Daghang mga datos ang mahimong gikan sa pag-monitor - milyon nga mga rekord matag segundo - ug kasagaran kini moabut sa gagmay nga mga pagsal-ot (Tinuod nga panahon streaming). Busa, nanginahanglan kami usa ka lahi nga insert script, ug ang mga pangutana mismo - nga adunay ilang kaugalingon nga mga detalye.

Pagdumala sa Log. Ang pagkolekta sa mga troso sa database kasagaran dili maayo, apan sa clickhouse kini mahimo sa pipila ka mga komento sama sa gihulagway sa ibabaw. Daghang mga kompanya ang naggamit clickhouse para lang niini. Sa kini nga kaso, gigamit ang usa ka patag nga lapad nga lamesa, diin among gitipigan ang tibuuk nga mga troso (pananglitan, sa porma JSON), o putlon ngadto sa mga piraso. Ang datos kasagarang gikarga sa dagkong mga batch (mga file), ug nangita kami og pipila ka field.

Alang sa matag usa niini nga mga gimbuhaton, ang mga espesyal nga database kasagarang gigamit. clickhouse ang usa makahimo sa tanan ug maayo kaayo nga kini makaapas kanila sa pasundayag. Atong tan-awon pag-ayo serye sa panahon script, ug unsaon "pagluto" clickhouse ubos niini nga senaryo.

Serye sa Oras

Kini sa pagkakaron mao ang nag-unang senaryo diin clickhouse giisip nga standard nga solusyon. Serye sa oras usa ka hugpong sa mga panghitabo nga nahan-ay sa panahon nga nagrepresentar sa mga pagbag-o sa pipila ka proseso sa paglabay sa panahon. Pananglitan, mahimo kini nga rate sa kasingkasing kada adlaw o ang gidaghanon sa mga proseso sa sistema. Ang tanan nga naghatag sa oras ticks uban sa pipila ka mga dimensyon mao serye sa panahon:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Kadaghanan niini nga mga panghitabo gikan sa pagmonitor. Mahimo kini dili lamang sa pag-monitor sa web, apan usab sa tinuud nga mga aparato: mga awto, sistema sa industriya, IoT, industriya o unmanned taxi, sa punoan nga gibutangan na sa Yandex clickhouse-server.

Pananglitan, adunay mga kompanya nga nagkolekta sa datos gikan sa mga barko. Matag pipila ka segundo, ang mga sensor gikan sa usa ka container ship magpadala ug gatosan ka lain-laing mga sukod. Gitun-an kini sa mga inhenyero, nagtukod og mga modelo ug naningkamot nga masabtan kung unsa ka episyente ang paggamit sa barko, tungod kay ang usa ka sudlanan nga barko dili kinahanglan nga mag-undang sa usa ka segundo. Ang bisan unsang downtime usa ka pag-usik sa salapi, busa hinungdanon nga matagna ang ruta aron gamay ra ang pagparking.

Karon adunay usa ka pagtubo sa espesyal nga mga database nga nagsukod serye sa panahon. Sa site Mga DB-Engine lainlain nga mga database ang giranggo, ug kini mahimong tan-awon pinaagi sa tipo:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Ang labing paspas nga pagtubo nga tipo serye sa panahons. Ang mga database sa graph nagkadako usab, apan serye sa panahons mas paspas nga mitubo sa miaging pipila ka tuig. Ang kasagaran nga mga representante niini nga pamilya sa mga database mao ang InfluxDB, Prometheus, KDB, TimescaleDB (gitukod sa PostgreSQL), mga solusyon gikan sa Amazon. clickhouse dinhi usab magamit, ug kini gigamit. Tugoti ako sa paghatag kanimo og pipila ka publiko nga mga pananglitan.

Usa sa mga pioneer mao ang kompanya CloudFlare (CDNprovider). Gimonitor nila ang ilang CDN pinaagi sa clickhouse (DNS- mga hangyo, http-hangyo) nga adunay daghang karga - 6 milyon nga mga panghitabo matag segundo. Ang tanan moagi Kafka, moadto sa clickhouse, nga naghatag sa abilidad sa pagtan-aw sa real-time nga mga dashboard sa mga panghitabo sa sistema.

Comcast - usa sa mga nanguna sa telekomunikasyon sa Estados Unidos: Internet, digital television, telephony. Naghimo sila og susama nga sistema sa pagkontrol CDN sulud sa gambalay Open Source proyekto Pagkontrol sa Trapiko sa Apache sa pagtrabaho uban sa ilang dako nga data. clickhouse gigamit isip backend sa analytics.

percona gitukod sa clickhouse sulod sa imong PMMsa pagpadayon sa pagmonitor sa lain-laing MySQL.

Piho nga mga Kinahanglanon

Ang mga database sa serye sa oras adunay kaugalingon nga piho nga mga kinahanglanon.

  • Paspas nga pagsal-ot gikan sa daghang mga ahente. Kinahanglan namon nga isulud ang mga datos gikan sa daghang mga sapa nga dali kaayo. clickhouse maayo kini, tungod kay kini adunay tanan nga mga non-blocking insert. Bisan unsa ipilit usa ka bag-ong file sa disk, ug ang gagmay nga mga pagsal-ot mahimong i-buffer sa usa ka paagi o sa lain. SA clickhouse mas maayo nga magsal-ot og data sa dagkong mga batch, kaysa usa ka linya matag higayon.
  • Flexible nga Circuit. ang serye sa panahon kasagaran wala kita mahibalo sa istruktura sa data sa hingpit. Posible nga maghimo usa ka sistema sa pag-monitor alang sa usa ka piho nga aplikasyon, apan lisud nga gamiton kini alang sa lain nga aplikasyon. Nagkinahanglan kini og mas flexible nga laraw. clickhouse, nagtugot kanimo sa pagbuhat niini, bisan kung kini usa ka kusgan nga gi-type nga base.
  • Episyente nga pagtipig ug "pagkalimot" sa datos. Kasagaran sa serye sa panahon usa ka dako nga kantidad sa data, mao nga sila kinahanglan nga tipigan ingon ka episyente kutob sa mahimo. Pananglitan, sa InfluxDB maayo nga kompresiyon mao ang nag-unang bahin niini. Apan dugang sa pagtipig, kinahanglan usab nimo nga "makalimtan" ang daan nga datos ug buhaton ang pipila downsampling - awtomatik nga pag-ihap sa mga aggregate.
  • Dali nga mga pangutana bahin sa giipon nga datos. Usahay makapaikag nga tan-awon ang katapusan nga 5 minuto nga adunay katukma sa mga millisecond, apan sa binulan nga datos, minuto o segundo nga granularity mahimong dili kinahanglan - igo na ang mga kinatibuk-ang istatistika. Ang suporta sa kini nga matang gikinahanglan, kung dili ang usa ka hangyo alang sa 3 ka bulan ipatuman sa dugay nga panahon bisan sa clickhouse.
  • Mga hangyo sama sa "katapusan nga punto, sa». Kini mga tipikal alang sa serye sa panahon mga hangyo: tan-awa ang kataposang sukod o ang kahimtang sa sistema sa usa ka punto sa panahon t. Alang sa database, kini dili kaayo makapahimuot nga mga pangutana, apan kinahanglan usab nila nga ipatuman.
  • "pagpilit" nga serye sa panahon. Serye sa oras usa ka serye sa panahon. Kung adunay duha ka serye sa panahon, nan sila kanunay kinahanglan nga konektado ug magkadugtong. Dili kombenyente nga buhaton kini sa tanan nga mga database, labi na sa wala magkauyon nga serye sa oras: aniay pipila ka mga marka sa oras, adunay uban pa. Mahimo nimong tagdon ang kasagaran, apan sa kalit adunay usa ka lungag, mao nga dili kini klaro.

Atong tan-awon kung giunsa kini nga mga kinahanglanon natuman clickhouse.

Ang laraw

В clickhouse laraw alang sa serye sa panahon mahimo sa lain-laing mga paagi, depende sa ang-ang sa data regularity. Posible nga maghimo usa ka sistema sa regular nga datos kung nahibal-an naton nga daan ang tanan nga mga sukatan. Pananglitan, gibuhat CloudFlare uban sa pagmonitor CDN mao ang usa ka maayo-optimized nga sistema. Mahimo kang magtukod og mas kinatibuk-ang sistema nga nagmonitor sa tibuok imprastraktura, lain-laing mga serbisyo. Sa kaso sa dili regular nga datos, wala kami mahibal-an daan kung unsa ang among gibantayan - ug kini tingali ang labing kasagaran nga kaso.

regular nga datos. Mga kolum. Ang laraw yano ra - mga kolum nga adunay kinahanglan nga mga tipo:

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

Kini usa ka regular nga lamesa nga nagmonitor sa usa ka matang sa kalihokan sa boot sa sistema (user, nga sistema, walay pulos nga, nindot). Yano ug sayon, apan dili flexible. Kung gusto namon ang usa ka labi ka flexible nga laraw, mahimo namong gamiton ang mga arrays.

Dili regular nga datos. Mga laray:

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

gambalay Salag duha ka arrays: metrics.ngalan и metrics.value. Dinhi mahimo nimong tipigan ang ingon nga arbitraryong datos sa pag-monitor ingon usa ka han-ay sa mga ngalan ug usa ka han-ay sa mga pagsukod alang sa matag panghitabo. Alang sa dugang nga pag-optimize, daghang mga istruktura ang mahimo imbis sa usa. Pananglitan, usa alang sa naglutaw-bili, lain - alang sa int- nagpasabot, tungod kay int Gusto kong magtipig nga mas episyente.

Apan ang ingon nga istruktura mas lisud nga ma-access. Kinahanglan ka nga mogamit usa ka espesyal nga konstruksyon, gamit ang mga espesyal nga function aron makuha ang mga kantidad una sa indeks, ug dayon sa laray:

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

Apan kini sa gihapon molihok nga paspas. Ang laing paagi sa pagtipig sa dili regular nga datos mao ang pinaagi sa mga laray.

Dili regular nga datos. Mga kuwerdas. Niining tradisyonal nga paagi, nga walay mga arrays, mga ngalan ug mga kantidad gitipigan sa usa ka higayon. Kung ang 5 nga mga sukod gikan sa usa ka aparato sa usa ka higayon, 000 nga mga laray ang nahimo sa 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', ...)

clickhouse nakasagubang niini - kini adunay espesyal nga mga extension clickhouse SQL. Pananglitan maxKon - usa ka espesyal nga function nga nagkalkula sa maximum pinaagi sa metric kung ang usa ka kondisyon natuman. Mahimo nimong isulat ang daghang ingon nga mga ekspresyon sa usa ka pangutana ug kalkulado dayon ang kantidad alang sa daghang mga sukatan.

Atong itandi ang tulo ka mga paagi:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Детали

Dinhi akong gidugang ang "Data Size sa Disk" alang sa pipila ka mga dataset sa pagsulay. Sa kaso sa mga kolum, kami adunay pinakagamay nga gidak-on sa datos: labing taas nga kompresiyon, labing taas nga katulin sa pangutana, apan nagbayad kami pinaagi sa pag-ayo sa tanan sa usa ka higayon.

Sa kaso sa mga arrays, ang mga butang mas grabe. Ang datos nag-compress gihapon og maayo ug posible nga magtipig og dili regular nga sumbanan. Apan clickhouse - usa ka database sa kolum, ug kung magsugod kami sa pagtipig sa tanan sa usa ka laray, kini nahimo nga usa ka database sa string, ug nagbayad kami alang sa pagka-flexible nga adunay kahusayan. Alang sa bisan unsang operasyon, kinahanglan nimo nga basahon ang tibuuk nga laray sa panumduman, dayon pangitaa ang gusto nga elemento niini - ug kung ang laray motubo, nan ang katulin maminusan.

Sa usa sa mga kompanya nga naggamit niini nga pamaagi (pananglitan, über), ang mga array giputol sa mga piraso sa 128 ka elemento. Ang datos sa pipila ka libo nga mga sukatan nga adunay gidaghanon nga 200 TB nga datos / adlaw wala gitipigan sa usa ka array, apan sa 10 o 30 nga mga arrays nga adunay espesyal nga storage logic.

Ang pinakasimple nga paagi mao ang mga kuwerdas. Apan ang datos dili maayo nga gi-compress, ang gidak-on sa lamesa dako, ug bisan kung ang mga pangutana gibase sa daghang mga sukatan, ang ClickHouse dili molihok nga maayo.

hybrid nga laraw

Ibutang nato nga nagpili kita og array schema. Apan kung nahibal-an namon nga kadaghanan sa among mga dashboard nagpakita lamang sa mga sukatan sa tiggamit ug sistema, mahimo usab namon nga ma-materialize kini nga mga sukatan sa mga kolum gikan sa usa ka array sa lebel sa lamesa niining paagiha:

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

Sa dihang gipapilit clickhouse awtomatik nga maihap sila. Niining paagiha mahimo nimong ikombinar ang negosyo uban ang kalipayan: ang laraw kay flexible ug kinatibuk-an, apan gibira namo ang labing kasagarang gigamit nga mga kolum. Namatikdan nako nga wala kini kinahanglan nga usbon ang insert ug ETL, nga nagpadayon sa pagsal-ot sa mga arrays sa lamesa. Nabuhat ra namo BAG-ONG TALAAN, midugang usa ka magtiayon nga mga mamumulong ug nakakuha usa ka hybrid ug mas paspas nga laraw nga mahimo nimong sugdan gamit dayon.

Mga codec ug compression

Sa serye sa panahon importante kung unsa ka maayo ang imong pagputos sa datos, tungod kay ang han-ay sa impormasyon mahimong dako kaayo. SA clickhouse adunay usa ka hugpong sa mga himan aron makab-ot ang epekto sa compression 1:10, 1:20, ug usahay labaw pa. Kini nagpasabot nga ang 1 TB sa wala ma-compress nga data sa disk nagkinahanglan og 50-100 GB. Ang gamay nga gidak-on maayo, ang datos mahimong mabasa ug maproseso nga mas paspas.

Aron makab-ot ang taas nga lebel sa compression, clickhouse nagsuporta sa mosunod nga mga codec:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Pananglitan sa lamesa:

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

Dinhi atong gihubit ang codec DoubleDelta sa usa ka kaso, sa ikaduha Gorilya, ug siguroha nga makadugang pa LZ4 kompresiyon. Ingon usa ka sangputanan, ang gidak-on sa data sa disk nakunhuran pag-ayo:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Gipakita niini kung pila ka espasyo ang magamit sa parehas nga datos, apan gamit ang lainlaing mga codec ug compression:

  • sa usa ka GZIP file sa disk;
  • sa ClickHouse nga walay mga codec, apan adunay ZSTD compression;
  • sa ClickHouse nga adunay LZ4 ug ZSTD codec ug compression.

Makit-an nga ang mga lamesa nga adunay mga codec adunay gamay nga espasyo.

Mga butang nga gidak-on

Dili kaayo importante pagpili tama nga tipo sa datos:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Sa tanan nga mga pananglitan sa ibabaw nga akong gigamit Lutaw64. Pero kung atong pilion Lutaw32unya mas maayo pa kana. Maayo kini nga gipakita sa mga lalaki gikan sa Perkona sa artikulo sa link sa ibabaw. Importante nga gamiton ang pinaka-compact type nga mohaum sa buluhaton: mas gamay pa sa gidak-on sa disk kay sa speed sa pangutana. clickhouse sensitibo kaayo niini.

Kung magamit nimo int32 imbis nga int64, unya magdahum nga hapit duha ka pilo nga pagtaas sa pasundayag. Ang datos nagkinahanglan og gamay nga memorya, ug ang tanan nga "aritmetika" molihok nga mas paspas. clickhouse sa sulod niini usa ka estrikto nga gi-type nga sistema, kini naghimo sa kadaghanan sa tanan nga mga posibilidad nga gihatag sa modernong mga sistema.

Paghugpong ug Mga Materyal nga Pagtan-aw

Ang aggregation ug materialized view nagtugot kanimo sa paghimo og mga aggregate para sa lain-laing mga okasyon:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Pananglitan, mahimo kang adunay dili-agregate nga tinubdan nga datos, ug mahimo nimong ibitay ang lain-laing materyal nga mga panglantaw niini nga adunay awtomatik nga pagsuma pinaagi sa usa ka espesyal nga makina. SummingMergeTree (SMT). SMT mao ang usa ka espesyal nga aggregating data structure nga nag-ihap sa mga aggregates awtomatik. Ang hilaw nga datos gisulod sa database, kini awtomatik nga giipon, ug ang mga dashboard mahimong magamit dayon.

TTL - "kalimti" ang daan nga datos

Giunsa ang "pagkalimot" sa datos nga wala na kinahanglana? clickhouse nahibalo unsaon pagbuhat niini. Sa paghimo sa mga lamesa, mahimo nimong ipiho TTL mga ekspresyon: pananglitan, nga kami nagtipig sa minuto nga datos alang sa usa ka adlaw, adlaw-adlaw nga datos sa 30 ka adlaw, ug dili gyud mohikap sa sinemana o binulan nga datos:

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 nga lebel - pagbahin sa datos sa mga disk

Ang pagpalambo niini nga ideya, ang datos mahimong tipigan sa clickhouse sa lain-laing mga dapit. Ibutang ta nga gusto namon nga magtipig init nga datos alang sa miaging semana sa usa ka paspas kaayo nga lokal SSD, ug gidugang namo ang daghang makasaysayanong datos sa laing dapit. SA clickhouse karon posible na:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Mahimo nimong i-configure ang polisiya sa pagpabilin (polisiya sa pagtipig) Busa clickhouse awtomatik nga ibalhin ang datos sa lain nga pagtipig kung matuman ang pipila nga mga kondisyon.

Apan dili lang kana. Sa lebel sa usa ka partikular nga lamesa, mahimo nimong ipasabut ang mga lagda alang sa eksakto kung ang data gibalhin sa bugnaw nga pagtipig. Pananglitan, ang 7 ka adlaw nga datos nahimutang sa usa ka paspas kaayo nga disk, ug ang tanan nga mas tigulang gibalhin sa usa ka hinay. Maayo kini tungod kay gitugotan niini ang sistema nga magpadayon sa labing taas nga pasundayag, samtang nagkontrol sa mga gasto ug dili mogasto sa bugnaw nga datos:

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

Talagsaon nga mga Feature clickhouse

Hapit tanan sa clickhouse adunay ingon nga mga "highlight", apan kini gi-level sa eksklusibo - kung unsa ang wala sa ubang mga database. Pananglitan, ania ang pipila sa mga talagsaon nga bahin clickhouse:

  • Mga laray. ang clickhouse maayo kaayo nga suporta alang sa mga arrays, ingon man ang abilidad sa paghimo sa komplikado nga mga kalkulasyon sa kanila.
  • Paghiusa sa mga Istruktura sa Data. Kini usa sa mga "killer features" clickhouse. Bisan pa sa kamatuoran nga ang mga lalaki gikan sa Yandex nag-ingon nga dili namo gusto nga maghiusa sa datos, ang tanan giipon sa clickhousetungod kay kini paspas ug sayon.
  • Materialized nga mga Panglantaw. Uban sa aggregating data structures, materialized views nagtugot kanimo sa paghimo sa usa ka sayon Tinuod nga panahon panagtapok.
  • ClickHouse SQL. Kini usa ka extension sa pinulongan SQL uban sa pipila ka dugang ug eksklusibong mga bahin nga anaa lamang sa clickhouse. Kaniadto, kini, ingon nga kini, usa ka extension sa usa ka bahin, ug usa ka disbentaha sa pikas. Karon hapit tanan nga mga kakulangan itandi sa SQL 92 gitangtang namo, karon extension nalang.
  • Lambda- mga ekspresyon. Naa pa ba sila sa ilang database?
  • ML-suporta. Anaa kini sa lainlaing mga database, ang uban mas maayo, ang uban mas grabe.
  • bukas nga tinubdan. Mahimo natong palapdan clickhouse kauban. Karon sa clickhouse mga 500 ka kontribyutor, ug kini nga gidaghanon padayong mitubo.

Makalibog nga mga Pangutana

В clickhouse adunay daghang lain-laing mga paagi sa pagbuhat sa sama nga butang. Pananglitan, adunay tulo ka lain-laing mga paagi sa pagbalik sa katapusan nga bili gikan sa usa ka lamesa alang sa CPU (adunay ikaupat, apan labi pa nga lahi).

Ang una nagpakita kung unsa ka sayon ​​​​kini buhaton clickhouse mga pangutana kung gusto nimo susihon kana tuple naa sa subquery. Kini usa ka butang nga akong personal nga kulang sa ubang mga database. Kung gusto nako itandi ang usa ka butang sa usa ka subquery, nan sa ubang mga database usa ra ka scalar ang mahimong itandi niini, ug alang sa daghang mga kolum kinahanglan nako isulat DAGHAN. ang clickhouse mahimo nimong gamiton ang tuple:

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

Ang ikaduha nga paagi naghimo sa sama apan naggamit sa usa ka aggregate function argMax:

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

В clickhouse adunay ubay-ubay nga dosena nga aggregate function, ug kung mogamit ka mga combinator, nan sumala sa mga balaod sa combinatorics, nakakuha ka mga usa ka libo niini. ArgMax - usa sa mga gimbuhaton nga nag-ihap sa labing taas nga kantidad: ang pangutana nagbalik sa kantidad usage_user, diin naabot ang pinakataas nga kantidad gibuhat_sa:

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 - "pagpapilit" nga mga laray nga adunay lainlaing mga oras. Kini usa ka talagsaon nga bahin alang sa mga database ug magamit ra sa kdb+. Kung adunay duha ka serye sa panahon nga adunay lainlaing mga oras, ASOF JOIN nagtugot kanila nga ibalhin ug ipapilit sa usa ka hangyo. Alang sa matag kantidad sa usa ka serye sa panahon, ang labing duol nga kantidad sa lain makit-an, ug kini gibalik sa parehas nga linya:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Analytic nga mga Katungdanan

Sa estandard SQL-2003 makasulat ka sama niini:

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;

В clickhouse kini dili mahimo - kini dili pagsuporta sa sumbanan SQL-2003 ug lagmit dili gayod. Hinunoa, sa clickhouse naandan na ang pagsulat sama niini:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Gisaad nako ang mga lambdas - ania na sila!

Kini usa ka analogue sa usa ka analytical nga pangutana sa sumbanan SQL-2003: kini nag-ihap sa kalainan tali sa duha timestamp, gidugayon, ordinal - tanan nga kasagaran natong gikonsiderar nga analytic function. SA clickhouse giihap nato sila pinaagi sa mga laray: una atong gihugpong ang datos ngadto sa usa ka laray, human niana atong buhaton ang bisan unsa nga atong gusto sa laray, ug dayon atong gipalapdan kini balik. Dili kaayo kombenyente, nanginahanglan kini usa ka gugma sa functional nga programming sa labing gamay, apan kini labi ka dali.

Espesyal nga mga Feature

Gawas pa, sa clickhouse daghang mga espesyal nga bahin. Pananglitan, unsaon pagtino kung pila ka sesyon ang nagdagan sa parehas nga oras? Ang kasagarang buluhaton sa pagmonitor mao ang pagtino sa kinatas-ang load sa usa ka hangyo. SA clickhouse Adunay usa ka espesyal nga function alang niini nga katuyoan:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Sa kinatibuk-an, ang ClickHouse adunay espesyal nga mga gimbuhaton alang sa daghang mga katuyoan:

  • runningDifference, runningAccumulate, silingan;
  • sumMap(key, bili);
  • timeSeriesGroupSum(uid, timestamp, bili);
  • timeSeriesGroupRateSum(uid, timestamp, bili);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • MAY PUNO / MAY HUGOT;
  • simpleLinearRegression, stochasticLinearRegression.

Dili kini kompleto nga lista sa mga bahin, adunay 500-600 ra niini. Sugyot: tanan nga mga gimbuhaton sa clickhouse naa sa lamesa sa sistema (dili tanan dokumentado, apan tanan makapaikag):

select * from system.functions order by name

clickhouse nagtipig daghang impormasyon bahin sa iyang kaugalingon, lakip na mga talaan sa log, query_log, trace log, operation log nga adunay mga bloke sa datos (bahin_log), ang metrics log, ug ang system log, nga kasagarang isulat niini sa disk. Ang metrics log mao ang serye sa panahon в clickhouse sa tinuud clickhouse: ang database mismo makadula og papel serye sa panahon databases, sa ingon "paglamoy" sa iyang kaugalingon.

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Usa usab kini ka talagsaon nga butang - tungod kay maayo ang among trabaho serye sa panahonnganong dili man nato tipigan ang tanan natong gikinahanglan sa atong kaugalingon? Wala mi magkinahanglan Prometheus, gitago namo ang tanan sa among kaugalingon. Konektado grafana ug gimonitor namo ang among kaugalingon. Apan, kon clickhouse mahulog, dili nato makita - ngano - mao nga kasagaran dili nila kana buhaton.

Dagko nga kumpol o daghang gagmay clickhouse

Unsa ang mas maayo - usa ka dako nga cluster o daghang gagmay nga ClickHouses? Ang tradisyonal nga pamaagi sa DWH usa ka dako nga cluster diin ang mga laraw gigahin alang sa matag aplikasyon. Miabot mi sa database administrator - hatagi mi ug schema, ug gihatagan mi:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

В clickhouse mahimo nimo kini nga lahi. Makahimo ba ang matag aplikasyon sa iyang kaugalingon clickhouse:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Wala na mi magkinahanglan ug dakong monster DWH ug dili kooperatiba nga mga admin. Makahatag kami sa matag aplikasyon sa iyang kaugalingon clickhouse, ug ang developer makahimo niini sa iyang kaugalingon, tungod kay clickhouse sayon ​​kaayo nga i-install ug wala magkinahanglan og komplikadong administrasyon:

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Pero kung daghan ta clickhouse, ug kinahanglan nimo nga i-set kini kanunay, unya gusto nimo nga i-automate kini nga proseso. Alang niini mahimo naton, pananglitan, gamiton Kubernetes и clickhouse-operator. SA Kubernetes ClickHouse mahimo nimong ibutang ang "sa pag-klik": Mahimo kong i-klik ang usa ka buton, ipadagan ang manifest ug andam na ang database. Mahimo ka dayon nga maghimo usa ka laraw, magsugod sa pag-load sa mga sukatan didto, ug pagkahuman sa 5 minuto naa na ako usa ka dashboard nga andam grafana. Yano ra kaayo!

Unsa man ang sa katapusan?

Ug busa, clickhouse - Kini:

  • Dali. Ang tanan nahibalo niini.
  • Simple lang. Medyo debatable, pero abi nakog lisod makat-on, dali awayon. Kung nasabtan nimo kung giunsa clickhouse nagtrabaho, ang tanan yano ra kaayo.
  • Sa unibersidad. Kini angay alang sa lainlaing mga senaryo: DWH, Serye sa Oras, Pagtipig sa Log. Apan dili OLTP database, busa ayaw pagsulay sa paghimo og mugbo nga mga pagsal-ot ug pagbasa didto.
  • Makaiikag. Tingali ang usa nga nagtrabaho uban clickhouse, nakasinati og daghang makapaikag nga mga minuto sa maayo ug dili maayo nga diwa. Pananglitan, usa ka bag-ong pagpagawas ang migawas, ang tanan mihunong sa pagtrabaho. O kung nakigbisog ka sa usa ka buluhaton sulod sa duha ka adlaw, apan pagkahuman sa usa ka pangutana sa chat sa Telegram, ang buluhaton nasulbad sa duha ka minuto. O, sama sa komperensya sa taho ni Lesha Milovidov, usa ka screenshot gikan sa clickhouse gibuak ang sibya Taas nga Load++. Kini nga mga matang sa mga butang mahitabo sa tanan nga panahon ug naghimo sa atong kinabuhi uban clickhouse hayag ug makapaikag!

Ang presentasyon mahimong tan-awon dinhi.

Pagbalhin sa ClickHouse: 3 ka tuig ang milabay

Ang dugay nang gipaabot nga miting sa mga developers sa high-load system sa Taas nga Load++ mahitabo sa Nobyembre 9 ug 10 sa Skolkovo. Sa katapusan, kini usa ka offline nga komperensya (bisan kung adunay tanan nga mga pag-amping), tungod kay ang kusog sa HighLoad++ dili ma-package online.

Alang sa komperensya, among nakit-an ug gipakita kanimo ang mga kaso bahin sa labing kadaghan nga posibilidad sa teknolohiya: Ang HighLoad ++ kaniadto, mao ug mao ra ang lugar diin makakat-on ka sa duha ka adlaw kung giunsa ang pagtrabaho sa Facebook, Yandex, VKontakte, Google ug Amazon.

Kay nakapahigayon na sa atong mga tigom nga walay hunong sukad sa 2007, karong tuiga kita magkita sa ika-14 nga higayon. Niini nga panahon, ang komperensya miuswag sa 10 ka beses, sa miaging tuig ang yawe nga kalihokan sa industriya nagtigum sa 3339 ka mga partisipante, 165 ka mga mamumulong sa mga taho ug mga meetup, ug 16 ka mga track ang nagdula sa samang higayon.
Sa miaging tuig adunay 20 ka mga bus alang kanimo, 5280 ka litro sa tsa ug kape, 1650 ka litro sa prutas nga ilimnon ug 10200 ka botelyang tubig. Ug laing 2640 ka kilo nga pagkaon, 16 ka plato ug 000 ka tasa. Pinaagi sa dalan, uban sa salapi nga nakuha gikan sa recycled nga papel, kami nagtanom og 25 ka oak seedlings 🙂

Mahimong mapalit ang mga tiket dinhi, makadawat og balita bahin sa komperensya — dinhi, ug pakigsulti sa tanang social network: telegrama, Facebook, Vkontakte и Twitter.

Source: www.habr.com

Idugang sa usa ka comment