Trasferimentu à ClickHouse: 3 anni dopu

Trè anni fà, Viktor Tarnavsky è Alexey Milovidov da Yandex nantu à u palcuscenicu HighLoad ++ dettu, quantu bona ClickHouse hè, è cumu ùn rallenta. È nantu à a tappa dopu ci era Alexander Zaitsev с rapportu circa muvimenti à CliccaCasa da un altru DBMS analiticu è cù a cunclusione chì CliccaCasa, sicuru, bonu, ma micca assai còmuda. Quandu in 2016 a cumpagnia LifeStreet, induve Alexander hà travagliatu, era cunvertisce un sistema analiticu multi-petabyte à CliccaCasa, era una affascinante "strada di mattoni gialli" piena di periculi scunnisciuti - CliccaCasa tandu pareva un campu minatu.

Trè anni dopu CliccaCasa divintò assai megliu - durante stu tempu Alexander hà fundatu a cumpagnia Altinity, chì ùn solu aiuta à a ghjente à passà CliccaCasa decine di prughjetti, ma ancu migliurà u pruduttu stessu cù i culleghi di Yandex. Avà CliccaCasa ancora micca una passeggiata spensierata, ma ùn hè più un campu minatu.

Alexander hà travagliatu cù sistemi distribuiti dapoi u 2003, sviluppatu grandi prughjetti MySQL, Oracle и Vertica. Nantu à l'ultimu HighLoad++ 2019 Alexander, unu di i pionieri di usu CliccaCasa, hà dettu ciò chì hè issa DBMS. Avemu da amparà nantu à e caratteristiche principali CliccaCasa: cumu si differe di l'altri sistemi è in quali casi hè più efficau per aduprà. Usendu esempii, vi guardemu pratichi recenti è prughjetti pruvati per i sistemi di custruzzione basati CliccaCasa.


Retrospectiva : ciò chì hè accadutu 3 anni fà

Trè anni fà avemu trasfirutu a cumpagnia LifeStreet nantu CliccaCasa da una altra basa di dati analitica, è a migrazione di l'analitiche di a rete di publicità pareva cusì:

  • Ghjugnu 2016. In Open Source ghjugna CliccaCasa è u nostru prughjettu hà cuminciatu;
  • Aostu. Pruva di cuncettu: grande reta di publicità, infrastruttura è 200-300 terabytes di dati;
  • Ottobre. Dati di prima pruduzzione;
  • Dicembre. A carica di u produttu tutale hè di 10-50 miliardi di avvenimenti per ghjornu.
  • June 2017. Migrazione successu di l'utilizatori à CliccaCasa, 2,5 petabytes di dati nantu à un cluster di 60 servitori.

Durante u prucessu di migrazione, ci era una cunniscenza crescente CliccaCasa hè un bonu sistema chì hè piacevule per travaglià, ma questu hè un prughjettu internu di Yandex. Per quessa, ci sò sfumature: Yandex hà da trattà prima cù i so clienti internu è solu dopu cù a cumunità è i bisogni di l'utilizatori esterni, è ClickHouse ùn hà micca righjuntu u livellu di l'impresa in parechji spazii funziunali. Hè per quessa chì avemu fundatu Altinity in March 2017 per fà CliccaCasa ancu più veloce è più convenientu micca solu per Yandex, ma ancu per altri utilizatori. È avà noi:

  • Formemu è aiutamu à custruisce suluzioni basate nantu à CliccaCasa per chì i clienti ùn si mettenu in prublemi, è cusì chì a suluzione ultimamente funziona;
  • Furnemu supportu 24/7 CliccaCasa- installazioni;
  • Sviluppemu i nostri prughjetti di l'ecosistema;
  • Ci impegnimu attivamente à noi stessi CliccaCasa, risponde à e dumande da l'utilizatori chì volenu vede certe funziunalità.

E, sicuru, aiutemu cù u muvimentu CliccaCasa с MySQL, Vertica, oraculu, Prugna verde, Redshift è altri sistemi. Avemu participatu in una varietà di muvimenti, è tutti anu successu.

Trasferimentu à ClickHouse: 3 anni dopu

Perchè passà à CliccaCasa

Ùn rallenta ! Questu hè u mutivu principale. CliccaCasa - basa di dati assai veloce per diversi scenarii:

Trasferimentu à ClickHouse: 3 anni dopu

Citazioni casuali da e persone chì anu travagliatu cù e persone per un bellu pezzu CliccaCasa.

Scalabilità. In una altra basa di dati pudete ottene un bonu rendimentu nantu à un pezzu di hardware, ma CliccaCasa pudete scala micca solu verticalmente, ma ancu horizontale, solu per aghjunghje servitori. Tuttu ùn funziona micca bè cum'è vuleriamu, ma funziona. Pudete espansione u sistema cum'è a vostra attività cresce. Hè impurtante chì ùn simu limitati da a suluzione avà è ci hè sempre un putenziale di sviluppu.

Portabilità. Ùn ci hè micca attaccamentu à una cosa. Per esempiu, cù Amazon RedShift Hè difficiuli di spustà in un locu. A CliccaCasa pudete stallà nantu à u vostru laptop, servitore, implementà à u nuvulu, andate à Kubernetes - ùn ci hè micca restrizioni à u funziunamentu di l'infrastruttura. Questu hè cunvenutu per tutti, è questu hè un grande vantaghju chì parechje altre basa di dati simili ùn ponu micca vantà.

Flessibilità. CliccaCasa ùn si ferma à una cosa, per esempiu, Yandex.Metrica, ma si sviluppa è veni usatu in più è più prughjetti differente è industrii. Pò esse allargatu aghjunghjendu novi capacità per risolve novi prublemi. Per esempiu, si crede chì l'almacenamiento di logs in una basa di dati hè una cattiva manera, perch'elli sò ghjunti Elasticsearch. Ma grazia à a flessibilità CliccaCasa, Pudete ancu almacenà logs in questu, è spessu questu hè ancu megliu cà in Elasticsearch - in CliccaCasa questu richiede 10 volte menu ferru.

Gratuitu Open Source. Ùn avete micca pagà per nunda. Ùn ci hè bisognu di negozià u permessu per installà u sistema in u vostru laptop o servitore. Nisuna spesa oculta. À u listessu tempu, nisuna altra tecnulugia di basa di dati Open Source pò cumpete in velocità CliccaCasa. MySQL, MariaDB, Greenplum - sò tutti assai più lenti.

Cumunità, cunduce è Fun. Avè CliccaCasa cumunità eccellente: incontri, chats è Alexey Milovidov, chì ci carica tutti cù a so energia è ottimisimu.

Trasferimentu à ClickHouse

Per andà à CliccaCasa per una certa ragione, avete solu bisognu di trè cose:

  • Capisce e limitazioni CliccaCasa è ciò chì ùn hè micca adattatu.
  • Approfitta tecnulugia è i so più grandi punti di forza.
  • Sperimenta. Ancu capisce cumu funziona CliccaCasa, ùn hè micca sempre pussibule di predichendu quandu serà più veloce, quandu serà più lento, quandu serà megliu, è quandu serà peghju. Allora pruvate.

Prublemu di muvimentu

Ci hè solu un "ma": se si move CliccaCasa da qualcosa altru, allora di solitu qualcosa va male. Semu abituati à qualchi pratiche è cose chì travaglianu in a nostra basa di dati preferita. Per esempiu, qualchissia chì travaglia SQE basa di dati L consideranu u seguitu inseme di funzioni obbligatori:

  • transazzione;
  • limitazioni;
  • cunsistenza;
  • indici;
  • UPDATE / DELETE;
  • NULL;
  • millisecondi;
  • casts di tipu autumàticu;
  • unione multiple;
  • partizioni arbitrarie;
  • Strumenti di gestione di cluster.

U reclutamentu hè ubligatoriu, ma trè anni fà CliccaCasa Nisuna di queste funzioni era dispunibule! Avà menu di a mità di ciò chì ùn hè micca stata implementata resta: transazzione, restrizioni, Coerenza, millisecondi è casting di tipu.

È a cosa principal hè chì in CliccaCasa alcune pratiche standard è approcci ùn funzionanu micca o travaglianu in modu diversu di ciò chì avemu abituatu. Tuttu ciò chì appare in CliccaCasa, currisponde à "ClickHouse modu", i.e. e funzioni sò diffirenti da altre basa di dati. Per esempiu:

  • L'indici ùn sò micca selezziunati, ma saltati.
  • UPDATE / DELETE micca sincronu, ma asincronu.
  • Ci sò parechje unisce, ma ùn ci hè micca un pianificatore di query. Cume sò allora realizati ùn hè generalmente micca assai chjaru à e persone di u mondu di a basa di dati.

ClickHouse Scripts

In u 1960, un matematicu americanu di origine Ungherese Wigner EP hà scrittu un articulu "L'efficacità irragionevule di a matematica in e scienze naturali" ("L'efficacità incomprensibile di a Matematica in e Scienze Naturali") chì u mondu chì ci circonda hè per una certa ragione ben descritta da e lege matematiche. A matematica hè una scienza astratta, è e lege fisiche espresse in forma matematica ùn sò micca triviali, è Wigner EP sottolineatu chì questu hè assai stranu.

Da u mo puntu di vista, CliccaCasa - a stessa stranezza. Per rinfurzà Wigner, pudemu dì questu: l'efficienza inconcepibile hè stupente CliccaCasa in una larga varietà di applicazioni analitiche!

Trasferimentu à ClickHouse: 3 anni dopu

Per esempiu, andemu à piglià Data Warehouse in tempu reale, in quale i dati sò caricati quasi in permanenza. Vulemu riceve richieste da ellu cun un secondu ritardu. Per piacè - aduprà CliccaCasa, perchè questu hè u scenariu per u quale hè statu creatu. CliccaCasa Questu hè esattamente cumu si usa micca solu in u web, ma ancu in marketing è analitiche finanziarie, AdTech, è ancu in Rilevazione di froden. IN Data Warehouse in tempu reale un schema strutturatu cumplessu cum'è "stella" o "fioccu di neve" hè utilizatu, assai tavule cù JOIN (a volte multiple), è i dati sò generalmente almacenati è cambiati in certi sistemi.

Pigliemu un altru scenariu - Serie di tempu: surviglianza di i dispusitivi, rete, statistiche di usu, Internet di e cose. Quì avemu scontru avvenimenti abbastanza simplici urdinati in u tempu. CliccaCasa ùn hè statu uriginale sviluppatu per questu, ma hà dimustratu per travaglià bè, per quessa chì e grande cumpagnie utilizanu CliccaCasa cum'è un repository per u monitoraghju di l'infurmazioni. Per scopre s'ellu hè adattatu CliccaCasa per a serie temporale, avemu fattu un benchmark basatu annantu à l'approcciu è i risultati InfluxDB и TimecaleDB - specializatu serie di tempu basa di dati. Hè andatu, questu CliccaCasa, ancu senza ottimisazione per tali compiti, vince in un campu straneru:

Trasferimentu à ClickHouse: 3 anni dopu

В serie di tempu Di solitu una tavula stretta hè usata - parechji picculi culonni. Un saccu di dati pò vene da u monitoraghju - milioni di record per seconda - è sò generalmente in picculi raffiche (In tempu reale streaming). Per quessa, un script d'inserzione differente hè necessariu, è e dumande stessu anu e so specifiche.

Ghjestionu di Ghjestionu. A cullizzioni di logs in una basa di dati hè generalmente male, ma CliccaCasa chistu pò esse fattu cù qualchi cumenti comu discrittu sopra. Parechje cumpagnie usanu CliccaCasa esattamente per questu scopu. In questu casu, usemu una tavola larga piatta induve guardemu tutti i logs (per esempiu, in a forma JSON), o tagliate in pezzi. I dati sò generalmente caricati in grandi batch (fichi), è cerchemu per qualchì campu.

Per ognuna di queste funzioni, sò generalmente utilizati basa di dati specializati. CliccaCasa unu pò fà tuttu è cusì bè chì li supera. Fighjemu avà un ochju più vicinu serie di tempu scenariu, è cumu "coccu" currettamente CliccaCasa per stu scenariu.

Time-Series

Attualmente questu hè u scenariu principale per quale CliccaCasa cunzidiratu a suluzione standard. Serie di tempu hè un inseme di avvenimenti urdinati in u tempu, chì rapprisentanu cambiamenti in qualchì prucessu cù u tempu. Per esempiu, questu puderia esse a freccia cardiaca per ghjornu o u numeru di prucessi in u sistema. Tuttu ciò chì dà tempu ticks cù qualchi dimensioni hè serie di tempu:

Trasferimentu à ClickHouse: 3 anni dopu

A maiò parte di sti tipi di avvenimenti venenu da u monitoraghju. Questu pò esse micca solu monitorizà u web, ma ancu i dispositi veri: vitture, sistemi industriali, IoT, fabbriche o taxi unmanned, in u troncu di quale Yandex hè digià mette CliccaCasa-servitore.

Per esempiu, ci sò cumpagnie chì recullanu dati da i navi. Ogni pochi secondi, i sensori nantu à a nave di cuntainer mandanu centinaie di misure diverse. L'ingegneri li studianu, custruiscenu mudelli è pruvate à capisce quantu efficacemente u bastimentu hè utilizatu, perchè una nave di cuntainer ùn deve esse inattivu ancu per un secondu. Ogni downtime hè una perdita di soldi, per quessa, hè impurtante predichendu a strada per chì i stoppini sò minimi.

Oghje ci hè una crescita di basa di dati specializate chì misuranu serie di tempu. Nantu à u situ Motori DB E diverse basa di dati sò in qualchì modu classificate, è pudete vede per tipu:

Trasferimentu à ClickHouse: 3 anni dopu

U tipu di crescita più veloce hè serie di tempus. I basa di dati di gràficu sò ancu in crescita, ma serie di tempus anu crisciutu più rapidamente in l'ultimi anni. Rapprisintanti tipici di sta famiglia di basa di dati sò InfluxDB, Prometheus, KDB, TimecaleDB (custruitu nantu à PostgreSQL), suluzioni da Amazon. CliccaCasa pò esse usatu ancu quì, è hè usatu. Lasciami dà uni pochi di esempii publicu.

Unu di i pionieri hè a cumpagnia CloudFlare (CDN-furnitore). Monitoranu i so CDN attraversu CliccaCasa (DNS- dumande, HTTP-queries) cù una carica enormosa - 6 milioni di avvenimenti per seconda. Tuttu passa Kafka, va à CliccaCasa, chì furnisce a capacità di vede dashboards di avvenimenti in u sistema in tempu reale.

Comcast - unu di i capi di telecomunicazioni in i Stati Uniti: Internet, televisione digitale, telefonia. Creanu un sistema di cuntrollu simili CDN in u quadru Open Source u prughjettu U cuntrollu di u trafficu Apache per travaglià cù i vostri dati enormi. CliccaCasa utilizatu cum'è backend per l'analisi.

percona custruitu in CliccaCasa dentro u vostru PMMper almacenà u monitoraghju di varii MySQL.

Requisiti specifichi

I basa di dati di serie temporale anu i so propri esigenze specifiche.

  • Inserzione rapida da parechji agenti. Avemu da inserisce dati da parechji flussi assai rapidamente. CliccaCasa Face cusì bè perchè tutti i so inseriti ùn sò micca bluccanti. Qualchese inserisce hè un novu schedariu nantu à u discu, è i picculi inseriti ponu esse buffered in un modu o un altru. IN CliccaCasa Hè megliu inserisce dati in grandi batch piuttostu cà una linea à volta.
  • Schema flexible. L' serie di tempu di solitu ùn cunnosci micca a struttura di dati cumplettamente. Hè pussibule di custruisce un sistema di surviglianza per una applicazione specifica, ma allora hè difficiule di usà per un'altra applicazione. Questu hè bisognu di un schema più flexible. CliccaCasa, permette di fà questu, ancu s'ellu hè una basa forte tipa.
  • Almacenamiento efficiente è scurdà di dati. Di solitu in serie di tempu una quantità enorme di dati, cusì deve esse almacenatu in modu efficientemente pussibule. Per esempiu, à InfluxDB bona cumpressione hè a so funzione principale. Ma oltri almacenà, vi tocca dinù esse capaci di "scurdà" dati vechji è fà qualchi tipu di downsampling - cunti autumàticu di aggregati.
  • Interrogazioni veloci nantu à i dati aggregati. Calchì volta hè interessante di guardà l'ultimi minuti 5 cù una precisione di millisecondi, ma nantu à u minutu di dati mensili o a seconda granularità pò esse micca necessariu - statistiche generale sò abbastanza. U sustegnu di stu tipu hè necessariu, altrimenti una dumanda di 3 mesi duverà assai tempu per compie ancu in CliccaCasa.
  • Richieste cum'è "ultimu puntu, da». Quessi sò tipici per serie di tempu dumande: fighjate l'ultima misurazione o statu di u sistema in un mumentu in u tempu t. Quessi ùn sò micca dumande assai piacevuli per una basa di dati, ma avete ancu bisognu di pudè eseguisce.
  • Serie temporale "Incollatura".. Serie di tempu hè una serie di tempu. Se ci sò duie serie di tempu, spessu anu bisognu à esse cunnessi è correlati. Ùn hè micca cunvenutu per fà questu nantu à tutte e basa di dati, soprattuttu cù serie di tempu unaligned: quì sò qualchi punti di tempu, ci sò altri. Pudete cunsiderà mediu, ma di colpu ci sarà sempre un pirtusu, cusì ùn hè micca chjaru.

Videmu cumu si sò soddisfatti questi requisiti CliccaCasa.

U schema

В CliccaCasa schema per serie di tempu pò esse fattu in diverse manere, secondu u gradu di regularità di i dati. Hè pussibule di custruisce un sistema nantu à e dati regularmente quandu sapemu tutte e metriche in anticipu. Per esempiu, aghju fattu questu CloudFlare cù u monitoraghju CDN hè un sistema bè ottimizatu. Pudete custruisce un sistema più generale chì monitoreghja tutta l'infrastruttura è diversi servizii. In u casu di dati irregulari, ùn sapemu micca in anticipu ciò chì monitoremu - è questu hè probabilmente u casu più cumuni.

Dati regularmente. Culonni. U schema hè simplice - colonne cù i tipi necessarii:

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

Questa hè una tavula regulare chì monitoreghja qualchì tipu di attività di carica di u sistema (Fammi, sistema, idle, piacevule). Semplice è cunvene, ma micca flexible. Se vulemu un schema più flexible, allora pudemu usà arrays.

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

strutura Anidatu sò dui matrici: metrica.nome и metrica.valore. Quì pudete almacenà tali dati di surviglianza arbitraria cum'è una serie di nomi è una serie di misurazioni per ogni avvenimentu. Per più ottimisazione, invece di una tali struttura, pudete fà parechji. Per esempiu, unu per float-valore, un altru - per tram- significatu perchè tram Vogliu almacenà in modu più efficace.

Ma una tale struttura hè più difficiuli di accede. Duverete aduprà una custruzzione speciale, utilizendu funzioni speciali per caccià i valori di prima l'indici è dopu l'array:

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

Ma travaglia sempre abbastanza rapidamente. Un altru modu per almacenà dati irregulari hè da fila.

Dati irregolari. Corde. In questu metudu tradiziunale, senza array, i nomi è i valori sò almacenati simultaneamente. Se 5 000 misurazioni venenu da un dispositivu à una volta, 5 000 fila sò generati in a basa di dati:

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

CliccaCasa copes with this - hà estensioni spiciali CliccaCasa SQL. Per esempiu, maxIf - una funzione speciale chì calcula u massimu da una metrica quandu una certa cundizione hè cumpleta. Pudete scrive parechje espressioni tali in una dumanda è immediatamente calculà u valore per parechje metriche.

Comparamu trè approcci:

Trasferimentu à ClickHouse: 3 anni dopu

li dittagli

Quì aghju aghjustatu "Disk Data Size" per qualchì set di dati di prova. In u casu di e culonne, avemu a più chjuca dimensione di dati: cumpressione massima, velocità massima di quistione, ma paghemu per avè da registrà tuttu in una volta.

In u casu di arrays, tuttu hè un pocu peghju. I dati sò sempre ben compressi è un mudellu irregulare pò esse guardatu. Ma CliccaCasa - una basa di dati di colonna, è quandu avemu cuminciatu à almacenà tuttu in un array, si trasforma in una fila, è paghemu per a flessibilità cun efficienza. Per ogni operazione, duverete leghje tutta l'array in memoria, dopu truvà l'elementu desideratu in questu - è se l'array cresce, allora a velocità si degrada.

In una di e cumpagnie chì usa stu approcciu (per esempiu, über), arrays sò tagliati in pezzi di 128 elementi. Dati da parechji milla metri cun un voluminu di 200 TB di dati / ghjornu ùn sò micca guardati in un array, ma in 10 o 30 arrays cù una logica di almacenamiento speciale.

L'approcciu più simplice hè cù strings. Ma i dati sò pocu cumpressi, a dimensione di a tavula hè grande, è ancu quandu e dumande sò basate nantu à parechje metriche, ClickHouse ùn funziona micca in modu ottimali.

Schema ibridu

Assumimu chì avemu sceltu un circuitu array. Ma se sapemu chì a maiò parte di i nostri dashboards mostranu solu metriche di l'utilizatori è di u sistema, pudemu ancu materializà queste metriche in colonne da un array à u livellu di a tavola in questu modu:

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

Quandu si inserisce CliccaCasa li cuntarà automaticamente. Questu modu pudete cumminà l'affari cù u piacè: u schema hè flexible è generale, ma avemu tiratu fora i culonni più freti utilizati. Nota chì questu ùn hà micca bisognu di cambià l'inseritu è ETLchì cuntinueghja à inserisce arrays in a tavula. Avemu ghjustu fattu ALTER TABLE, aghjunghjenu un paru di parlanti è avemu un schema hibridu è più veloce chì pudete cumincià à aduprà subitu.

Codecs è cumpressione

di serie di tempu Hè impurtante quantu ben imballate i dati perchè a quantità di informazioni pò esse assai grande. IN CliccaCasa Ci hè un inseme di strumenti per ottene un effettu di cumpressione di 1:10, 1:20, è qualchì volta più. Questu significa chì 1 TB di dati unpacked nantu à u discu pigghia 50-100 GB. A dimensione più chjuca hè bona, i dati ponu esse letti è processati più rapidamente.

Per ottene un altu livellu di compressione, CliccaCasa supporta i seguenti codecs:

Trasferimentu à ClickHouse: 3 anni dopu

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

Quì avemu definitu u codec DoubleDelta in un casu, in u sicondu - Gorilla, è sicuramente aghjunghje più LZ4 cumpressione. In u risultatu, a dimensione di e dati nantu à u discu hè assai ridutta:

Trasferimentu à ClickHouse: 3 anni dopu

Questu mostra quantu spaziu occupanu i stessi dati, ma utilizendu codecs è compressioni diffirenti:

  • in un schedariu GZIP nantu à u discu;
  • in ClickHouse senza codecs, ma cù cumpressione ZSTD;
  • in ClickHouse cù codecs è cumpressione LZ4 è ZSTD.

Pò esse vistu chì e tavule cù codecs occupanu assai menu spaziu.

Unità di dimensione

Ùn hè menu impurtante выбрать tipu di dati currettu:

Trasferimentu à ClickHouse: 3 anni dopu

In tutti l'esempii sopra, aghju utilizatu Fluttu 64. Ma si avemu sceltu Fluttu 32, allura saria ancu megliu. Questu hè statu bè dimustratu da i picciotti di Perkona in l'articulu ligatu sopra. Hè impurtante d'utilizà u tipu più compactu chì hè adattatu per u compitu: ancu menu per a dimensione di u discu cà per a velocità di dumanda. CliccaCasa assai sensibili à questu.

Se pudete aduprà int32 invece di int64, allora aspettate un aumentu quasi duppiu di u rendiment. I dati occupanu menu memoria, è tutta a "aritmetica" travaglia assai più veloce. CliccaCasa internamente hè un sistema tipatu assai strettu; face u massimu di tutte e pussibulità chì i sistemi muderni furniscenu.

Aggregazione è Viste materializzate

L'agregazione è e viste materializate permettenu di creà aggregati per diverse occasioni:

Trasferimentu à ClickHouse: 3 anni dopu

Per esempiu, pudete avè dati di fonte micca aggregati, è pudete attaccà diverse viste materializzate à elli cù sommazione automatica attraversu un mutore speciale. SummingMergeTree (SMT). SMT hè una struttura speciale di dati aggregating chì calcula l'aggregati automaticamente. I dati crudi sò inseriti in a basa di dati, sò automaticamente aggregati, è i dashboards ponu esse utilizati immediatamente nantu à questu.

TTL - "dimenticà" dati vechji

Cumu "scurdà" di dati chì ùn hè più necessariu? CliccaCasa sà cumu fà questu. Quandu creanu tavule, pudete specificà TTL espressioni: per esempiu, chì guardemu dati minuti per un ghjornu, dati ogni ghjornu per 30 ghjorni, è ùn mai toccu dati settimanali o mensili:

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-livellu - dividite i dati nantu à i dischi

Pigliendu sta idea in più, i dati ponu esse almacenati in CliccaCasa in diversi lochi. Supponemu chì vulemu almacenà e dati caldi per l'ultima settimana in un locu assai veloce SSD, è avemu messu più dati storichi in un altru locu. IN CliccaCasa questu hè avà pussibule:

Trasferimentu à ClickHouse: 3 anni dopu

Pudete cunfigurà una pulitica di almacenamento (pulitica di almacenamentu) Allora CliccaCasa Trasferirà automaticamente e dati quandu ghjunghje à certe cundizioni à un altru almacenamentu.

Ma ùn hè micca tuttu. À u livellu di una tavula specifica, pudete definisce e regule per esattamente quandu i dati entranu in u cold storage. Per esempiu, i dati sò guardati in un discu assai veloce per 7 ghjorni, è tuttu ciò chì hè più vechju hè trasferitu à un lentu. Questu hè bonu perchè permette di mantene u sistema à u massimu rendimentu, mentre cuntrollendu i costi è ùn perde micca soldi nantu à e dati friddi:

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

Funzioni uniche CliccaCasa

In quasi tuttu CliccaCasa Ci sò tali "punti salienti", ma sò compensati da l'exclusività - qualcosa chì ùn hè micca in altre basa di dati. Per esempiu, quì sò alcune di e caratteristiche uniche CliccaCasa:

  • Matrici. L' CliccaCasa assai bonu supportu per arrays, è ancu a capacità di fà calculi cumplessi nantu à elli.
  • Aggregazione di strutture di dati. Questa hè una di e "caratteristiche assassine" CliccaCasa. Malgradu u fattu chì i ragazzi di Yandex dicenu chì ùn vulemu micca aggregate dati, tuttu hè aggregatu in CliccaCasa, perchè hè veloce è convenientu.
  • Viste materializzate. Inseme cù strutture di dati aggregating, viste materializzate permettenu di fà cunvene In tempu reale aggregazione.
  • Clicca House SQL. Questa hè una estensione di lingua SQL cù alcune funzioni supplementari è esclusive chì sò solu dispunibili in CliccaCasa. Nanzu, era cum'è una espansione da una banda, è un svantaghju da l'altru. Avà quasi tutti i disadvantages paragunatu à SQL 92 l'avemu cacciatu, avà hè solu una estensione.
  • Lambda- espressioni. Sò sempre in ogni basa di dati?
  • ML- sustegnu. Questu hè dispunibule in diverse basa di dati, alcuni sò megliu, alcuni sò peggiu.
  • fonte aperta. Pudemu espansione CliccaCasa inseme. Avà in CliccaCasa circa 500 cuntributori, è stu numeru hè sempri criscenti.

Quistioni difficili

В CliccaCasa ci sò parechje manere di fà a stessa cosa. Per esempiu, pudete rinvià l'ultimu valore da una tavula in trè modi diffirenti per CPU (ci hè ancu un quartu, ma hè ancu più esoticu).

U primu mostra quantu hè convenientu di fà in CliccaCasa dumande quandu vulete verificà questu tupla contenuta in a subquery. Questu hè qualcosa chì personalmente mi mancava veramente in altre basa di dati. Se vogliu paragunà qualcosa cù una subquery, allora in altre basa di dati solu un scalare pò esse paragunatu cù questu, ma per parechje colonne aghju bisognu di scrive. JOIN. L' CliccaCasa pudete aduprà tuple:

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

U sicondu metudu faci a listessa cosa, ma usa una funzione aggregata argMax:

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

В CliccaCasa Ci sò parechje decine di funzioni aggregate, è s'è vo aduprate cumminatori, allora secondu a lege di a cumminatoria uttene circa un milla di elli. ArgMax - una di e funzioni chì calcula u valore massimu: a dumanda torna u valore usu_usu, à quale u valore massimu hè righjuntu creatu_à:

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 - "colle" fila cù tempi diffirenti. Questa hè una funzione unica per e basa di dati chì hè dispunibule solu in kdb+. Se ci sò duie serie di tempu cù tempi diffirenti, ASOF JOIN permette di spustà è unisce in una dumanda. Per ogni valore in una serie di tempu, u valore più vicinu in l'altru si trova, è sò tornati nantu à a stessa linea:

Trasferimentu à ClickHouse: 3 anni dopu

Funzioni analitiche

In u standard SQL-2003 pudete scrive cusì:

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;

В CliccaCasa Ùn pudete micca fà chì - ùn sustene micca u standard SQL-2003 è probabilmente ùn la farà mai. Invece, in CliccaCasa Hè abitudine di scrive cusì:

Trasferimentu à ClickHouse: 3 anni dopu

Aghju prumessu lambdas - quì sò!

Questu hè un analogu di a dumanda analitica in u standard SQL-2003: cunta a sfarenza trà i dui timestamp, durata, numeru ordinale - tuttu ciò chì generalmente cunsideremu funzioni analitiche. IN CliccaCasa Li cuntamu attraversu array: prima colapsemu i dati in un array, dopu facemu tuttu ciò chì vulemu nantu à l'array, è poi l'espansione torna. Ùn hè micca assai cunvene, deve esse un amore di prugrammazione funziunale à u minimu, ma hè assai flexible.

Funzioni spiciali

Inoltre, in CliccaCasa parechje funzioni specializate. Per esempiu, cumu per determinà quante sessioni si facenu simultaneamente? Un compitu di monitoraghju tipicu hè di determinà a carica massima cù una dumanda. IN CliccaCasa Ci hè una funzione speciale per questu scopu:

Trasferimentu à ClickHouse: 3 anni dopu

In generale, ClickHouse hà funzioni speciale per parechji scopi:

  • runningDifference, runningAccumulate, vicinu;
  • sumMap (chiave, valore);
  • timeSeriesGroupSum (uid, timestamp, value);
  • timeSeriesGroupRateSum (uid, timestamp, valore);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • CU FILL / CÀ LACVATA;
  • SimpleLinearRegression, stochasticLinearRegression.

Questa ùn hè micca una lista cumpleta di funzioni, ci sò 500-600 in totale. Suggerimentu: tutte e funzioni in CliccaCasa hè in a tabella di u sistema (micca tutti sò documentati, ma tutti sò interessanti):

select * from system.functions order by name

CliccaCasa guarda assai infurmazione nantu à ellu stessu, cumpresu tabelle di log, query_log, trace log, log of operations with data blocks (part_log), logu di metrica, è log di sistema, chì generalmente scrive à u discu. Log metrics hè serie di tempu в CliccaCasa veramente CliccaCasa: A basa di dati stessu pò ghjucà un rolu serie di tempu basa di dati, cusì "divorendu" stessu.

Trasferimentu à ClickHouse: 3 anni dopu

Questu hè ancu una cosa unica - postu chì facemu un bonu travagliu per serie di tempu, perchè ùn pudemu micca almacenà tuttu ciò chì avemu bisognu in noi? Ùn avemu micca bisognu Prometheus, guardemu tuttu per noi. Cunnessu Grafana è ci monitoremu noi stessi. Tuttavia, se CliccaCasa cascate, ùn avemu micca vede perchè, perchè di solitu ùn facenu micca cusì.

Grande cluster o parechji picculi CliccaCasa

Cosa hè megliu - un grande cluster o parechji picculi ClickHouses? Approcciu tradiziunale à DWH hè un grande cluster in quale i circuiti sò attribuiti per ogni applicazione. Avemu ghjuntu à l'amministratore di a basa di dati - dà un diagramma, è ci anu datu unu:

Trasferimentu à ClickHouse: 3 anni dopu

В CliccaCasa pudete fà in modu diversu. Pudete fà a vostra propria applicazione CliccaCasa:

Trasferimentu à ClickHouse: 3 anni dopu

Ùn avemu più bisognu di u grande mostruoso DWH è amministratori intrattabili. Pudemu dà ogni applicazione u so propiu CliccaCasa, è u sviluppatore pò fà ellu stessu, postu chì CliccaCasa assai faciule d'installà è ùn richiede micca amministrazione cumplessa:

Trasferimentu à ClickHouse: 3 anni dopu

Ma si avemu assai CliccaCasa, è avete bisognu à stallà spessu, allora vulete automatizà stu prucessu. Per questu pudemu, per esempiu, aduprà Kubernetes и clickhouse- operatore. IN Kubernetes ClickHouse pudete mette "on-click": Puderaghju cliccà un buttone, eseguite u manifestu è a basa di dati hè pronta. Puderaghju immediatamente creà un diagramma, cumincià à caricate metriche quì, è in 5 minuti aghju un dashboard prontu Grafana. Hè cusì simplice!

Ciò à a fine?

Cusì, CliccaCasa - Questu :

  • Vutu. Tuttu u mondu sapi questu.
  • Simply. Un pocu cuntruversu, ma crede chì hè difficiule in furmazione, faciule in cumbattimentu. Se capisci cumu CliccaCasa funziona, allora tuttu hè assai simplice.
  • Universale. Hè adattatu per diversi scenarii: DWH, Serie Time, Log Storage. Ma ùn hè micca OLTP basa di dati, cusì ùn pruvate micca di fà inserti brevi è leghje quì.
  • Interessante. Probabilmente quellu chì travaglia cun CliccaCasa, hà sperimentatu assai mumenti interessanti in u sensu bonu è cattivu. Per esempiu, una nova versione hè ghjunta, tuttu hà cessatu di travaglià. O quandu avete luttatu cù un compitu per dui ghjorni, ma dopu avè fattu una quistione in u chat di Telegram, u compitu hè statu risoltu in dui minuti. O cum'è à a cunferenza à u rapportu di Lesha Milovidov, una screenshot da CliccaCasa rumpiu a trasmissione HighLoad ++. Stu tipu di cose succede tuttu u tempu è rende a nostra vita difficiule. CliccaCasa luminoso è interessante!

Pudete vede a presentazione ccà.

Trasferimentu à ClickHouse: 3 anni dopu

A riunione longu aspittatu di sviluppatori di sistemi high-load at HighLoad ++ si ferà u 9 è u 10 di nuvembre in Skolkovo. Infine, questu serà una cunferenza offline (ancu cù tutte e precauzioni in u locu), postu chì l'energia di HighLoad++ ùn pò micca esse imballata in linea.

Per a cunferenza, truvamu è vi mostremu casi nantu à e capacità massime di a tecnulugia: HighLoad++ era, hè è serà l'unicu locu induve pudete amparà in dui ghjorni cumu travaglia Facebook, Yandex, VKontakte, Google è Amazon.

Dopu avè tenutu i nostri scontri senza interruzzione dipoi u 2007, quist’annu ci scontru per a 14a volta. Duranti stu tempu, a cunferenza hè cresciutu 10 volte; l'annu passatu, l'avvenimentu chjave di l'industria hà riunitu 3339 participanti, 165 parlanti, rapporti è incontri, è 16 piste eranu in esecuzione simultaneamente.
L'annu passatu, ci eranu 20 autobus, 5280 litri di tè è caffè, 1650 litri di bevande di frutta è 10200 buttigli d'acqua. È altri 2640 kilogrammi di manciari, 16 piatti è 000 tazzi. Per via, cù i soldi raccolti da carta riciclata, avemu piantatu 25 piantini di quercia :)

Pudete cumprà i biglietti ccà, uttene nutizie nantu à a cunferenza - ccà, è parlà nant'à tutte e rete suciale: n'ambasciata, Facebook, Vkontakte и Twitter.

Source: www.habr.com

Add a comment