Berpindah ke ClickHouse: 3 tahun kemudian

Tiga tahun lalu Viktor Tarnavsky dan Alexey Milovidov dari Yandex di atas pentas HighLoad ++ memberitahu, betapa bagusnya ClickHouse, dan bagaimana ia tidak perlahan. Dan pada peringkat seterusnya ada Alexander Zaitsev с laporan tentang berpindah ke Klik Rumah daripada DBMS analitikal yang lain dan dengan kesimpulan bahawa Klik Rumah, sudah tentu, baik, tetapi tidak begitu mudah. Apabila pada tahun 2016 syarikat LifeStreet, tempat Alexander bekerja ketika itu, sedang menukar sistem analitik berbilang petabait kepada Klik Rumah, ia adalah "jalan bata kuning" yang menarik yang penuh dengan bahaya yang tidak diketahui - Klik Rumah ketika itu ia kelihatan seperti ladang ranjau.

Tiga tahun kemudian Klik Rumah menjadi lebih baik - pada masa ini Alexander mengasaskan syarikat Altinity, yang bukan sahaja membantu orang berpindah ke Klik Rumah berpuluh-puluh projek, tetapi juga menambah baik produk itu sendiri bersama-sama dengan rakan sekerja dari Yandex. Sekarang Klik Rumah masih bukan jalan-jalan santai, tetapi bukan lagi ladang ranjau.

Alexander telah bekerja dengan sistem teragih sejak 2003, membangunkan projek besar pada MySQL, Oracle и Vertica. Pada yang terakhir HighLoad ++ 2019 Alexander, salah seorang perintis penggunaan Klik Rumah, memberitahu apakah DBMS ini sekarang. Kami akan belajar tentang ciri-ciri utama Klik Rumah: bagaimana ia berbeza daripada sistem lain dan dalam kes apakah ia lebih berkesan untuk menggunakannya. Menggunakan contoh, kita akan melihat amalan terkini dan teruji projek untuk membina sistem berdasarkan Klik Rumah.


Retrospektif: apa yang berlaku 3 tahun lalu

Tiga tahun lalu kami telah memindahkan syarikat itu LifeStreet pada Klik Rumah daripada pangkalan data analitik yang lain dan penghijrahan analitis rangkaian iklan kelihatan seperti ini:

  • Jun 2016. Dalam Sumber terbuka muncul Klik Rumah dan projek kami bermula;
  • Ogos Bukti konsep: rangkaian pengiklanan yang besar, infrastruktur dan 200-300 terabait data;
  • Oktober. Data pengeluaran pertama;
  • Disember. Muatan produk penuh ialah 10-50 bilion acara setiap hari.
  • Jun 2017. Berjaya penghijrahan pengguna ke Klik Rumah, 2,5 petabait data pada kelompok 60 pelayan.

Semasa proses migrasi, terdapat pemahaman yang semakin meningkat bahawa Klik Rumah adalah sistem yang baik yang menyenangkan untuk digunakan, tetapi ini adalah projek dalaman Yandex. Oleh itu, terdapat nuansa: Yandex mula-mula akan berurusan dengan pelanggan dalamannya sendiri dan hanya kemudian dengan komuniti dan keperluan pengguna luaran, dan ClickHouse kemudiannya tidak mencapai tahap perusahaan dalam banyak kawasan berfungsi. Itulah sebabnya kami mengasaskan Altinity pada Mac 2017 untuk membuat Klik Rumah lebih pantas dan lebih mudah bukan sahaja untuk Yandex, tetapi juga untuk pengguna lain. Dan sekarang kita:

  • Kami melatih dan membantu membina penyelesaian berdasarkan Klik Rumah supaya pelanggan tidak menghadapi masalah, dan supaya penyelesaian akhirnya berjaya;
  • Kami menyediakan sokongan 24/7 Klik Rumah- pemasangan;
  • Kami membangunkan projek ekosistem kami sendiri;
  • Kami secara aktif komited kepada diri sendiri Klik Rumah, membalas permintaan daripada pengguna yang ingin melihat ciri tertentu.

Dan sudah tentu, kami membantu dengan berpindah ke Klik Rumah с MySQL, Vertica, Oracle, Greenplum, Redshift dan sistem lain. Kami telah terlibat dalam pelbagai langkah, dan semuanya telah berjaya.

Berpindah ke ClickHouse: 3 tahun kemudian

Mengapa berpindah ke Klik Rumah

Tidak melambatkan! Ini adalah sebab utama. Klik Rumah - pangkalan data yang sangat pantas untuk senario yang berbeza:

Berpindah ke ClickHouse: 3 tahun kemudian

Petikan rawak daripada orang yang telah bekerja dengan orang untuk masa yang lama Klik Rumah.

Kebolehskalaan. Pada beberapa pangkalan data lain anda boleh mencapai prestasi yang baik pada satu perkakasan, tetapi Klik Rumah anda boleh skala bukan sahaja secara menegak, tetapi juga secara mendatar, hanya dengan menambah pelayan. Segala-galanya tidak berfungsi dengan lancar seperti yang kita mahu, tetapi ia berfungsi. Anda boleh mengembangkan sistem apabila perniagaan anda berkembang. Adalah penting bahawa kita tidak dihadkan oleh penyelesaian sekarang dan sentiasa ada potensi untuk pembangunan.

Mudah alih. Tidak ada keterikatan pada satu perkara. Contohnya, dengan Pergeseran Merah Amazon Sukar untuk bergerak ke suatu tempat. A Klik Rumah anda boleh memasangnya pada komputer riba anda, pelayan, gunakannya ke awan, pergi ke Kubernetes — tiada sekatan ke atas operasi infrastruktur. Ini mudah untuk semua orang, dan ini adalah kelebihan besar yang tidak boleh dibanggakan oleh banyak pangkalan data lain yang serupa.

Fleksibiliti. Klik Rumah tidak berhenti pada satu perkara, sebagai contoh, Yandex.Metrica, tetapi berkembang dan digunakan dalam lebih banyak projek dan industri yang berbeza. Ia boleh diperluaskan dengan menambah keupayaan baharu untuk menyelesaikan masalah baharu. Sebagai contoh, dipercayai bahawa menyimpan log dalam pangkalan data adalah adab yang tidak baik, jadi mereka datang dengan Elasticsearch. Tetapi terima kasih kepada fleksibiliti Klik Rumah, anda juga boleh menyimpan log di dalamnya, dan selalunya ini lebih baik daripada masuk Elasticsearch - pada Klik Rumah ini memerlukan 10 kali lebih sedikit besi.

Percuma Open Source. Anda tidak perlu membayar apa-apa. Tidak perlu berunding kebenaran untuk memasang sistem pada komputer riba atau pelayan anda. Tiada yuran tersembunyi. Pada masa yang sama, tiada teknologi pangkalan data Sumber Terbuka lain boleh bersaing dengan pantas Klik Rumah. MySQL, MariaDB, Greenplum - mereka semua lebih perlahan.

Komuniti, memandu dan menyeronokkan. Dalam Klik Rumah komuniti yang sangat baik: pertemuan, sembang dan Alexey Milovidov, yang memberi kita semua tenaga dan keyakinannya.

Berpindah ke ClickHouse

Untuk pergi ke Klik Rumah atas sebab tertentu, anda hanya memerlukan tiga perkara:

  • Fahami batasan Klik Rumah dan apa yang tidak sesuai.
  • Ambil kesempatan teknologi dan kekuatan terbesarnya.
  • Eksperimen. Malah memahami cara ia berfungsi Klik Rumah, tidak selalu mungkin untuk meramalkan bila ia akan menjadi lebih pantas, bila ia akan menjadi lebih perlahan, bila ia akan menjadi lebih baik, dan bila ia akan menjadi lebih teruk. Jadi cubalah.

Masalah bergerak

Hanya ada satu "tetapi": jika anda berpindah ke Klik Rumah daripada sesuatu yang lain, maka biasanya sesuatu yang tidak kena. Kami terbiasa dengan beberapa amalan dan perkara yang berfungsi dalam pangkalan data kegemaran kami. Contohnya, sesiapa yang bekerja dengannya SQPangkalan data L menganggap set fungsi berikut wajib:

  • urus niaga;
  • kekangan;
  • ketekalan;
  • indeks;
  • KEMASKINI / PADAM;
  • NULLs;
  • milisaat;
  • tuangan jenis automatik;
  • gabungan berbilang;
  • sekatan sewenang-wenangnya;
  • alat pengurusan kluster.

Pengambilan adalah wajib, tetapi tiga tahun lalu di Klik Rumah Tiada satu pun daripada fungsi ini tersedia! Kini tinggal kurang daripada separuh daripada perkara yang belum dilaksanakan: transaksi, kekangan, Ketekalan, milisaat dan penghantaran jenis.

Dan perkara utama ialah dalam Klik Rumah beberapa amalan dan pendekatan standard tidak berfungsi atau berfungsi secara berbeza daripada yang biasa kita lakukan. Semua yang muncul dalam Klik Rumah, sepadan dengan "Cara ClickHouse", iaitu. fungsi berbeza daripada pangkalan data lain. Sebagai contoh:

  • Indeks tidak dipilih, tetapi dilangkau.
  • KEMASKINI / PADAM bukan segerak, tetapi tak segerak.
  • Terdapat berbilang gabungan, tetapi tiada perancang pertanyaan. Bagaimana ia kemudiannya dilakukan secara amnya tidak begitu jelas kepada orang dari dunia pangkalan data.

Skrip ClickHouse

Pada tahun 1960, seorang ahli matematik Amerika yang berasal dari Hungary Wigner E. P. menulis artikel "Keberkesanan matematik yang tidak munasabah dalam sains semula jadi” (“Keberkesanan Matematik yang Tidak Dapat Difahami dalam Sains Semula Jadi”) bahawa dunia di sekeliling kita atas sebab tertentu digambarkan dengan baik oleh undang-undang matematik. Matematik ialah sains abstrak, dan undang-undang fizik yang dinyatakan dalam bentuk matematik bukanlah perkara remeh, dan Wigner E. P. menegaskan bahawa ini adalah sangat pelik.

Dari sudut pandangan saya, Klik Rumah - keanehan yang sama. Untuk frasa semula Wigner, kita boleh mengatakan ini: kecekapan yang tidak dapat dibayangkan adalah menakjubkan Klik Rumah dalam pelbagai jenis aplikasi analisis!

Berpindah ke ClickHouse: 3 tahun kemudian

Sebagai contoh, mari kita ambil Gudang Data Masa Nyata, yang mana data dimuatkan hampir berterusan. Kami mahu menerima permintaan daripadanya dengan kelewatan kedua. Sila - gunakannya Klik Rumah, kerana ini adalah senario yang direka untuknya. Klik Rumah ini betul-betul bagaimana ia digunakan bukan sahaja di web, tetapi juga dalam pemasaran dan analisis kewangan, AdTech, serta dalam Pengesanan penipuann. DALAM Gudang Data masa nyata skim berstruktur kompleks seperti "bintang" atau "kepingan salji" digunakan, banyak jadual dengan JOIN (kadang-kadang berbilang), dan data biasanya disimpan dan diubah dalam beberapa sistem.

Mari kita ambil senario lain - Siri masa: pemantauan peranti, rangkaian, statistik penggunaan, Internet Perkara. Di sini kita menghadapi acara yang agak mudah yang dipesan dalam masa. Klik Rumah pada asalnya tidak dibangunkan untuk ini, tetapi telah menunjukkan dirinya berfungsi dengan baik, itulah sebabnya syarikat besar menggunakan Klik Rumah sebagai tempat penyimpanan maklumat pemantauan. Untuk meneroka sama ada ia sesuai Klik Rumah untuk siri masa, kami membuat penanda aras berdasarkan pendekatan dan keputusan InfluxDB и TimescaleDB - khusus siri masa pangkalan data. TernyataItu Klik Rumah, walaupun tanpa pengoptimuman untuk tugas tersebut, menang di medan asing:

Berpindah ke ClickHouse: 3 tahun kemudian

В siri masa Biasanya jadual sempit digunakan - beberapa lajur kecil. Banyak data boleh datang daripada pemantauan—berjuta-juta rekod sesaat—dan ia biasanya datang dalam pecahan kecil (masa sebenar penstriman). Oleh itu, skrip sisipan yang berbeza diperlukan, dan pertanyaan itu sendiri mempunyai spesifiknya sendiri.

Pengurusan Log. Mengumpul log ke dalam pangkalan data biasanya tidak baik, tetapi Klik Rumah ini boleh dilakukan dengan beberapa ulasan seperti yang diterangkan di atas. Banyak syarikat menggunakan Klik Rumah tepat untuk tujuan ini. Dalam kes ini, kami menggunakan jadual lebar rata di mana kami menyimpan keseluruhan log (contohnya, dalam borang JSON), atau potong-potong. Data biasanya dimuatkan dalam kelompok besar (fail), dan kami mencari mengikut beberapa medan.

Untuk setiap fungsi ini, pangkalan data khusus biasanya digunakan. Klik Rumah seseorang boleh melakukan semuanya dengan baik sehingga ia mengatasi mereka. Sekarang mari kita lihat lebih dekat siri masa senario, dan cara "memasak" dengan betul Klik Rumah untuk senario ini.

Siri masa

Pada masa ini ini adalah senario utama yang Klik Rumah dianggap penyelesaian piawai. Siri masa ialah satu set peristiwa yang disusun mengikut masa, mewakili perubahan dalam beberapa proses dari semasa ke semasa. Sebagai contoh, ini mungkin kadar denyutan jantung setiap hari atau bilangan proses dalam sistem. Semua yang memberi masa berdetik dengan beberapa dimensi adalah siri masa:

Berpindah ke ClickHouse: 3 tahun kemudian

Kebanyakan jenis acara ini datang daripada pemantauan. Ini bukan sahaja memantau web, tetapi juga peranti sebenar: kereta, sistem perindustrian, IOT, kilang atau teksi tanpa pemandu, di dalam bagasinya Yandex sudah meletakkan Klik Rumah-pelayan.

Sebagai contoh, terdapat syarikat yang mengumpul data daripada kapal. Setiap beberapa saat, penderia pada kapal kontena menghantar ratusan ukuran yang berbeza. Jurutera mengkajinya, membina model dan cuba memahami betapa cekap kapal itu digunakan, kerana kapal kontena tidak boleh terbiar walau sesaat. Sebarang masa henti adalah kerugian wang, jadi adalah penting untuk meramalkan laluan supaya pemberhentian adalah minimum.

Pada masa kini terdapat pertumbuhan pangkalan data khusus yang mengukur siri masa. Di tapak Mesin DB Pangkalan data yang berbeza entah bagaimana disenaraikan, dan anda boleh melihatnya mengikut jenis:

Berpindah ke ClickHouse: 3 tahun kemudian

Jenis yang paling cepat berkembang ialah siri masas. Pangkalan data graf juga berkembang, tetapi siri masas telah berkembang lebih cepat sejak beberapa tahun kebelakangan ini. Wakil biasa keluarga pangkalan data ini ialah InfluxDB, Prometheus, KDB, TimescaleDB (dibina pada PostgreSQL), penyelesaian daripada Amazon. Klik Rumah boleh digunakan di sini juga, dan digunakan. Biar saya berikan anda beberapa contoh awam.

Salah satu perintis ialah syarikat CloudFlare (CDN-penyedia). Mereka memantau mereka CDN melalui Klik Rumah (DNS-permintaan, HTTP-queries) dengan beban yang besar - 6 juta acara sesaat. Semuanya berlalu Kafka, pergi ke Klik Rumah, yang memberi peluang untuk melihat papan pemuka acara dalam sistem dalam masa nyata.

Comcast - salah satu pemimpin dalam telekomunikasi di Amerika Syarikat: Internet, televisyen digital, telefon. Mereka mencipta sistem kawalan yang serupa CDN dalam Open Source projek Kawalan Trafik Apache untuk bekerja dengan data besar anda. Klik Rumah digunakan sebagai bahagian belakang untuk analisis.

percona terbina dalam Klik Rumah di dalam anda PMMuntuk menyimpan pemantauan pelbagai MySQL.

Keperluan Khusus

Pangkalan data siri masa mempunyai keperluan khusus mereka sendiri.

  • Kemasukan pantas dari banyak ejen. Kami perlu memasukkan data daripada banyak aliran dengan cepat. Klik Rumah Ia melakukannya dengan baik kerana semua sisipannya tidak menyekat. mana-mana memasukkan ialah fail baharu pada cakera, dan sisipan kecil boleh ditimbal dalam satu cara atau yang lain. DALAM Klik Rumah Adalah lebih baik untuk memasukkan data dalam kelompok besar daripada satu baris pada satu masa.
  • Skim fleksibel. В siri masa kami biasanya tidak mengetahui struktur data sepenuhnya. Adalah mungkin untuk membina sistem pemantauan untuk aplikasi tertentu, tetapi kemudian sukar untuk menggunakannya untuk aplikasi lain. Ini memerlukan skim yang lebih fleksibel. Klik Rumah, membolehkan anda melakukan ini, walaupun ia adalah asas yang ditaip dengan kuat.
  • Penyimpanan yang cekap dan melupakan data. Biasanya dalam siri masa sejumlah besar data, jadi ia mesti disimpan secekap mungkin. Contohnya, di InfluxDB mampatan yang baik adalah ciri utamanya. Tetapi selain menyimpan, anda juga perlu dapat "melupakan" data lama dan melakukan beberapa jenis persampelan bawah — pengiraan automatik agregat.
  • Pertanyaan pantas mengenai data agregat. Kadangkala menarik untuk melihat 5 minit terakhir dengan ketepatan milisaat, tetapi pada butiran bulanan atau minit data mungkin tidak diperlukan - statistik umum sudah memadai. Sokongan seperti ini diperlukan, jika tidak, permintaan selama 3 bulan akan mengambil masa yang sangat lama untuk diselesaikan walaupun dalam Klik Rumah.
  • Permintaan seperti "titik terakhir, pada». Ini adalah tipikal untuk siri masa pertanyaan: lihat ukuran atau keadaan terakhir sistem pada satu ketika dalam masa t. Ini bukanlah pertanyaan yang sangat menyenangkan untuk pangkalan data, tetapi anda juga perlu dapat melaksanakannya.
  • Siri masa "Pengelekatan".. Siri masa ialah siri masa. Jika terdapat dua siri masa, ia selalunya perlu disambungkan dan dikaitkan. Tidak mudah untuk melakukan ini pada semua pangkalan data, terutamanya dengan siri masa yang tidak sejajar: berikut adalah beberapa titik masa, ada yang lain. Anda boleh mempertimbangkan purata, tetapi tiba-tiba masih akan ada lubang di sana, jadi ia tidak jelas.

Mari lihat bagaimana keperluan ini dipenuhi Klik Rumah.

Skim ini

В Klik Rumah skim untuk siri masa boleh dilakukan dengan cara yang berbeza, bergantung pada tahap keteraturan data. Adalah mungkin untuk membina sistem pada data biasa apabila kita mengetahui semua metrik terlebih dahulu. Sebagai contoh, saya melakukan ini CloudFlare dengan pemantauan CDN adalah sistem yang dioptimumkan dengan baik. Anda boleh membina sistem yang lebih umum yang memantau keseluruhan infrastruktur dan pelbagai perkhidmatan. Dalam kes data yang tidak teratur, kami tidak tahu terlebih dahulu apa yang kami pantau - dan ini mungkin kes yang paling biasa.

Data biasa. Lajur. Skim ini mudah - lajur dengan jenis yang diperlukan:

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

Ini ialah jadual biasa yang memantau beberapa jenis aktiviti pemuatan sistem (pengguna, sistem, terbiar, baik). Mudah dan mudah, tetapi tidak fleksibel. Jika kita mahukan skema yang lebih fleksibel, maka kita boleh menggunakan tatasusunan.

Data tidak teratur. Tatasusunan:

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 Bersarang ialah dua tatasusunan: metrics.name и metrik.nilai. Di sini anda boleh menyimpan data pemantauan sewenang-wenangnya sebagai tatasusunan nama dan tatasusunan ukuran untuk setiap acara. Untuk pengoptimuman lanjut, bukannya satu struktur sedemikian, anda boleh membuat beberapa. Sebagai contoh, satu untuk terapung-nilai, lain - untuk int-maksudnya kerana int Saya mahu menyimpan dengan lebih cekap.

Tetapi struktur sedemikian lebih sukar untuk diakses. Anda perlu menggunakan pembinaan khas, menggunakan fungsi khas untuk mengeluarkan nilai indeks pertama dan kemudian tatasusunan:

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

Tetapi ia masih berfungsi dengan cepat. Satu lagi cara untuk menyimpan data yang tidak teratur ialah mengikut baris.

Data tidak teratur. rentetan. Dalam kaedah tradisional ini, tanpa tatasusunan, nama dan nilai disimpan secara serentak. Jika 5 ukuran datang daripada satu peranti serentak, 000 baris dijana dalam 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', ...)

Klik Rumah mengatasi ini - ia mempunyai sambungan khas Klik Rumah SQL. Contohnya maxIf — fungsi khas yang mengira maksimum dengan metrik apabila beberapa syarat dipenuhi. Anda boleh menulis beberapa ungkapan sedemikian dalam satu permintaan dan segera mengira nilai untuk beberapa metrik.

Mari bandingkan tiga pendekatan:

Berpindah ke ClickHouse: 3 tahun kemudian

Details

Di sini saya telah menambah "Saiz Data Cakera" untuk beberapa set data ujian. Dalam kes lajur, kami mempunyai saiz data terkecil: pemampatan maksimum, kelajuan pertanyaan maksimum, tetapi kami membayar dengan perlu merekodkan semuanya sekali gus.

Dalam kes tatasusunan, semuanya lebih teruk sedikit. Data masih dimampatkan dengan baik dan corak yang tidak teratur boleh disimpan. Tetapi Klik Rumah - pangkalan data kolumnar, dan apabila kami mula menyimpan segala-galanya dalam tatasusunan, ia bertukar menjadi satu baris, dan kami membayar untuk fleksibiliti dengan kecekapan. Untuk sebarang operasi, anda perlu membaca keseluruhan tatasusunan ke dalam ingatan, kemudian cari elemen yang dikehendaki di dalamnya - dan jika tatasusunan itu berkembang, maka kelajuannya menurun.

Dalam salah satu syarikat yang menggunakan pendekatan ini (contohnya, Uber), tatasusunan dipotong menjadi kepingan 128 elemen. Data daripada beberapa ribu metrik dengan volum 200 TB data/hari disimpan bukan dalam satu tatasusunan, tetapi dalam 10 atau 30 tatasusunan dengan logik storan khas.

Pendekatan yang paling mudah ialah dengan rentetan. Tetapi data kurang dimampatkan, saiz jadual adalah besar, dan walaupun pertanyaan berdasarkan beberapa metrik, ClickHouse tidak berfungsi secara optimum.

Skim hibrid

Mari kita anggap bahawa kita telah memilih litar tatasusunan. Tetapi jika kami tahu bahawa kebanyakan papan pemuka kami hanya menunjukkan metrik pengguna dan sistem, kami juga boleh merealisasikan metrik ini ke dalam lajur daripada tatasusunan di peringkat jadual dengan cara ini:

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

Apabila memasukkan Klik Rumah akan mengira mereka secara automatik. Dengan cara ini anda boleh menggabungkan perniagaan dengan senang hati: skim ini fleksibel dan umum, tetapi kami menarik keluar lajur yang paling kerap digunakan. Ambil perhatian bahawa ini tidak memerlukan menukar sisipan dan ETLyang terus memasukkan tatasusunan ke dalam jadual. Kami baru sahaja melakukannya ALTER TABLE, menambah beberapa pembesar suara dan kami mendapat skema hibrid dan lebih pantas yang boleh anda mula gunakan dengan segera.

Codec dan pemampatan

Untuk siri masa Ia penting sejauh mana anda mengemas data kerana jumlah maklumat boleh menjadi sangat besar. DALAM Klik Rumah Terdapat satu set alat untuk mencapai kesan mampatan 1:10, 1:20, dan kadangkala lebih. Ini bermakna 1 TB data yang tidak dibungkus pada cakera memerlukan 50-100 GB. Saiz yang lebih kecil adalah bagus, data boleh dibaca dan diproses dengan lebih cepat.

Untuk mencapai tahap pemampatan yang tinggi, Klik Rumah menyokong codec berikut:

Berpindah ke ClickHouse: 3 tahun kemudian

Contoh jadual:

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 sini kami mentakrifkan codec DoubleDelta dalam satu kes, dalam yang kedua - Gorila, dan kami pasti akan menambah lagi LZ4 pemampatan. Akibatnya, saiz data pada cakera sangat berkurangan:

Berpindah ke ClickHouse: 3 tahun kemudian

Ini menunjukkan berapa banyak ruang yang digunakan oleh data yang sama, tetapi menggunakan codec dan pemampatan yang berbeza:

  • dalam fail GZIP pada cakera;
  • dalam ClickHouse tanpa codec, tetapi dengan pemampatan ZSTD;
  • dalam ClickHouse dengan codec dan mampatan LZ4 dan ZSTD.

Ia boleh dilihat bahawa jadual dengan codec mengambil lebih sedikit ruang.

Perkara penting

Tidak kurang pentingnya memilih jenis data yang betul:

Berpindah ke ClickHouse: 3 tahun kemudian

Dalam semua contoh di atas saya gunakan Terapung64. Tetapi jika kita memilih Terapung32, maka itu akan menjadi lebih baik. Ini ditunjukkan dengan baik oleh lelaki dari Perkona dalam artikel yang dipautkan di atas. Adalah penting untuk menggunakan jenis yang paling padat yang sesuai untuk tugasan: malah kurang untuk saiz cakera daripada untuk kelajuan pertanyaan. Klik Rumah sangat sensitif terhadap perkara ini.

Kalau boleh guna int32 bukannya int64, kemudian jangkakan peningkatan hampir dua kali ganda dalam prestasi. Data menggunakan lebih sedikit memori, dan semua "aritmetik" berfungsi dengan lebih pantas. Klik Rumah secara dalaman ia adalah sistem taip yang sangat ketat; ia menggunakan maksimum semua kemungkinan yang disediakan oleh sistem moden.

Pengagregatan dan Pandangan Terwujud

Pengagregatan dan paparan terwujud membolehkan anda membuat agregat untuk acara yang berbeza:

Berpindah ke ClickHouse: 3 tahun kemudian

Sebagai contoh, anda mungkin mempunyai data sumber tidak terkumpul dan anda boleh melampirkan pelbagai paparan terwujud padanya dengan penjumlahan automatik melalui enjin khas SummingMergeTree (SMT). SMT ialah struktur data pengagregatan khas yang mengira agregat secara automatik. Data mentah dimasukkan ke dalam pangkalan data, ia diagregatkan secara automatik, dan papan pemuka boleh digunakan serta-merta padanya.

TTL - "lupakan" data lama

Bagaimana untuk "melupakan" data yang tidak diperlukan lagi? Klik Rumah tahu bagaimana untuk melakukan ini. Apabila membuat jadual, anda boleh menentukan TTL ungkapan: sebagai contoh, kami menyimpan data minit untuk satu hari, data harian selama 30 hari dan tidak sekali-kali menyentuh data mingguan atau 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 */

Pelbagai peringkat - membahagikan data merentas cakera

Memandangkan idea ini lebih jauh, data boleh disimpan dalam Klik Rumah di tempat yang berbeza. Katakan kita ingin menyimpan data panas untuk minggu terakhir pada tempatan yang sangat pantas SSD, dan kami meletakkan lebih banyak data sejarah di tempat lain. DALAM Klik Rumah ini sekarang mungkin:

Berpindah ke ClickHouse: 3 tahun kemudian

Anda boleh mengkonfigurasi dasar storan (dasar penyimpanan) Jadi Klik Rumah akan memindahkan data secara automatik apabila mencapai syarat tertentu ke storan lain.

Tetapi bukan itu sahaja. Pada peringkat jadual tertentu, anda boleh menentukan peraturan dengan tepat apabila data masuk ke storan sejuk. Sebagai contoh, data disimpan pada cakera yang sangat pantas selama 7 hari, dan semua yang lebih lama dipindahkan ke cakera yang perlahan. Ini bagus kerana ia membolehkan anda mengekalkan sistem pada prestasi maksimum, sambil mengawal kos dan tidak membazir wang untuk data sejuk:

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

Ciri-ciri yang unik Klik Rumah

Dalam hampir semua perkara Klik Rumah Terdapat "sorotan" sedemikian, tetapi ia diimbangi oleh eksklusiviti - sesuatu yang tidak terdapat dalam pangkalan data lain. Sebagai contoh, berikut adalah beberapa ciri unik Klik Rumah:

  • Tatasusunan. В Klik Rumah sokongan yang sangat baik untuk tatasusunan, serta keupayaan untuk melakukan pengiraan yang kompleks pada mereka.
  • Mengagregatkan Struktur Data. Ini adalah salah satu "ciri pembunuh" Klik Rumah. Walaupun fakta bahawa lelaki dari Yandex mengatakan bahawa kami tidak mahu mengagregat data, semuanya diagregatkan dalam Klik Rumah, kerana ia pantas dan mudah.
  • Pandangan Terwujud. Bersama-sama dengan mengagregatkan struktur data, paparan terwujud membolehkan anda memudahkan masa sebenar pengagregatan.
  • ClickHouse SQL. Ini adalah sambungan bahasa SQL dengan beberapa ciri tambahan dan eksklusif yang hanya tersedia di Klik Rumah. Sebelum ini, ia seperti pengembangan di satu pihak, dan keburukan di pihak yang lain. Sekarang hampir semua keburukan berbanding dengan SQL 92 kami mengeluarkannya, kini ia hanya sambungan.
  • Lambda–ungkapan. Adakah mereka masih dalam mana-mana pangkalan data?
  • ML-sokongan. Ini tersedia dalam pangkalan data yang berbeza, ada yang lebih baik, ada yang lebih teruk.
  • sumber terbuka. Kita boleh kembangkan Klik Rumah bersama-sama. Sekarang masuk Klik Rumah kira-kira 500 penyumbang, dan jumlah ini sentiasa meningkat.

Pertanyaan rumit

В Klik Rumah terdapat banyak cara yang berbeza untuk melakukan perkara yang sama. Sebagai contoh, anda boleh mengembalikan nilai terakhir daripada jadual dalam tiga cara berbeza untuk CPU (ada juga yang keempat, tetapi ia lebih eksotik).

Yang pertama menunjukkan betapa mudahnya untuk dilakukan Klik Rumah pertanyaan apabila anda ingin menyemaknya tupel terkandung dalam subkueri. Ini adalah sesuatu yang saya secara peribadi sangat terlepas dalam pangkalan data lain. Jika saya ingin membandingkan sesuatu dengan subquery, maka dalam pangkalan data lain hanya skalar yang boleh dibandingkan dengannya, tetapi untuk beberapa lajur saya perlu menulis JOIN. В Klik Rumah anda boleh menggunakan tuple:

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

Kaedah kedua melakukan perkara yang sama tetapi menggunakan fungsi agregat argMax:

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

В Klik Rumah terdapat beberapa dozen fungsi agregat, dan jika anda menggunakan combinator, maka mengikut undang-undang kombinatorik anda akan mendapat kira-kira seribu daripadanya. ArgMax - salah satu fungsi yang mengira nilai maksimum: permintaan mengembalikan nilai pengguna_penggunaan, di mana nilai maksimum dicapai dicipta_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 JOIN — “melekatkan” baris dengan masa yang berbeza. Ini adalah ciri unik untuk pangkalan data yang hanya tersedia dalam kdb+. Jika terdapat dua siri masa dengan masa yang berbeza, ASOF JOIN membolehkan anda mengalih dan menggabungkannya dalam satu permintaan. Untuk setiap nilai dalam satu siri masa, nilai terdekat dalam yang lain ditemui dan ia dikembalikan pada baris yang sama:

Berpindah ke ClickHouse: 3 tahun kemudian

Fungsi Analitik

Dalam piawaian SQL-2003 anda boleh menulis seperti ini:

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;

В Klik Rumah Anda tidak boleh berbuat demikian - ia tidak menyokong standard SQL-2003 dan mungkin tidak akan melakukannya. Sebaliknya, dalam Klik Rumah Ia adalah kebiasaan untuk menulis seperti ini:

Berpindah ke ClickHouse: 3 tahun kemudian

Saya berjanji dengan lambdas - ini dia!

Ini adalah analog pertanyaan analitikal dalam standard SQL-2003: dia mengira perbezaan antara keduanya cap masa, tempoh, nombor ordinal - semua yang biasanya kami anggap sebagai fungsi analisis. DALAM Klik Rumah Kami mengiranya melalui tatasusunan: mula-mula kami meruntuhkan data ke dalam tatasusunan, selepas itu kami melakukan semua yang kami mahu pada tatasusunan, dan kemudian kami mengembangkannya kembali. Ia tidak begitu mudah, ia memerlukan minat pengaturcaraan berfungsi sekurang-kurangnya, tetapi ia sangat fleksibel.

Ciri-ciri Khas

Selain itu, dalam Klik Rumah banyak fungsi khusus. Sebagai contoh, bagaimana untuk menentukan berapa banyak sesi yang berlaku serentak? Tugas pemantauan biasa adalah untuk menentukan beban maksimum dengan satu permintaan. DALAM Klik Rumah Terdapat fungsi khas untuk tujuan ini:

Berpindah ke ClickHouse: 3 tahun kemudian

Secara umum, ClickHouse mempunyai fungsi khas untuk pelbagai tujuan:

  • runningDifference, runningAccumulate, jiran;
  • sumMap(kunci, nilai);
  • timeSeriesGroupSum(uid, cap waktu, nilai);
  • timeSeriesGroupRateSum(uid, cap waktu, nilai);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • DENGAN PENGISIAN / DENGAN IKATAN;
  • SimpleLinearRegression, stochasticLinearRegression.

Ini bukan senarai lengkap fungsi, terdapat 500-600 kesemuanya. Petunjuk: semua fungsi dalam Klik Rumah berada dalam jadual sistem (tidak semua didokumenkan, tetapi semuanya menarik):

select * from system.functions order by name

Klik Rumah ia menyimpan banyak maklumat tentang dirinya, termasuk jadual log, log_pertanyaan, log jejak, log operasi dengan blok data (log_bahagian), log metrik dan log sistem, yang biasanya ditulis pada cakera. Log metrik ialah siri masa в Klik Rumah sebenarnya Klik Rumah: Pangkalan data itu sendiri boleh memainkan peranan siri masa pangkalan data, dengan itu "memakan" dirinya sendiri.

Berpindah ke ClickHouse: 3 tahun kemudian

Ini juga satu perkara yang unik - kerana kami melakukan kerja yang baik untuknya siri masa, kenapa kita tidak boleh menyimpan semua yang kita perlukan dalam diri kita? Kami tidak perlu Prometheus, kita simpan semuanya untuk diri kita sendiri. Bersambung grafana dan kami memantau diri kami sendiri. Namun, jika Klik Rumah jatuh, kita tidak akan nampak sebabnya, jadi mereka biasanya tidak berbuat demikian.

Kelompok besar atau banyak yang kecil Klik Rumah

Apakah yang lebih baik - satu kelompok besar atau banyak ClickHouses kecil? Pendekatan tradisional untuk DWH ialah gugusan besar di mana litar diperuntukkan untuk setiap aplikasi. Kami datang kepada pentadbir pangkalan data - berikan kami gambar rajah, dan mereka memberi kami satu:

Berpindah ke ClickHouse: 3 tahun kemudian

В Klik Rumah anda boleh melakukannya secara berbeza. Anda boleh membuat setiap aplikasi anda sendiri Klik Rumah:

Berpindah ke ClickHouse: 3 tahun kemudian

Kami tidak memerlukan yang besar yang dahsyat lagi DWH dan pentadbir yang sukar dikawal. Kami boleh memberikan setiap aplikasinya sendiri Klik Rumah, dan pembangun boleh melakukannya sendiri, kerana Klik Rumah sangat mudah dipasang dan tidak memerlukan pentadbiran yang kompleks:

Berpindah ke ClickHouse: 3 tahun kemudian

Tetapi jika kita mempunyai banyak Klik Rumah, dan anda perlu memasangnya dengan kerap, kemudian anda mahu mengautomasikan proses ini. Untuk ini kita boleh, sebagai contoh, gunakan Kubernetes и clickhouse-pengendali. DALAM Kubernetes ClickHouse anda boleh meletakkannya "pada-klik": Saya boleh mengklik butang, menjalankan manifes dan pangkalan data sudah sedia. Saya boleh membuat gambar rajah dengan serta-merta, mula memuat naik metrik di sana dan dalam masa 5 minit saya telah menyediakan papan pemuka grafana. Ia sangat mudah!

Hasilnya?

Oleh itu, Klik Rumah - ini:

  • Cepat. Semua orang tahu ini.
  • Просто. Sedikit kontroversi, tetapi saya percaya bahawa ia sukar dalam latihan, mudah dalam pertempuran. Jika anda faham bagaimana Klik Rumah ia berfungsi, maka semuanya sangat mudah.
  • Secara universal. Ia sesuai untuk senario yang berbeza: DWH, Siri Masa, Storan Log. Tetapi ia tidak OLTP pangkalan data, jadi jangan cuba membuat sisipan pendek dan membaca di sana.
  • Menariknya. Mungkin orang yang bekerja dengannya Klik Rumah, mengalami banyak detik menarik dalam erti kata yang baik dan buruk. Sebagai contoh, keluaran baru keluar, semuanya berhenti berfungsi. Atau apabila anda bergelut dengan tugas selama dua hari, tetapi selepas bertanya soalan dalam sembang Telegram, tugas itu diselesaikan dalam masa dua minit. Atau seperti pada persidangan di laporan Lesha Milovidov, tangkapan skrin daripada Klik Rumah melanggar siaran HighLoad ++. Perkara sebegini berlaku sepanjang masa dan menyusahkan hidup kita. Klik Rumah terang dan menarik!

Anda boleh menonton pembentangan di sini.

Berpindah ke ClickHouse: 3 tahun kemudian

Mesyuarat yang ditunggu-tunggu oleh pembangun sistem beban tinggi di HighLoad ++ akan berlangsung pada 9 dan 10 November di Skolkovo. Akhir sekali, ini akan menjadi persidangan luar talian (walaupun dengan semua langkah berjaga-jaga), memandangkan tenaga HighLoad++ tidak boleh dibungkus dalam talian.

Untuk persidangan itu, kami mencari dan menunjukkan kepada anda kes tentang keupayaan maksimum teknologi: HighLoad++ adalah, adalah dan akan menjadi satu-satunya tempat di mana anda boleh belajar dalam dua hari bagaimana Facebook, Yandex, VKontakte, Google dan Amazon berfungsi.

Setelah mengadakan mesyuarat tanpa gangguan sejak tahun 2007, tahun ini kami akan bertemu untuk kali ke-14. Pada masa ini, persidangan itu telah berkembang 10 kali ganda; tahun lepas, acara industri utama mengumpulkan 3339 peserta, 165 penceramah, laporan dan pertemuan, dan 16 trek berjalan serentak.
Tahun lepas terdapat 20 bas, 5280 liter teh dan kopi, 1650 liter minuman buah-buahan dan 10200 botol air. Dan lagi 2640 kilogram makanan, 16 pinggan dan 000 cawan. Dengan cara ini, dengan wang yang diperoleh daripada kertas kitar semula, kami menanam 25 anak pokok oak :)

Anda boleh membeli tiket di sini, dapatkan berita tentang persidangan itu - di sini, dan bercakap di semua rangkaian sosial: Telegram, Facebook, Vkontakte и Twitter.

Sumber: www.habr.com

Tambah komen