Pindah ka ClickHouse: 3 taun engké

Tilu taun ka pengker Viktor Tarnavsky sareng Alexey Milovidov ti Yandex di panggung HighLoad ++ bébéja, kumaha alus ClickHouse, sarta kumaha eta teu ngalambatkeun turun. Sarta dina tahap salajengna aya Alexander Zaitsev с laporan ngeunaan pindah ka clickhouse ti DBMS analitik sejen tur kalawan kacindekan yén clickhouse, tangtu, alus, tapi teu pisan merenah. Nalika di 2016 pausahaan LifeStreet, dimana Alexander lajeng digawé, ieu ngarobah sistem analitik multi-petabyte kana clickhouse, éta mangrupikeun "jalan bata konéng" anu pikaresepeun anu pinuh ku bahaya anu teu dipikanyaho - clickhouse harita mah siga tambang.

Tilu taun ka hareup clickhouse janten langkung saé - salami waktos Alexander ngadegkeun perusahaan Altinity, anu henteu ngan ukur ngabantosan jalma ngalih ka clickhouse puluhan proyék, tapi ogé ngaronjatkeun produk sorangan babarengan jeung kolega ti Yandex. Ayeuna clickhouse masih teu a stroll kaurus, tapi euweuh minefield a.

Alexander geus gawé bareng sistem disebarkeun saprak 2003, ngamekarkeun proyék badag dina MySQL, Oracle и Vertika. Dina panungtungan HighLoad ++ 2019 Alexander, salah sahiji panaratas ngagunakeun clickhouse, ngawartoskeun naon DBMS ieu ayeuna. Urang bakal diajar ngeunaan fitur utama clickhouse: kumaha eta béda ti sistem sejen tur dina kasus naon eta leuwih éféktif ngagunakeun éta. Ngagunakeun conto, urang bakal kasampak di prakték panganyarna na proyék-dites pikeun sistem wangunan dumasar kana clickhouse.


Retrospective: naon anu lumangsung 3 taun ka tukang

Tilu taun ka tukang urang mindahkeun pausahaan LifeStreet dina clickhouse ti pangkalan data analitik anu sanés, sareng migrasi analytics jaringan iklan sapertos kieu:

  • Juni 2016. Dina Open Source mucunghul clickhouse jeung proyék urang dimimitian;
  • Agustusan. Buktina Konsep: jaringan iklan badag, infrastruktur jeung 200-300 terabytes data;
  • Oktober. data produksi munggaran;
  • Désémber. Beban produk pinuh nyaéta 10-50 miliar acara per poé.
  • Juni 2017. migrasi suksés pamaké pikeun clickhouse, 2,5 petabytes data dina klaster 60 server.

Salila prosés migrasi, aya tumuwuh pamahaman éta clickhouse mangrupikeun sistem anu saé anu pikaresepeun pikeun dianggo, tapi ieu mangrupikeun proyék internal Yandex. Ku alatan éta, aya nuances: Yandex munggaran bakal nungkulan konsumén internal sorangan sarta ngan lajeng ku masarakat jeung kaperluan pamaké éksternal, sarta ClickHouse lajeng teu ngahontal tingkat perusahaan di loba wewengkon hanca. Éta sababna urang ngadegkeun Altinity dina Maret 2017 pikeun nyieun clickhouse malah leuwih gancang sarta leuwih merenah teu ukur keur Yandex, tapi ogé pikeun pamaké séjén. Sareng ayeuna urang:

  • Urang ngalatih jeung mantuan ngawangun solusi dumasar kana clickhouse ku kituna konsumén teu meunang kana kasulitan, sarta ku kituna solusi pamustunganana jalan;
  • Urang nyadiakeun rojongan 24/7 clickhouse- pamasangan;
  • Urang ngamekarkeun proyék ékosistem urang sorangan;
  • Urang aktip komitmen ka diri urang sorangan clickhouse, ngarespon kana pamundut ti pamaké nu hayang ningali fitur nu tangtu.

Sarta tangtu, urang mantuan ku pindah ka clickhouse с MySQL, Vertika, Oracle, Greenplum, Redshift jeung sistem lianna. Kami geus kalibet dina rupa-rupa gerakan, sarta aranjeunna sadayana geus suksés.

Pindah ka ClickHouse: 3 taun engké

Naha pindah ka clickhouse

Teu ngalambatkeun! Ieu alesan utama. clickhouse - database gancang pisan pikeun skenario béda:

Pindah ka ClickHouse: 3 taun engké

Tanda kutip acak tina jalma anu parantos lami damel sareng jalma clickhouse.

Skalabilitas. Dina sababaraha database séjén anjeun bisa ngahontal kinerja alus dina hiji sapotong hardware, tapi clickhouse Anjeun tiasa skala teu ukur vertikal, tapi ogé horizontal, saukur ku nambahkeun server. Sagalana teu jalan sakumaha mulus sakumaha urang hoyong, tapi jalan. Anjeun tiasa ngalegaan sistem nalika bisnis anjeun tumbuh. Kadé urang teu diwatesan ku solusi ayeuna sarta salawasna aya poténsi pikeun ngembangkeun.

Portability. Henteu aya kantétan kana hiji hal. Contona, kalawan Amazon RedShift Hésé pindah ka mana waé. A clickhouse Anjeun tiasa install dina laptop anjeun, server, nyebarkeun ka awan, buka Kubernetes - teu aya larangan dina operasi infrastruktur. Ieu merenah pikeun sarerea, sarta ieu mangrupa kaunggulan badag yén loba database sarupa lianna teu bisa boast of.

Kalenturan. clickhouse teu eureun di hiji hal, contona, Yandex.Metrica, tapi tumuwuh sarta dipaké dina beuki loba proyék béda jeung industri. Éta tiasa dilegaan ku nambihan kamampuan énggal pikeun ngarengsekeun masalah énggal. Salaku conto, dipercaya yén nyimpen log dina pangkalan data mangrupikeun kabiasaan anu goréng, ku kituna aranjeunna sumping Elasticsearch. Tapi berkat kalenturan clickhouse, Anjeun oge bisa nyimpen log di dinya, sarta mindeng ieu malah leuwih hade tinimbang di Elasticsearch - at clickhouse ieu merlukeun 10 kali kirang beusi.

Gratis Open Source. Anjeun teu kudu mayar nanaon. Teu perlu negotiate idin pikeun masang sistem dina laptop Anjeun atawa server. Taya waragad disumputkeun. Dina waktos anu sami, teu aya téknologi database Open Source sanés anu tiasa bersaing gancang clickhouse. MySQL, MariaDB, Greenplum - aranjeunna sadayana langkung laun.

Komunitas, drive jeung kabungahan... Kagungan clickhouse komunitas unggulan: meetups, obrolan jeung Alexey Milovidov, anu ngeusi batre urang sadayana kalawan énergi jeung optimism na.

Pindah ka ClickHouse

Pikeun indit ka clickhouse pikeun sababaraha alesan, anjeun ngan butuh tilu hal:

  • Ngartos watesan clickhouse sareng naon anu henteu cocog.
  • Mangpaatkeun téhnologi jeung kaunggulan na greatest.
  • ékspérimén. Malah ngarti kumaha gawéna clickhouse, Teu salawasna mungkin keur prediksi iraha eta bakal leuwih gancang, iraha eta bakal laun, iraha eta bakal leuwih alus, jeung iraha eta bakal leuwih goreng. Ku kituna coba eta.

Masalah pindah

Aya ngan hiji "tapi": lamun pindah ka clickhouse ti hal sejenna, lajeng biasana hal mana anu salah. Kami biasa sababaraha prakték sareng hal anu dianggo dina database favorit urang. Contona, saha gawé bareng SQL-databases mertimbangkeun set handap fungsi wajib:

  • transaksi;
  • kawatesanan;
  • konsistensi;
  • indéks;
  • UPDATE/HAPUS;
  • NULLs;
  • milidetik;
  • tipe casts otomatis;
  • sababaraha gabung;
  • partisi wenang;
  • parabot manajemén klaster.

Rekrutmen wajib, tapi tilu taun ka pengker di clickhouse Euweuh sahiji fungsi ieu sadia! Ayeuna kirang ti satengah tina naon anu teu dilaksanakeun tetep: transaksi, konstrain, Konsistensi, milliseconds sarta tipe casting.

Jeung hal utama anu di clickhouse sababaraha prakték sareng pendekatan standar henteu tiasa dianggo atanapi béda-béda ti anu biasa. Sagalana nu nembongan dina clickhouse, pakait jeung "ClickHouse cara", nyaéta. fungsi béda ti database séjén. Salaku conto:

  • Indexes teu dipilih, tapi skipped.
  • UPDATE/HAPUS teu sinkron, tapi asynchronous.
  • Aya sababaraha gabung, tapi euweuh Nu Ngarencana query. Kumaha aranjeunna teras dilaksanakeun sacara umum henteu jelas pisan pikeun jalma-jalma ti dunya database.

Skrip ClickHouse

Dina 1960, hiji matematikawan Amérika asal Hungaria Wigner EP nulis artikel "Éféktivitas anu teu munasabah tina matematika dina élmu alam"" The Incomprehensible Effectiveness of Mathematics in the Natural Sciences ") yén dunya sabudeureun urang pikeun sababaraha alesan ogé digambarkeun ku hukum matematik. Matematika mangrupa élmu abstrak, sarta hukum-hukum fisik anu ditepikeun dina wangun matématika teu pati penting, jeung Wigner EP stressed yén ieu pisan aneh.

Tina sudut pandang kuring, clickhouse - anéh sarua. Pikeun rephrase Wigner, urang bisa nyebutkeun kieu: efisiensi inconceivable nyaeta pikaheraneun clickhouse dina rupa-rupa aplikasi analitik!

Pindah ka ClickHouse: 3 taun engké

Contona, hayu urang nyandak Gudang Data Real-Time, dimana data dimuat ampir terus-terusan. Simkuring hoyong nampi requests ti eta kalawan reureuh kadua. Mangga - anggo clickhouse, sabab ieu skenario eta dirancang pikeun. clickhouse Ieu persis kumaha dianggo henteu ngan ukur dina wéb, tapi ogé dina pamasaran sareng analitik kauangan, AdTech, oge di deteksi panipuann. DI Real-time Gudang Data a skéma terstruktur kompléks kawas "béntang" atawa "snowflake" dipaké, loba tabel kalawan gabung (kadang-kadang sababaraha), sarta data biasana disimpen sarta dirobah dina sababaraha sistem.

Hayu urang nyandak skenario anu sanés - Runtuyan waktos: ngawaskeun alat, jaringan, statistik pamakean, Internét mahluk. Di dieu urang sapatemon acara cukup basajan maréntahkeun dina waktu. clickhouse asalna teu dikembangkeun pikeun ieu, tapi geus ditémbongkeun sorangan gawéna ogé, naha nu mangrupa pamakéan pausahaan badag clickhouse salaku gudang pikeun ngawas informasi. Pikeun ngajalajah naha éta cocog clickhouse pikeun time-runtuyan, urang dijieun patokan dumasar kana pendekatan jeung hasil InfluxDB и TimescaleDB - husus runtuyan waktos pangkalan data. Tétélayen clickhouse, sanajan tanpa optimasi pikeun tugas sapertos kitu, meunang dina widang asing:

Pindah ka ClickHouse: 3 taun engké

В runtuyan waktos Biasana tabel sempit dipaké - sababaraha kolom leutik. Seueur data tiasa asalna tina ngawaskeun-jutaan rékaman per detik-sareng biasana datang dina ledakan leutik (langsung streaming). Ku alatan éta, hiji skrip sisipan béda diperlukeun, sarta queries sorangan boga specifics sorangan.

Manajemén log. Ngumpulkeun log kana database biasana goréng, tapi clickhouse ieu bisa dipigawé kalayan sababaraha komentar sakumaha ditétélakeun di luhur. Loba pausahaan make clickhouse persis pikeun tujuan ieu. Dina hal ieu, urang ngagunakeun tabel lega datar dimana urang nyimpen sakabéh log (contona, dina formulir JSON), atawa potong buah. Data biasana dimuat dina bets badag (file), sarta kami neangan ku sababaraha widang.

Pikeun unggal fungsi ieu, pangkalan data khusus biasana dianggo. clickhouse hiji bisa ngalakukeun eta sadayana tur jadi ogé yén éta outperforms aranjeunna. Hayu urang ayeuna nempo leuwih deukeut runtuyan waktos skenario, jeung kumaha carana "masak" bener clickhouse pikeun skenario ieu.

Runtuyan waktos

Ayeuna ieu skenario utama nu clickhouse dianggap solusi baku. Runtuyan waktos nyaéta sakumpulan kajadian anu diurutkeun dina waktuna, ngagambarkeun parobahan dina sababaraha prosés kana waktu. Salaku conto, ieu tiasa janten denyut jantung per dinten atanapi jumlah prosés dina sistem. Sagalana nu mere waktos ticks kalawan sababaraha dimensi nyaeta runtuyan waktos:

Pindah ka ClickHouse: 3 taun engké

Kalolobaan jenis ieu acara asalna tina monitoring. Ieu tiasa henteu ngan ukur ngawaskeun wéb, tapi ogé alat nyata: mobil, sistem industri, IoT, pabrik atawa taksi unmanned, dina kalapa nu Yandex geus nempatkeun clickhouse-server.

Contona, aya pausahaan anu ngumpulkeun data ti kapal. Unggal sababaraha detik, sensor dina kapal wadahna ngirimkeun ratusan ukuran béda. Insinyur ngulik aranjeunna, ngawangun modél sareng nyobian ngartos kumaha éfisién wadahna dianggo, sabab kapal wadahna henteu kedah dianggurkeun sadetik. Sagala downtime nyaéta leungitna duit, jadi hal anu penting pikeun ngaduga jalur ambéh stoppages anu minimal.

Kiwari aya tumuwuhna basis data husus nu ngukur runtuyan waktos. Dina situs DB-Mesin Basis data anu béda-béda kumaha waé réngking, sareng anjeun tiasa ningali dumasar kana jinisna:

Pindah ka ClickHouse: 3 taun engké

Jenis anu paling gancang ngembang nyaéta runtuyan waktus. database grafik ogé tumuwuh, tapi runtuyan waktus geus tumuwuh gancang leuwih sababaraha taun katukang. Wawakil has kulawarga ieu database nyaéta InfluxDB, Prometheus, KDB, TimescaleDB (diwangun dina PostgreSQL), solusi ti Amazon. clickhouse bisa dipaké di dieu teuing, sarta dipaké. Hayu atuh masihan anjeun sababaraha conto umum.

Salah sahiji panaratas nyaéta perusahaan CloudFlare (CDN-panyadia). Aranjeunna ngawas aranjeunna CDN через clickhouse (DNS-paménta, HTTP-queries) kalayan beban anu ageung - 6 juta acara per detik. Sagalana ngaliwatan Kafka, nuju ka clickhouse, nu nyadiakeun kasempetan pikeun nempo dashboards kajadian dina sistem sacara real waktu.

Comcast - salah sahiji pamingpin telekomunikasi di AS: Internet, televisi digital, teleponi. Aranjeunna nyiptakeun sistem kontrol anu sami CDN jero Open Source proyékna Kontrol Lalu Lintas Apache pikeun digawe sareng data badag Anjeun. clickhouse dipaké salaku backend pikeun analytics.

percona diwangun dina clickhouse jero anjeun PMMpikeun nyimpen ngawaskeun rupa-rupa MySQL.

Sarat husus

Basis data séri waktos gaduh syarat khusus sorangan.

  • Selapkeun gancang ti seueur agén. Urang kedah nyelapkeun data tina seueur aliran gancang pisan. clickhouse Éta ngalakukeun ieu ogé kusabab sadaya sisipanna henteu ngahalangan. Sakur ngasupkeun mangrupakeun file anyar dina disk, sarta inserts leutik bisa buffered dina hiji atawa cara séjén. DI clickhouse Éta leuwih alus pikeun nyelapkeun data dina bets badag tinimbang hiji baris dina hiji waktu.
  • Skéma fléksibel. The runtuyan waktos urang biasana henteu terang struktur data lengkep. Kasebut nyaéta dimungkinkeun pikeun ngawangun sistem monitoring pikeun aplikasi husus, tapi lajeng hese ngagunakeun eta pikeun aplikasi sejen. Ieu merlukeun skéma leuwih fleksibel. clickhouse, ngidinan Anjeun pikeun ngalakukeun ieu, sanajan eta mangrupakeun basa diketik kuat.
  • Panyimpen cekap sareng hilap data. Biasana di runtuyan waktos jumlah badag data, jadi kudu disimpen salaku éfisién mungkin. Contona, di InfluxDB komprési alus nyaeta fitur utama na. Tapi sagigireun nyimpen, Anjeun ogé kudu bisa "poho" data heubeul jeung ngalakukeun sababaraha jenis downsampling - cacah otomatis tina agrégat.
  • Patarosan gancang dina data aggregated. Kadangkala kacida metot pikeun nempo 5 menit panungtungan kalawan akurasi milliseconds, tapi dina menit data bulanan atawa granularity kadua bisa jadi teu diperlukeun - statistik umum cukup. Rojongan nanaon ieu diperlukeun, disebutkeun hiji pamundut pikeun 3 bulan bakal butuh waktu anu pohara lila pikeun ngalengkepan malah di clickhouse.
  • Paménta sapertos"titik panungtungan, sakumaha tina». Ieu has pikeun runtuyan waktos queries: tingali ukuran panungtungan atawa kaayaan sistem dina momen dina jangka waktu nu t. Ieu sanés patarosan anu pikaresepeun pikeun pangkalan data, tapi anjeun ogé kedah tiasa ngalaksanakeunana.
  • "Gluing" runtuyan waktu. Runtuyan waktos mangrupa runtuyan waktu. Mun aya dua runtuyan waktu, aranjeunna mindeng kudu disambungkeun tur correlated. Teu merenah pikeun ngalakukeun ieu dina sakabéh basis data, utamana jeung runtuyan waktu unaligned: ieu sababaraha titik waktu, aya batur. Anjeun tiasa mertimbangkeun rata, tapi ujug-ujug aya kénéh liang aya, jadi teu jelas.

Hayu urang tingali kumaha sarat ieu kaeusi dina clickhouse.

Skéma

В clickhouse skéma pikeun runtuyan waktos tiasa dilakukeun ku cara anu béda-béda, gumantung kana tingkat kateraturan data. Kasebut nyaéta dimungkinkeun pikeun ngawangun sistem dina data biasa nalika urang terang sadayana métrik sateuacanna. Contona, kuring ngalakukeun ieu CloudFlare kalawan ngawaskeun CDN mangrupa sistem ogé dioptimalkeun. Anjeun tiasa ngawangun sistem anu langkung umum anu ngawas sadayana infrastruktur sareng sababaraha jasa. Dina kasus data anu henteu teratur, urang henteu terang sateuacanna naon anu urang pantau - sareng ieu sigana anu paling umum.

Data biasa. Kolom. Skéma saderhana - kolom sareng jinis anu diperyogikeun:

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

Ieu mangrupikeun méja biasa anu ngawas sababaraha jinis kagiatan ngamuat sistem (nu make, sistim, teu jalan, alus). Basajan jeung merenah, tapi teu fléksibel. Upami urang hoyong skéma anu langkung fleksibel, maka urang tiasa nganggo arrays.

Data henteu teratur. 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 ...

struktur Sarangap aya dua susunan: metrics.ngaran и métrik.nilai. Di dieu anjeun tiasa nyimpen data ngawaskeun sawenang-wenang sapertos sakumpulan nami sareng sajumlah pangukuran pikeun unggal kajadian. Pikeun optimasi salajengna, tinimbang hiji struktur sapertos, anjeun tiasa ngadamel sababaraha. Contona, hiji keur ngambang-nilai, sejen - pikeun int-hartina sabab int Abdi hoyong nyimpen langkung éfisién.

Tapi struktur sapertos kitu langkung hese diaksés. Anjeun kedah nganggo konstruksi khusus, nganggo pungsi khusus pikeun narik nilai-nilai indéks heula sareng teras susunan:

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

Tapi tetep jalan rada gancang. Cara séjén pikeun nyimpen data anu henteu teratur nyaéta ku baris.

Data henteu teratur. Senar. Dina metoda tradisional ieu, tanpa arrays, ngaran jeung nilai disimpen sakaligus. Upami 5 pangukuran asalna tina hiji alat sakaligus, 000 baris dihasilkeun dina pangkalan data:

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 copes kalawan ieu - eta boga ekstensi husus clickhouse SQL. Salaku conto max Lamun - fungsi husus nu ngitung maksimum ku métrik lamun sababaraha kaayaan geus patepung. Anjeun tiasa nyerat sababaraha ekspresi sapertos dina hiji pamundut sareng langsung ngitung nilai pikeun sababaraha métrik.

Hayu urang ngabandingkeun tilu pendekatan:

Pindah ka ClickHouse: 3 taun engké

wincikan

Di dieu kuring parantos nambihan "Ukuran Data Disk" kanggo sababaraha set data tés. Dina kasus kolom, urang boga ukuran data pangleutikna: komprési maksimum, speed query maksimum, tapi urang mayar ku kudu ngarekam sagalana sakaligus.

Dina kasus arrays, sagalana geus saeutik goréng. Data masih dikomprés saé sareng pola anu henteu teratur tiasa disimpen. Tapi clickhouse - database columnar, sarta lamun urang mimitian nyimpen sagalana dina Asép Sunandar Sunarya, robah jadi hiji baris, sarta kami mayar kalenturan kalawan efisiensi. Pikeun operasi naon waé, anjeun kedah maca sadayana kana mémori, teras milari unsur anu dipikahoyong di jerona - sareng upami susunanna tumbuh, maka lajuna turun.

Dina salah sahiji pausahaan anu ngagunakeun pendekatan ieu (contona, Uber), arrays dipotong kana potongan 128 elemen. Data tina sababaraha rébu métrik kalayan volume 200 TB data / dinten disimpen henteu dina hiji Asép Sunandar Sunarya, tapi dina 10 atanapi 30 susunan kalayan logika panyimpenan khusus.

Pendekatan pangbasajanna nyaéta nganggo senar. Tapi data anu kirang dikomprés, ukuran tabel badag, komo lamun queries dumasar kana sababaraha metrics, ClickHouse teu dianggo optimal.

Skéma hibrid

Hayu urang nganggap yen urang geus milih hiji sirkuit Asép Sunandar Sunarya. Tapi upami urang terang yén kalolobaan dasbor urang ngan ukur nunjukkeun métrik pangguna sareng sistem, urang ogé tiasa ngawujudkeun métrik ieu kana kolom tina susunan dina tingkat méja ku cara kieu:

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

Nalika ngasupkeun clickhouse bakal otomatis ngitung aranjeunna. Ku cara kieu anjeun tiasa ngagabungkeun bisnis sareng pelesir: skéma éta fleksibel sareng umum, tapi kami narik kolom anu paling sering dianggo. Catet yén ieu teu merlukeun ngarobah sisipan na ETLnu terus nyelapkeun arrays kana tabél. Urang ngan ngalakukeun Ngarobah méja, nambihan sababaraha spiker sareng kami ngagaduhan skéma hibrida sareng langkung gancang anu anjeun tiasa langsung dianggo langsung.

Codecs jeung komprési

keur runtuyan waktos Éta penting kumaha anjeun ngepak data sabab jumlah inpormasi tiasa ageung pisan. DI clickhouse Aya sakumpulan parabot pikeun ngahontal éfék komprési 1:10, 1:20, sarta kadangkala leuwih. Ieu ngandung harti yén 1 TB data unpacked dina disk nyokot 50-100 GB. Ukuran anu langkung alit saé, data tiasa dibaca sareng diolah langkung gancang.

Pikeun ngahontal tingkat komprési anu luhur, clickhouse ngarojong codec di handap ieu:

Pindah ka ClickHouse: 3 taun engké

tabél conto:

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

Di dieu urang nangtukeun codec nu GandaDelta dina hiji kasus, dina kadua - gorila, sarta kami pasti bakal nambahan deui LZ4 komprési. Hasilna, ukuran data dina disk dikirangan pisan:

Pindah ka ClickHouse: 3 taun engké

Ieu nunjukkeun sabaraha rohangan anu dibutuhkeun ku data anu sami, tapi nganggo codec sareng kompresi anu béda:

  • dina file GZIP dina disk;
  • di ClickHouse tanpa codec, tapi kalayan komprési ZSTD;
  • di ClickHouse sareng codec sareng komprési LZ4 sareng ZSTD.

Ieu bisa ditempo yén tabel kalawan codecs nyokot up teuing kirang spasi.

Ukuran ukuran

Teu kurang pentingna milih tipe data bener:

Pindah ka ClickHouse: 3 taun engké

Dina sagala conto di luhur kuring dipaké Ngambang64. Tapi lamun urang milih Ngambang32, teras éta bakal langkung saé. Ieu ogé dibuktikeun ku guys ti Perkona dina artikel numbu di luhur. Kadé ngagunakeun tipe paling kompak nu cocog pikeun tugas: malah kirang pikeun ukuran disk ti speed query. clickhouse sensitip pisan kana ieu.

Upami anjeun tiasa nganggo int32 tibatan int64, teras ngarepkeun paningkatan ampir dua kali ganda dina pagelaran. Data nyokot kirang memori, sarta sakabeh "aritmetika" jalan leuwih gancang. clickhouse sacara internal mangrupikeun sistem anu diketik sacara ketat; éta ngagunakeun maksimal sadaya kemungkinan anu disayogikeun ku sistem modern.

Aggregation jeung Tampilan Bahan

Agregasi sareng pintonan materialized ngamungkinkeun anjeun nyiptakeun agrégat pikeun kasempetan anu béda:

Pindah ka ClickHouse: 3 taun engké

Contona, Anjeun bisa jadi boga data sumber non-agregated, sarta anjeun bisa ngagantelkeun rupa-rupa pintonan materialized ka aranjeunna kalayan jumlah otomatis ngaliwatan mesin husus. SummingMergeTree (SMT). SMT mangrupa struktur data aggregating husus nu ngitung aggregates otomatis. Data atah diselapkeun kana databés, éta otomatis aggregated, sarta dashboards bisa langsung dipaké dina eta.

TTL - "poho" data heubeul

Kumaha "poho" data anu henteu diperyogikeun deui? clickhouse terang kumaha ngalakukeun ieu. Nalika nyieun tabel, Anjeun bisa nangtukeun TTL éksprési: contona, yén urang nyimpen data menit pikeun hiji poé, data poéan salila 30 poé, sarta pernah noel data mingguan atawa bulanan:

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-tier - ngabagi data dina disk

Nyandak gagasan ieu salajengna, data bisa disimpen dina clickhouse di tempat anu béda. Anggap urang hoyong nyimpen data panas pikeun minggu panungtungan on lokal pisan gancang SSD, sarta kami nempatkeun leuwih data sajarah di tempat séjén. DI clickhouse ieu ayeuna mungkin:

Pindah ka ClickHouse: 3 taun engké

Anjeun tiasa ngonpigurasikeun kawijakan panyimpenan (kawijakan gudang) Janten clickhouse bakal otomatis nransper data kana kaayaan nu tangtu ka gudang séjén.

Tapi éta henteu sadayana. Dina tingkat tabel husus, anjeun bisa nangtukeun aturan pikeun persis lamun data mana kana gudang tiis. Salaku conto, data disimpen dina disk anu gancang pisan salami 7 dinten, sareng sadayana anu langkung lami ditransferkeun ka anu lambat. Ieu alus sabab ngidinan Anjeun pikeun ngajaga sistem dina kinerja maksimum, bari ngadalikeun biaya jeung teu wasting duit dina data tiis:

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

Fitur unik clickhouse

Dina ampir sagalana clickhouse Aya "highlights" sapertos kitu, tapi aranjeunna diimbangi ku eksklusivitas - hal anu henteu aya dina pangkalan data sanés. Contona, ieu sababaraha fitur unik clickhouse:

  • Asép. The clickhouse rojongan pohara alus pikeun arrays, kitu ogé kamampuhan pikeun ngalakukeun itungan kompléks on aranjeunna.
  • Ngahijikeun Struktur Data. Ieu mangrupikeun salah sahiji "fitur pembunuh" clickhouse. Sanaos kanyataan yén jalma-jalma ti Yandex nyarios yén urang henteu hoyong ngahijikeun data, sadayana agrégat dina clickhouse, sabab gancang sareng merenah.
  • Témbongkeun Materialized. Babarengan struktur data aggregating, pintonan materialized ngidinan Anjeun pikeun nyieun merenah langsung aggregation.
  • ClickHouse SQL. Ieu extension basa SQL kalawan sababaraha fitur tambahan sarta ekslusif anu ngan sadia dina clickhouse. Saméméhna, éta kawas ékspansi di hiji sisi, sarta disadvantage di sisi séjén. Ayeuna ampir kabéh kalemahan dibandingkeun SQL 92 urang dipiceun, ayeuna ngan hiji extension.
  • lambda– éksprési. Éta kénéh dina database wae?
  • ML-rojongan. Ieu sayogi dina pangkalan data anu béda, aya anu langkung saé, aya anu langkung parah.
  • open source. Urang tiasa ngalegaan clickhouse babarengan. Ayeuna di clickhouse kira-kira 500 kontributor, sarta jumlah ieu terus tumuwuh.

Patarosan rumit

В clickhouse aya loba cara pikeun ngalakukeun hal anu sarua. Contona, anjeun bisa balik nilai panungtungan ti méja dina tilu cara béda pikeun CPU (Aya ogé kaopat, tapi malah leuwih aheng).

Anu kahiji nunjukkeun kumaha merenah pikeun ngalakukeunana clickhouse queries nalika rék mariksa éta tupel dikandung dina subquery. Ieu mangrupikeun hal anu kuring sono sacara pribadi dina pangkalan data sanés. Upami kuring hoyong ngabandingkeun hiji hal sareng subquery, maka dina database sanés ngan ukur skalar anu tiasa dibandingkeun, tapi pikeun sababaraha kolom kuring kedah nyerat. gabung. The clickhouse anjeun tiasa nganggo tuple:

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

Metodeu kadua ngalakukeun hal anu sami tapi nganggo fungsi agrégat argMax:

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

В clickhouse Aya sababaraha belasan fungsi agrégat, sarta lamun ngagunakeun combinators, nurutkeun hukum kombinatorika anjeun bakal meunang ngeunaan sarébu di antarana. ArgMax - salah sahiji fungsi nu ngitung nilai maksimum: pamundut balik nilai usage_user, dimana nilai maksimum kahontal dijieun_di:

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

ASOF gabung - "gluing" barisan kalawan waktu béda. Ieu fitur unik pikeun database nu ngan sadia di kdb+. Lamun aya dua runtuyan waktu kalawan waktu béda, ASOF gabung ngidinan Anjeun pikeun mindahkeun sarta ngagabungkeun aranjeunna dina hiji pamundut. Pikeun unggal nilai dina hiji runtuyan waktu, nilai pangdeukeutna di séjén kapanggih, sarta aranjeunna balik dina garis sarua:

Pindah ka ClickHouse: 3 taun engké

Fungsi Analitik

Dina standar SQL-2003 anjeun tiasa nyerat sapertos kieu:

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 Anjeun teu tiasa ngalakukeun éta - éta henteu ngadukung standar SQL-2003 sarta meureun moal ngalakukeun eta. Gantina, di clickhouse Biasana nyerat sapertos kieu:

Pindah ka ClickHouse: 3 taun engké

Kuring jangji lambdas - ieu aranjeunna!

Ieu mangrupikeun analog tina query analitik dina standar SQL-2003: anjeunna ngitung bédana antara dua timestamp, lilana, angka ordinal - sagalana nu biasana urang anggap fungsi analitik. DI clickhouse Urang cacah aranjeunna ngaliwatan arrays: kahiji urang ambruk data kana Asép Sunandar Sunarya, sanggeus éta urang ngalakukeun sagalana urang hoyong on Asép Sunandar Sunarya, lajeng urang dilegakeun deui. Teu pisan merenah, merlukeun cinta programming hanca di minimum, tapi pisan fléksibel.

Fitur husus

Sajaba ti éta, di clickhouse loba fungsi husus. Contona, kumaha nangtukeun sabaraha sesi anu lumangsung sakaligus? Tugas ngawaskeun khas nyaéta nangtukeun beban maksimal kalayan hiji pamundut. DI clickhouse Aya fungsi husus pikeun tujuan ieu:

Pindah ka ClickHouse: 3 taun engké

Sacara umum, ClickHouse ngagaduhan fungsi khusus pikeun seueur tujuan:

  • runningDifference, runningAccumulate, tatangga;
  • sumMap(konci, nilai);
  • timeSeriesGroupSum(uid, timestamp, nilai);
  • timeSeriesGroupRateSum(uid, timestamp, nilai);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • Kalayan eusian / kalayan dasi;
  • basajanLinearRegression, stochasticLinearRegression.

Ieu sanes daptar lengkep fungsi, aya 500-600 total. Pitunjuk: sadaya fungsi dina clickhouse aya dina tabel sistem (henteu sadayana didokumentasikeun, tapi sadayana pikaresepeun):

select * from system.functions order by name

clickhouse eta nyimpen loba informasi ngeunaan dirina, kaasup tabél log, query_log, trace log, log operasi kalayan blok data (bagian_log), log métrik, sareng log sistem, anu biasana nyerat kana disk. Log métrik nyaéta runtuyan waktos в clickhouse kanyataanna clickhouse: Database sorangan bisa maénkeun peran hiji runtuyan waktos database, sahingga "devouring" sorangan.

Pindah ka ClickHouse: 3 taun engké

Ieu ogé hiji hal unik - saprak urang ngalakukeun pakasaban alus pikeun runtuyan waktos, naha urang teu bisa nyimpen sagalana urang butuh dina diri? Urang teu butuh Prometheus, urang nyimpen sagalana ka diri urang sorangan. Nyambung grafana sarta kami ngawas diri. Sanajan kitu, lamun clickhouse ragrag, urang moal ningali naha, ngarah biasana teu ngalakukeun eta.

Kluster ageung atanapi seueur anu alit clickhouse

Naon anu langkung saé - hiji klaster ageung atanapi seueur ClickHouses alit? Pendekatan tradisional pikeun DWH mangrupakeun klaster badag nu sirkuit disadiakeun pikeun tiap aplikasi. Kami sumping ka administrator database - pasihan kami diagram, sareng aranjeunna masihan kami:

Pindah ka ClickHouse: 3 taun engké

В clickhouse Anjeun tiasa ngalakukeun eta béda. Anjeun tiasa ngadamel unggal aplikasi anjeun nyalira clickhouse:

Pindah ka ClickHouse: 3 taun engké

Kami henteu peryogi anu ageung ageung deui DWH jeung admin intractable. Urang tiasa masihan unggal aplikasi sorangan clickhouse, sarta pamekar bisa ngalakukeun hal eta sorangan, saprak clickhouse Gampang pisan dipasang sareng henteu ngabutuhkeun administrasi anu kompleks:

Pindah ka ClickHouse: 3 taun engké

Tapi lamun urang geus loba clickhouse, sareng anjeun kedah sering masang, teras anjeun hoyong ngajadikeun otomatis prosés ieu. Pikeun ieu urang tiasa, contona, ngagunakeun Kubernetes и clickhouse- operator. DI Kubernetes ClickHouse anjeun tiasa nempatkeun éta "on-klik": Abdi tiasa klik tombol a, ngajalankeun manifest jeung database geus siap. Abdi tiasa langsung ngadamel diagram, mimitian unggah métrik di dinya, sareng dina 5 menit kuring parantos siap dasbor grafana. Ieu jadi basajan!

Naon hasilna?

Ku kituna, clickhouse - Ieu:

  • Gancang. Sadayana terang ieu.
  • adil. A saeutik kontroversial, tapi kuring yakin yén hese dina latihan, gampang dina ngempur. Lamun ngarti kumaha clickhouse gawéna, lajeng sagalana basajan pisan.
  • Sacara universal. Éta cocog pikeun skenario anu béda: DWH, Time Series, Log Panyimpenan. Tapi henteu OLTP database, jadi ulah coba mun ngalakukeun inserts pondok tur maos dinya.
  • Lucuna. Meureun nu gawé bareng clickhouse, ngalaman loba moments metot dina rasa alus jeung goréng. Contona, kaluar kaluaran anyar, sagalana eureun gawé. Atanapi nalika anjeun bajoang sareng tugas salami dua dinten, tapi saatos naroskeun patarosan dina obrolan Telegram, tugasna direngsekeun dina dua menit. Atawa kawas dina konferensi di laporan Lesha Milovidov, a screenshot ti clickhouse peupeus siaran HighLoad ++. Hal-hal sapertos kitu lumangsung unggal waktos sareng ngajantenkeun kahirupan urang susah. clickhouse caang jeung metot!

Anjeun tiasa nonton presentasi di dieu.

Pindah ka ClickHouse: 3 taun engké

Pasamoan lila-tunggu ti pamekar sistem-beban tinggi di HighLoad ++ bakal lumangsung dina 9 jeung 10 Nopémber di Skolkovo. Tungtungna, ieu bakal konferensi offline (sanajan kalayan sagala precautions), saprak énergi HighLoad ++ teu bisa rangkep online.

Pikeun konférénsi éta, kami mendakan sareng nunjukkeun anjeun kasus ngeunaan kamampuan téknologi maksimal: HighLoad ++ éta, nyaéta sareng bakal janten hiji-hijina tempat dimana anjeun tiasa diajar dina dua dinten kumaha Facebook, Yandex, VKontakte, Google sareng Amazon damel.

Sanggeus ngayakeun rapat urang tanpa gangguan ti saprak 2007, taun ieu urang bakal papanggih pikeun 14 kali. Salila waktos ieu, konperénsi parantos ningkat 10 kali; taun ka tukang, acara industri konci ngahijikeun 3339 pamilon, 165 panyatur, laporan sareng patepang, sareng 16 lagu dijalankeun sakaligus.
Taun ka tukang aya 20 beus, 5280 liter teh jeung kopi, 1650 liter inuman buah jeung 10200 botol cai. Jeung deui 2640 kilogram dahareun, 16 piring jeung 000 cangkir. Ku jalan kitu, ku duit dikumpulkeun tina kertas daur ulang, urang melak 25 bibit ek :)

Anjeun tiasa mésér tikét di dieu, meunang warta ngeunaan konferensi - di dieu, sareng ngobrol dina sadaya jaringan sosial: telegram, Facebook, Vkontakte и Twitter.

sumber: www.habr.com

Tambahkeun komentar