Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Wiwit ClickHouse minangka sistem khusus, nalika nggunakake iku penting kanggo njupuk menyang akun fitur arsitektur sawijining. Ing laporan iki, Alexey bakal ngomong babagan conto kesalahan umum nalika nggunakake ClickHouse, sing bisa nyebabake karya sing ora efektif. Conto praktis bakal nuduhake carane milih siji utawa skema pangolahan data liyane bisa ngganti kinerja kanthi urutan gedhene.

Halo kabeh! Jenengku Alexey, aku nggawe ClickHouse.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Kaping pisanan, aku cepet-cepet nyenengake sampeyan, dina iki aku ora bakal ngandhani apa ClickHouse. Jujur aku wis kesel. Saben-saben aku pitutur marang kowe apa iku. Lan mbokmenawa kabeh wong wis ngerti.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Nanging, aku bakal menehi pitutur marang kowe apa kesalahan sing ana, yaiku, carane sampeyan bisa nggunakake ClickHouse kanthi ora bener. Nyatane, ora perlu wedi, amarga kita ngembangake ClickHouse minangka sistem sing prasaja, trep, lan bisa digunakake ing njaba kothak. Aku nginstal, ora masalah.

Nanging sampeyan isih kudu nganggep manawa sistem iki khusus lan sampeyan bisa nemokake kasus panggunaan sing ora biasa sing bakal ngilangi sistem iki saka zona nyaman.

Dadi, apa jenis rake ana? Biasane aku bakal ngomong babagan perkara sing jelas. Kabeh wis jelas kanggo kabeh wong, kabeh wong ngerti kabeh lan bisa bungah yen dheweke pancen pinter, lan sing ora ngerti bakal sinau sing anyar.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Conto pisanan lan paling gampang, sing, sayangé, asring kedadeyan, yaiku akeh sisipan kanthi batch cilik, yaiku akeh sisipan cilik.

Yen kita nimbang carane ClickHouse nindakake insert, sampeyan bisa ngirim paling sethithik terabyte data ing siji panjalukan. Iku ora masalah.

Lan ayo ndeleng apa kinerja sing khas. Contone, kita duwe tabel saka data Yandex.Metrica. Hits. 105 sawetara kolom. 700 bita ora dikompres. Lan kita bakal masang kanthi cara sing apik ing batch siji yuta larik.

We masang MergeTree menyang meja, dadi metu setengah yuta larik per detik. gedhe. Ing tabel replikasi bakal luwih cilik, kira-kira 400 baris per detik.

Lan yen sampeyan ngaktifake selipan kuorum, sampeyan entuk sethitik kurang, nanging kinerja isih prayoga, 250 istilah per detik. Penyisipan kuorum minangka fitur sing ora didokumentasikan ing ClickHouse*.

* ing 2020, wis didokumentasikake.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Apa sing kedadeyan yen sampeyan tumindak ala? Kita nglebokake siji baris menyang tabel MergeTree lan entuk 59 baris per detik. Iku 10 kaping luwih alon. Ing ReplicatedMergeTree - 000 baris saben detik. Lan yen kuorum diuripake, banjur dadi metu 6 baris saben detik. Ing mratelakake panemume, iki sawetara jenis omong kosong Absolute. Kepiye carane bisa alon-alon kaya ngono? Aku malah wis ditulis ing T-shirt sing ClickHouse ngirim ora alon mudhun. Nanging kadhangkala kedadeyan kasebut.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Nyatane, iki kekurangan kita. Kita bisa kanthi gampang nggawe kabeh bisa mlaku, nanging ora. Lan kita ora nindakake amarga naskah kita ora mbutuhake. Kita wis duwe butches. Kita mung nampa kumpulan ing ngleboke, lan ora masalah. We masang lan kabeh bisa digunakake kanthi becik. Nanging, mesthi, kabeh skenario bisa. Contone, nalika sampeyan duwe akeh server sing data digawe. Lan padha ora nglebokake data minangka asring, nanging isih mungkasi munggah karo Kerep sisipan. Lan kita kudu piye wae supaya iki.

Saka sudut pandang teknis, titik kasebut yaiku nalika sampeyan nggawe sisipan ing ClickHouse, data kasebut ora ana ing memtable. Kita malah ora duwe struktur log nyata MergeTree, nanging mung MergeTree, amarga ora ana log utawa memTable. Kita mung langsung nulis data menyang sistem file, wis disusun ing kolom. Lan yen sampeyan duwe 100 kolom, luwih saka 200 file kudu ditulis ing direktori sing kapisah. Kabeh iki rumit banget.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Lan pitakonan muncul: "Kepiye carane nindakake kanthi bener?" Yen kahanan kaya ngono sampeyan isih kudu ngrekam data ing ClickHouse.

Cara 1. Iki cara paling gampang. Gunakake sawetara jinis antrian sing disebarake. Contone, Kafka. Sampeyan mung extract data saka Kafka lan batch sapisan detik. Lan kabeh bakal apik, sampeyan ngrekam, kabeh bakal apik.

Kerugian yaiku Kafka minangka sistem distribusi gedhe liyane. Aku uga ngerti yen sampeyan wis duwe Kafka ing perusahaan sampeyan. Iku apik, iku trep. Nanging yen ora ana, sampeyan kudu mikir kaping telu sadurunge nyeret sistem sing disebarake menyang proyek sampeyan. Dadi iku worth considering alternatif.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Cara 2. Iki alternatif lawas-sekolah lan ing wektu sing padha banget prasaja. Apa sampeyan duwe sawetara jinis server sing ngasilake log sampeyan. Lan mung nulis log sampeyan menyang file. Lan sapisan detik, contone, kita ngganti jeneng file iki lan nyuwek sing anyar. Lan skrip kapisah, liwat cron utawa sawetara daemon, njupuk file paling tuwa lan nulis menyang ClickHouse. Yen sampeyan ngrekam log sapisan detik, kabeh bakal apik.

Nanging kerugian saka metode iki yaiku yen server sampeyan ing ngendi log digawe ilang ing endi wae, mula data kasebut uga bakal ilang.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Cara 3. Ana cara liyane sing menarik, sing ora mbutuhake file sauntara. Contone, sampeyan duwe sawetara jinis spinner pariwara utawa sawetara daemon menarik liyane sing ngasilake data. Lan sampeyan bisa nglumpukake Bunch saka data langsung ing RAM, ing buffer. Lan yen wis cukup wektu, sampeyan sijine buffer iki aside, nggawe anyar, lan ing thread kapisah, lebokake apa wis akumulasi menyang ClickHouse.

Ing tangan liyane, data uga ilang karo matèni -9. Yen server nabrak, sampeyan bakal kelangan data iki. Lan masalah liyane yaiku yen sampeyan ora bisa nulis menyang database, data sampeyan bakal nglumpukake ing RAM. Lan salah siji RAM bakal entek, utawa sampeyan mung bakal kelangan data.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Cara 4. Cara liyane sing menarik. Apa sampeyan duwe sawetara jinis proses server. Lan bisa ngirim data kanggo ClickHouse langsung, nanging nindakaken ing siji sambungan. Contone, aku ngirim request http karo transfer-encoding: chunked with insert. Lan ngasilake potongan ora arang banget, sampeyan bisa ngirim saben baris, sanajan bakal ana nduwur sirah kanggo rongko data iki.

Nanging, ing kasus iki data bakal langsung dikirim menyang ClickHouse. Lan ClickHouse bakal buffer dhewe.

Nanging masalah uga muncul. Saiki sampeyan bakal kelangan data, kalebu nalika proses sampeyan mati lan yen proses ClickHouse mati, amarga bakal dadi sisipan sing ora lengkap. Lan ing sisipan ClickHouse yaiku atom nganti batesan tartamtu ing ukuran baris. Ing asas, iki cara sing menarik. Bisa uga digunakake.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Cara 5. Punika cara liyane sing menarik. Iki minangka sawetara server sing dikembangake komunitas kanggo batching data. Aku durung ndeleng dhewe, mula aku ora bisa njamin apa-apa. Nanging, ora ana jaminan sing diwenehake kanggo ClickHouse dhewe. Iki uga mbukak sumber, nanging ing tangan liyane, sampeyan bisa uga wis digunakake kanggo sawetara standar kualitas sing kita nyoba kanggo nyedhiyani. Nanging babagan iki - aku ora ngerti, pindhah menyang GitHub, deleng kode kasebut. Mungkin padha nulis soko normal.

* ing 2020, uga kudu ditambahake Omah Kucing.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Cara 6. Cara liya yaiku nggunakake tabel Buffer. Kauntungan saka metode iki yaiku gampang banget kanggo miwiti nggunakake. Nggawe Tabel Buffer lan lebokake menyang.

Kerugian yaiku masalah kasebut ora rampung rampung. Yen, ing tingkat kaya MergeTree, sampeyan kudu nglumpukake data kanthi siji batch per detik, banjur ing tingkat ing tabel buffer, sampeyan kudu nglumpukake paling sethithik nganti pirang-pirang ewu per detik. Yen luwih saka 10 per detik, isih bakal ala. Lan yen sampeyan nglebokake ing batch, sampeyan bakal weruh yen dadi satus ewu baris per detik. Lan iki wis ana ing data sing cukup abot.

Lan uga tabel buffer ora duwe log. Lan yen ana sing salah karo server sampeyan, banjur data bakal ilang.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Lan minangka bonus, kita bubar entuk kesempatan ing ClickHouse kanggo njupuk data saka Kafka. Ana mesin meja - Kafka. Sampeyan mung nggawe. Lan sampeyan bisa nyumerepi perwakilan materialized ing. Ing kasus iki, dheweke bakal ngekstrak data saka Kafka lan nglebokake menyang tabel sing dibutuhake.

Lan sing paling nyenengake babagan kesempatan iki yaiku dudu kita sing nindakake. Iki minangka fitur komunitas. Lan nalika aku ngomong "fitur komunitas," Maksudku tanpa ngremehake. Kita maca kode kasebut, nindakake review, mesthine bisa digunakake.

* ing 2020, dhukungan sing padha wis muncul KelinciMQ.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Apa maneh sing bisa dadi ora trep utawa ora dikarepake nalika nglebokake data? Yen sampeyan nggawe panjaluk nilai sisipan lan tulis sawetara ekspresi sing diwilang ing nilai. Contone, saiki () uga ekspresi sing diwilang. Lan ing kasus iki, ClickHouse dipeksa kanggo miwiti interpreter ekspresi kasebut ing saben baris, lan kinerja bakal mudhun miturut urutan gedhene. Iku luwih apik kanggo ngindhari iki.

* saiki, masalah wis rampung rampung, ora ana maneh regresi kinerja nalika nggunakake ekspresi ing VALUES.

Conto liyane yaiku nalika ana sawetara masalah nalika sampeyan duwe data ing siji kumpulan sing kalebu akeh partisi. Kanthi gawan, partisi ClickHouse miturut wulan. Lan yen sampeyan nglebokake kumpulan yuta larik, lan ana data kanggo sawetara taun, sampeyan bakal duwe sawetara rolas partisi ana. Lan iki padha karo kasunyatan sing bakal ana batch kaping pirang-pirang luwih cilik, amarga ing njero tansah dipérang dadi partisi.

* Bubar, ing mode eksperimen, ClickHouse nambahake dhukungan kanggo format kompak potongan lan potongan ing RAM kanthi log nulis ing ngarep, sing meh ngrampungake masalah kasebut.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Saiki ayo goleki jinis masalah nomer loro - ngetik data.

Ngetik data bisa ketat utawa senar. String yaiku nalika sampeyan mung njupuk lan nyatakake yen kabeh kolom sampeyan kalebu jinis string. Iki nyedot. Ana ora perlu kanggo nindakake iki.

Ayo dadi tokoh metu carane nindakake iku bener ing kasus nalika sampeyan pengin ngomong sing kita duwe sawetara lapangan, senar, lan supaya ClickHouse tokoh metu ing dhewe, lan aku ora bakal keganggu. Nanging isih worth nggawe sawetara gaweyan.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Contone, kita duwe alamat IP. Ing siji kasus, kita disimpen minangka senar. Contone, 192.168.1.1. Lan ing kasus liyane, bakal dadi sawetara jinis UInt32 *. 32 bit cukup kanggo alamat IPv4.

Kaping pisanan, cukup aneh, data bakal dikompres kira-kira padha. Mesthi, bakal ana prabédan, nanging ora gedhe banget. Dadi ora ana masalah khusus karo disk I / O.

Nanging ana prabédan serius ing wektu prosesor lan wektu eksekusi query.

Ayo ngetung jumlah alamat IP unik yen disimpen minangka nomer. Sing bisa ditindakake nganti 137 yuta garis per detik. Yen padha ing wangun strings, banjur 37 yuta baris saben detik. Aku ora ngerti kenapa kebetulan iki kedadeyan. Aku nindakake panjaluk kasebut dhewe. Nanging isih 4 kaping luwih alon.

Lan yen sampeyan ngetung prabédan ing papan disk, banjur ana uga prabédan. Lan bedane kira-kira seprapat, amarga ana cukup akeh alamat IP unik. Lan yen ana garis kanthi jumlah sing beda-beda, mula bakal gampang dikompres miturut kamus dadi volume sing padha.

Lan prabédan wektu kaping papat ora dumunung ing dalan. Mbok menawa sampeyan ora nggatekake, mesthi, nanging yen aku ndeleng prabédan sing kaya ngono, mula saya sedhih.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Ayo katon ing macem-macem kasus.

1. Siji kasus nalika sampeyan duwe sawetara nilai unik sing beda. Ing kasus iki, kita nggunakake laku prasaja sing mbokmenawa ngerti lan bisa digunakake kanggo DBMS sembarang. Iki kabeh nggawe akal ora mung kanggo ClickHouse. Cukup nulis pengenal numerik menyang database. Lan sampeyan bisa ngowahi menyang strings lan bali ing sisih aplikasi.

Contone, sampeyan duwe wilayah. Lan sampeyan nyoba kanggo nyimpen minangka senar. Lan bakal ditulis ing kono: Wilayah Moskow lan Moskow. Lan nalika aku weruh sing ngandika "Moscow", iku ora apa-apa, nanging nalika Moscow, piye wae dadi sedhih. Iki carane akeh bita.

Nanging, kita mung nulis nomer Ulnt32 lan 250. Kita duwe 250 ing Yandex, nanging sampeyan bisa uga beda. Ing kasus, aku bakal ngomong yen ClickHouse nduweni kemampuan sing dibangun kanggo nggarap geobase. Sampeyan mung nulis direktori kanthi wilayah, kalebu sing hirarkis, yaiku bakal ana Moskow, Wilayah Moskow, lan kabeh sing dibutuhake. Lan sampeyan bisa ngowahi ing tingkat request.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Pilihan kapindho kira-kira padha, nanging kanthi dhukungan ing ClickHouse. Iki minangka jinis data Enum. Sampeyan mung nulis kabeh nilai sing dibutuhake ing Enum. Contone, jinis piranti lan tulis ana: desktop, seluler, tablet, TV. Ana 4 pilihan total.

Kerugian yaiku sampeyan kudu ngganti kanthi periodik. Mung siji opsi ditambahake. Ayo ngganti tabel. Nyatane, ngowahi tabel ing ClickHouse gratis. Utamane gratis kanggo Enum amarga data ing disk ora owah. Nanging, alter entuk kunci * ing meja lan kudu ngenteni nganti kabeh pilihan dieksekusi. Lan mung sawise owah-owahan iki bakal kaleksanan, IE isih ana sawetara inconveniences.

* ing versi ClickHouse paling anyar, ALTER digawe kanthi ora diblokir.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Pilihan liyane sing cukup unik kanggo ClickHouse yaiku nyambungake kamus eksternal. Sampeyan bisa nulis nomer ing ClickHouse, lan nyimpen direktori ing sistem apa wae sing trep kanggo sampeyan. Contone, sampeyan bisa nggunakake: MySQL, Mongo, Postgres. Sampeyan malah bisa nggawe microservice dhewe sing bakal ngirim data iki liwat http. Lan ing tingkat ClickHouse, sampeyan nulis fungsi sing bakal ngowahi data iki saka nomer menyang strings.

Iki minangka cara khusus nanging efisien banget kanggo nggabungake ing meja eksternal. Lan ana rong pilihan. Ing siji pawujudan, data iki bakal rampung cached, kebak saiki ing RAM lan dianyari karo sawetara frekuensi. Lan ing pilihan liyane, yen data iki ora pas karo RAM, sampeyan bisa sebagian cache.

Punika conto. Ana Yandex.Direct. Lan ana perusahaan iklan lan spanduk. Mesthine ana sekitar puluhan yuta perusahaan pariwara. Lan padha kira-kira pas menyang RAM. Lan ana milyaran spanduk, padha ora pas. Lan kita nggunakake kamus cache saka MySQL.

Masalah mung yaiku kamus sing di-cache bakal bisa digunakake kanthi becik yen tingkat hit cedhak 100%. Yen luwih cilik, banjur nalika ngolah pitakon kanggo saben kumpulan data, sampeyan kudu njupuk kunci sing ilang lan entuk data saka MySQL. Babagan ClickHouse, aku isih bisa njamin - ya, ora alon-alon, aku ora bakal ngomong babagan sistem liyane.

Lan minangka bonus, kamus minangka cara sing gampang banget kanggo nganyari data kanthi retroaktif ing ClickHouse. Yaiku, sampeyan duwe laporan babagan perusahaan pariwara, pangguna mung ngganti perusahaan pariwara lan ing kabeh data lawas, ing kabeh laporan, data iki uga diganti. Yen sampeyan nulis baris langsung menyang meja, bakal ora bisa nganyari.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Cara liya yen sampeyan ora ngerti ngendi kanggo njaluk pengenal kanggo strings. sampeyan mung bisa hash. Kajaba iku, pilihan sing paling gampang yaiku njupuk hash 64-bit.

Masalah mung yen hash 64-bit, sampeyan bakal meh tabrakan. Amarga yen ana garis milyar ing kana, kemungkinan kasebut wis katon.

Lan ora bakal apik banget kanggo nyebut jeneng perusahaan pariwara kanthi cara iki. Yen kampanye iklan perusahaan sing beda-beda dicampur, mula bakal ana sing ora bisa dingerteni.

Lan ana trick prasaja. Bener, uga ora cocok banget kanggo data serius, nanging yen ana sing ora serius, banjur mung nambah pengenal klien menyang kunci kamus. Banjur sampeyan bakal duwe tabrakan, nanging mung ing siji klien. Lan kita nggunakake cara iki kanggo peta link ing Yandex.Metrica. Kita duwe URL ing kana, kita nyimpen hash. Lan kita ngerti manawa, mesthi ana tabrakan. Nanging nalika kaca kasebut ditampilake, kemungkinan ing salah sawijining kaca pangguna sawetara URL macet lan iki bakal digatekake bisa diabaikan.

Minangka bonus, kanggo akeh operasi hash mung cukup lan strings dhewe ora perlu kanggo disimpen ing ngendi wae.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Conto liyane yen strings cendhak, contone, domain situs web. Padha bisa disimpen minangka. Utawa, contone, basa browser ru iku 2 bita. Mesthi, aku pancene melas kanggo bait, nanging aja padha sumelang, 2 bait ora tega. Mangga tetep kaya apa wae, aja kuwatir.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Kasus liyane yaiku nalika, ing nalisir, ana akeh garis lan ana akeh unik ing wong, lan malah pesawat duweni potensi Unlimited. Conto khas yaiku frase telusuran utawa URL. Telusuri frasa, kalebu salah ketik. Ayo ndeleng carane akeh frasa telusuran unik saben dina. Lan dadi metu sing meh setengah saka kabeh acara. Lan ing kasus iki, sampeyan bisa uga mikir yen sampeyan kudu normalake data, ngetung pengenal, lan sijine ing meja kapisah. Nanging sampeyan ora perlu nglakoni. Mung tetep garis iki minangka lagi.

Iku luwih apik ora kanggo invent apa-apa, amarga yen sampeyan nyimpen dhewe, sampeyan kudu do a nggabungake. Lan gabung iki, paling apik, akses acak menyang memori, yen isih mathuk ing memori. Yen ora cocog, banjur bakal ana masalah.

Lan yen data disimpen ing panggonan, banjur mung diwaca ing urutan sing dibutuhake saka sistem file lan kabeh apik.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Yen sampeyan duwe URL utawa sawetara senar dawa liyane sing rumit, mula kudu dipikirake yen sampeyan bisa ngetung sawetara ekstrak sadurunge lan nulis ing kolom sing kapisah.

Kanggo URL, contone, sampeyan bisa nyimpen domain kasebut kanthi kapisah. Lan yen sampeyan pancene butuh domain, banjur gunakake kolom iki, lan URL bakal ana, lan sampeyan ora bakal ndemek.

Ayo ndeleng apa bedane. ClickHouse nduweni fungsi khusus sing ngitung domain. Cepet banget, kita wis ngoptimalake. Lan, jujur, ora tundhuk karo RFC, nanging nimbang kabeh sing dibutuhake.

Lan ing siji kasus kita mung bakal njaluk URL lan ngetung domain. Sing bisa ditindakake nganti 166 milidetik. Lan yen sampeyan njupuk domain sing wis siap, banjur dadi mung 67 milidetik, yaiku meh kaping telu luwih cepet. Lan luwih cepet ora amarga kita kudu nindakake sawetara petungan, nanging amarga kita maca data sing kurang.

Mulane siji panjalukan, sing luwih alon, nduweni kecepatan gigabyte per detik sing luwih dhuwur. Amarga maca luwih gigabyte. Iki minangka data sing ora perlu. Panjaluk kasebut katon luwih cepet, nanging butuh luwih suwe kanggo ngrampungake.

Lan yen sampeyan ndeleng jumlah data ing disk, ternyata URL kasebut 126 megabyte, lan domain mung 5 megabyte. Pranyata metu 25 kaping kurang. Nanging, panjaluk kasebut ditindakake mung 4 kaping luwih cepet. Nanging amarga data kasebut panas. Lan yen kadhemen, mbokmenawa bakal 25 kaping luwih cepet amarga disk I / O.

Ngomong-ngomong, yen sampeyan ngira-ngira domain luwih cilik tinimbang URL, ternyata kira-kira 4 kali luwih cilik. Nanging sakperangan alesan, data njupuk 25 kaping kurang ing disk. Kenging punapa? Amarga komprèsi. Lan URL dikompres, lan domain dikompres. Nanging asring URL ngemot akeh sampah.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Lan, mesthi, kudu nggunakake jinis data sing tepat sing dirancang khusus kanggo nilai sing dikarepake utawa sing cocog. Yen sampeyan ana ing IPv4, banjur simpen UInt32*. Yen IPv6, banjur FixedString (16), amarga alamat IPv6 128 bit, yaiku disimpen langsung ing format binar.

Nanging kepiye yen sampeyan duwe alamat IPv4 lan kadhangkala IPv6? Ya, sampeyan bisa nyimpen loro-lorone. Siji kolom kanggo IPv4, liyane kanggo IPv6. Mesthi, ana pilihan kanggo nampilake IPv4 ing IPv6. Iki uga bakal bisa, nanging yen sampeyan kerep mbutuhake alamat IPv4 ing panjalukan, iku bakal luwih apik kanggo sijine iku ing kolom kapisah.

* ClickHouse saiki wis kapisah IPv4, IPv6 jinis data sing nyimpen data minangka irit minangka nomer, nanging makili minangka trep minangka strings.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Sampeyan uga penting kanggo Wigati sing iku worth preprocessing data ing advance. Contone, sampeyan nampa sawetara log mentah. Lan bisa uga sampeyan ora mung sijine ing ClickHouse langsung, sanajan iku banget nggodho kanggo nindakake apa-apa lan kabeh bakal bisa. Nanging isih worth nindakake petungan sing bisa.

Contone, versi browser. Ing sawetara departemen cedhak, sing aku ora pengin nuding driji, versi browser disimpen kaya iki, yaiku, minangka senar: 12.3. Banjur, kanggo nggawe laporan, dheweke njupuk senar iki lan dibagi dadi array, lan banjur dadi unsur pisanan saka array. Alami, kabeh dadi alon. Aku takon kok padha nindakake iki. Dheweke ngandhani yen dheweke ora seneng optimasi durung wayahe. Lan aku ora seneng pessimization durung wayahe.

Dadi ing kasus iki bakal luwih bener kanggo dibagi dadi 4 kolom. Aja wedi ing kene, amarga iki ClickHouse. ClickHouse minangka basis data kolom. Lan kolom cilik sing luwih apik, luwih apik. Bakal ana 5 BrowserVersi, nggawe 5 kolom. Iki apik.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Saiki ayo goleki apa sing kudu ditindakake yen sampeyan duwe senar sing dawa banget, susunan sing dawa banget. Padha ora perlu kanggo disimpen ing ClickHouse ing kabeh. Nanging, sampeyan mung bisa nyimpen pengenal ing ClickHouse. Lan sijine garis dawa iki menyang sawetara sistem liyane.

Contone, salah sawijining layanan analytics duwe sawetara paramèter acara. Lan yen ana akeh paramèter kanggo acara, kita mung nyimpen 512 pisanan sing teka. Amarga 512 ora tega.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Lan yen sampeyan ora bisa mutusake jinis data sampeyan, sampeyan uga bisa ngrekam data ing ClickHouse, nanging ing tabel sementara saka jinis Log, khusus kanggo data sementara. Sawise iki, sampeyan bisa nganalisa distribusi nilai sing ana ing kono, apa sing ana ing umum, lan nggawe jinis sing bener.

*ClickHouse saiki duwe jinis data Kardinalitas rendah sing ngijini sampeyan kanggo nyimpen strings irit karo kurang gaweyan.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Saiki ayo goleki kasus liyane sing menarik. Kadhangkala ana kedadeyan sing aneh kanggo wong. Aku mlebu lan ndeleng iki. Lan langsung katon yen iki ditindakake dening sawetara admin sing pinter lan berpengalaman sing duwe pengalaman ekstensif ing nyetel MySQL versi 3.23.

Ing kene kita ndeleng sewu tabel, sing saben-saben nyathet sisa pembagian sing ngerti sewu.

Ing asas, aku ngormati pengalaman wong liya, kalebu pangerten babagan kasangsaran sing bisa ditampa liwat pengalaman iki.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Lan alasane luwih utawa kurang jelas. Iki minangka stereotip lawas sing bisa dikumpulake nalika nggarap sistem liyane. Contone, tabel MyISAM ora duwe kunci utami clustered. Lan cara mbagi data iki bisa uga minangka upaya nekat kanggo entuk fungsi sing padha.

Alasan liyane yaiku angel nindakake operasi alter ing tabel gedhe. Kabeh bakal diblokir. Sanajan ing versi modern MySQL, masalah iki ora serius maneh.

Utawa, contone, microsharding, nanging liyane ing mengko.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Ora perlu nindakake iki ing ClickHouse, amarga, sepisanan, kunci utama dikelompokake, data diurutake dening kunci utama.

Lan kadhangkala wong takon kula: "Kepiye kinerja pitakon sawetara ing ClickHouse beda-beda gumantung saka ukuran meja?" Aku ngomong ora owah. Contone, sampeyan duwe meja karo milyar larik lan maca sawetara saka siji yuta larik. Kabeh apik. Yen ana siji triliun larik ing meja lan maca siji yuta larik, iku bakal meh padha.

Lan, nomer loro, kabeh jinis partisi manual ora dibutuhake. Yen sampeyan mlebu lan ndeleng apa sing ana ing sistem file, sampeyan bakal weruh yen tabel kasebut minangka masalah gedhe. Lan ana sing kaya partisi ing njero. Yaiku, ClickHouse nindakake kabeh kanggo sampeyan lan sampeyan ora kudu nandhang sangsara.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Ngganti ing ClickHouse gratis yen ngowahi kolom nambah / nyelehake.

Lan sampeyan ora kudu nggawe tabel cilik, amarga yen sampeyan duwe 10 larik utawa 10 larik ing meja, mula ora dadi masalah. ClickHouse minangka sistem sing ngoptimalake throughput, dudu latensi, saengga ora ana gunane kanggo ngolah 000 baris.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Iku bener nggunakake siji meja gedhe. Mbusak stereotip lawas, kabeh bakal apik.

Lan minangka bonus, ing versi paling anyar kita saiki duwe kemampuan kanggo nggawe tombol partisi sewenang-wenang kanggo nindakake kabeh operasi pangopènan ing partisi individu.

Contone, sampeyan butuh akeh tabel cilik, umpamane, nalika ana perlu kanggo ngolah sawetara data penengah, sampeyan nampa potongan lan sampeyan kudu nindakake transformasi sadurunge nulis menyang tabel pungkasan. Ing kasus iki, ana mesin meja apik - StripeLog. Iku kaya TinyLog, mung luwih apik.

* saiki ClickHouse uga duwe input fungsi tabel.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Antipattern liyane yaiku microsharding. Contone, sampeyan kudu shard data lan sampeyan duwe 5 server, lan sesuk bakal ana 6 server. Lan sampeyan mikir babagan cara ngimbangi data iki. Lan tinimbang sampeyan break ora dadi 5 shards, nanging dadi 1 shards. Banjur sampeyan map saben microshards iki menyang server kapisah. Lan sampeyan bakal entuk, contone, 000 ClickHouses ing siji server, contone. Kapisah kedadean ing bandar kapisah utawa database kapisah.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Nanging iki ora apik banget ing ClickHouse. Amarga malah siji conto ClickHouse nyoba nggunakake kabeh sumber daya server sing kasedhiya kanggo proses siji request. Sing, sampeyan duwe sawetara jenis server lan wis, contone, 56 inti prosesor. Sampeyan nindakake pitakon sing butuh sedetik lan bakal nggunakake 56 intine. Lan yen sampeyan nyelehake 200 ClickHouses ing siji server, mula 10 thread bakal diwiwiti. Umumé, kabeh bakal ala banget.

Alesan liyane yaiku distribusi karya ing kasus kasebut ora rata. Sawetara bakal rampung luwih awal, sawetara bakal rampung mengko. Yen kabeh iki kedadeyan ing siji, banjur ClickHouse dhewe bakal nemtokake cara nyebarake data kanthi bener ing antarane benang.

Lan alasan liyane yaiku sampeyan bakal duwe komunikasi interprocessor liwat TCP. Data kasebut kudu serialized, deserialized, lan iki nomer ageng microshards. Iku mung ora bakal bisa efektif.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Antipattern liyane, sanajan meh ora bisa diarani antipattern. Iki minangka jumlah pre-agregasi sing akeh.

Umumé, pre-agregasi apik. Sampeyan duwe milyar larik, sampeyan nglumpukake lan dadi 1 larik, lan saiki pitakon langsung ditindakake. Kabeh apik. Sampeyan bisa nindakake iki. Lan iki, malah ClickHouse duwe jinis tabel khusus, AggregatingMergeTree, sing nindakake agregasi tambahan nalika data dilebokake.

Nanging ana wektu nalika sampeyan mikir yen kita bakal nglumpukake data kaya iki lan nglumpukake data kaya iki. Lan ing sawetara departemen tetanggan, Aku uga ora arep ngomong kang siji, padha nggunakake SummingMergeTree tabel kanggo ngringkes dening tombol utami, lan bab 20 kolom digunakake minangka tombol utami. Mung ing kasus, Aku ngganti jeneng sawetara kolom kanggo rahasia, nanging iku cantik akeh.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Lan masalah kuwi muncul. Kaping pisanan, volume data sampeyan ora suda banget. Contone, suda kaping telu. Telu bakal dadi rega sing apik kanggo menehi kemampuan analytics tanpa wates sing muncul yen data sampeyan ora dikumpulake. Yen data dikumpulake, mula tinimbang analytics sampeyan mung entuk statistik melas.

Lan apa khusus babagan iki? Kasunyatane wong-wong iki saka departemen tetanggan kadhangkala njaluk nambah kolom liyane menyang kunci utama. Sing, kita aggregated data kaya iki, nanging saiki kita pengin sethitik liyane. Nanging ClickHouse ora duwe kunci utama alter. Mulane, kita kudu nulis sawetara skrip ing C ++. Lan aku ora seneng skrip, sanajan ana ing C ++.

Lan yen sampeyan ndeleng apa ClickHouse digawe, banjur data sing ora dikumpulake persis skenario sing dilahirake. Yen sampeyan nggunakake ClickHouse kanggo data sing ora dikumpulake, mula sampeyan nindakake kanthi bener. Yen sampeyan gabungke, iki kadhangkala bisa diapura.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Kasus liyane sing menarik yaiku pitakon ing daur ulang tanpa wates. Kadhangkala aku menyang sawetara server produksi lan ndeleng dhaptar proses acara ing kana. Lan saben-saben aku nemokake manawa ana kedadeyan sing nggegirisi.

Contone, kaya iki. Iku langsung cetha yen kabeh bisa rampung ing siji panjalukan. Cukup nulis url lan dhaptar ing kana.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Yagene akeh pitakon kaya ngono ing puteran tanpa wates? Yen indeks ora digunakake, sampeyan bakal duwe akeh pass liwat data sing padha. Nanging yen indeks digunakake, contone, sampeyan duwe kunci utami kanggo ru lan sampeyan nulis url = soko ana. Lan sampeyan mikir yen mung siji URL sing diwaca saka meja, kabeh bakal apik. Nanging nyatane ora. Amarga ClickHouse nindakake kabeh kanthi batch.

Nalika dheweke kudu maca sawetara data tartamtu, dheweke maca luwih sithik, amarga indeks ing ClickHouse jarang. Indeks iki ora ngidini sampeyan nemokake siji baris ing tabel, mung sawetara jinis. Lan data dikompres ing blok. Kanggo maca siji baris, sampeyan kudu njupuk kabeh blok lan mbusak. Lan yen sampeyan nindakake akeh pitakonan, sampeyan bakal duwe akeh tumpang tindih, lan sampeyan bakal duwe akeh gaweyan kanggo nindakake maneh lan maneh.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Lan minangka bonus, sampeyan bisa nyathet yen ing ClickHouse sampeyan ora kudu wedi nransfer megabyte malah atusan megabyte menyang bagean IN. Aku ngelingi saka praktik kita yen ing MySQL kita nransfer akeh nilai menyang bagean IN, contone, kita nransfer 100 megabyte sawetara nomer ing kana, banjur MySQL mangan nganti 10 gigabyte memori lan ora ana sing kedadeyan, kabeh dianggo ora apik.

Lan sing nomer loro yaiku ing ClickHouse, yen pitakon sampeyan nggunakake indeks, mula mesthi ora luwih alon tinimbang scan lengkap, yaiku yen sampeyan kudu maca meh kabeh tabel, bakal terus-terusan lan maca kabeh tabel. Umumé, dheweke bakal nemtokake dhewe.

Nanging ana sawetara kangelan. Contone, kasunyatan sing IN karo subquery ora nggunakake indeks. Nanging iki masalah kita lan kita kudu ndandani. Ora ana dhasar ing kene. Kita bakal ndandani *.

Lan liyane sing menarik yaiku yen sampeyan duwe panjaluk sing dawa banget lan pangolahan panjaluk sing disebarake, mula panyuwunan sing dawa banget iki bakal dikirim menyang saben server tanpa kompresi. Contone, 100 megabyte lan 500 server. Lan, miturut, sampeyan bakal duwe 50 gigabyte ditransfer liwat jaringan. Bakal ditularake lan kabeh bakal rampung kanthi sukses.

* wis nggunakake; Kabeh wis didandani kaya sing dijanjikake.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Lan kasus sing cukup umum yaiku nalika panjaluk saka API. Contone, sampeyan nggawe sawetara jinis layanan sampeyan dhewe. Lan yen ana wong sing butuh layanan sampeyan, mula sampeyan mbukak API lan rong dina mengko sampeyan bakal weruh yen ana kedadeyan sing ora bisa dingerteni. Kabeh wis overloaded lan sawetara panjalukan elek teka ing sing ngirim tau kedaden.

Lan mung ana siji solusi. Yen sampeyan wis mbukak API, sampeyan kudu ngethok. Contone, introduce sawetara jinis kuota. Ora ana pilihan normal liyane. Yen ora, dheweke bakal langsung nulis naskah lan bakal ana masalah.

Lan ClickHouse nduweni fitur khusus - quota calculation. Kajaba iku, sampeyan bisa nransfer kunci kuota. Iki, contone, ID pangguna internal. Lan kuota bakal diitung kanthi mandiri kanggo saben wong.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Saiki bab liyane menarik. Iki minangka replikasi manual.

Aku ngerti akeh kasus ing ngendi, sanajan ClickHouse duwe dhukungan replikasi sing dibangun, wong bisa niru ClickHouse kanthi manual.

Apa prinsipe? Sampeyan duwe pipa pangolahan data. Lan kerjane kanthi mandiri, contone, ing pusat data sing beda. Sampeyan nulis data sing padha kanthi cara sing padha ing ClickHouse. Bener, praktik nuduhake yen data isih bakal beda amarga sawetara fitur ing kode sampeyan. Mugi iku ing Panjenengan.

Lan saka wektu kanggo wektu sampeyan isih kudu nyelarasake kanthi manual. Contone, sapisan sasi admin nindakake rsync.

Nyatane, luwih gampang nggunakake replikasi sing dibangun ing ClickHouse. Nanging bisa uga ana sawetara contraindications, amarga iki sampeyan kudu nggunakake ZooKeeper. Aku ora bakal ngomong apa-apa ala ZooKeeper, ing asas, sistem dianggo, nanging mengkono sing wong ora nggunakake amarga saka java-phobia, amarga ClickHouse kuwi sistem apik, ditulis ing C ++, sing bisa digunakake lan kabeh bakal apik. Lan ZooKeeper ana ing java. Lan piye wae sampeyan ora pengin katon, nanging sampeyan bisa nggunakake replikasi manual.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

ClickHouse minangka sistem praktis. Dheweke njupuk menyang akun kabutuhan. Yen sampeyan duwe réplikasi manual, sampeyan bisa nggawe tabel Distribusi sing katon ing replika manual lan nindakake failover ing antarane. Lan malah ana pilihan khusus sing ngidini sampeyan ngindhari flops, sanajan garis sampeyan beda-beda kanthi sistematis.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Masalah liyane bisa uga muncul yen sampeyan nggunakake mesin tabel primitif. ClickHouse minangka konstruktor sing duwe macem-macem mesin meja. Kanggo kabeh kasus serius, kaya sing ditulis ing dokumentasi, gunakake tabel saka kulawarga MergeTree. Lan kabeh liyane - kaya ngono, kanggo kasus individu utawa kanggo tes.

Ing tabel MergeTree, sampeyan ora perlu duwe tanggal lan wektu. Sampeyan isih bisa nggunakake. Yen ora ana tanggal lan wektu, tulisen standar kasebut yaiku 2000. Iki bakal bisa lan ora mbutuhake sumber daya.

Lan ing versi anyar saka server, sampeyan malah bisa nemtokake manawa sampeyan duwe partisi khusus tanpa tombol partisi. Iku bakal padha.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Ing tangan liyane, sampeyan bisa nggunakake mesin Tabel primitif. Contone, isi data sapisan lan katon, corak lan mbusak. Sampeyan bisa nggunakake Log.

Utawa nyimpen volume cilik kanggo proses penengah yaiku StripeLog utawa TinyLog.

Memori bisa digunakake yen jumlah data cilik lan sampeyan mung bisa twiddle soko ing RAM.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

ClickHouse ora seneng data sing dinormalisasi.

Punika conto khas. Iki minangka jumlah URL sing akeh banget. Sampeyan sijine wong ing meja sabanjuré. Banjur padha mutusake kanggo gabung karo wong-wong mau, nanging iki ora bakal bisa, minangka aturan, amarga ClickHouse mung ndhukung Hash JOIN. Yen ana ora cukup RAM kanggo akeh data sing kudu disambungake, banjur JOIN ora bisa *.

Yen data kardinalitas dhuwur, aja kuwatir, simpen ing wangun denormalisasi, URL langsung ana ing meja utama.

* lan saiki ClickHouse uga nggabungake gabungan, lan kerjane ing kahanan sing data penengah ora cocog karo RAM. Nanging iki ora efektif lan rekomendasi tetep ditrapake.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Saperangan conto liyane, nanging aku wis mangu apa lagi anti-pola utawa ora.

ClickHouse duwe cacat sing dikenal. Ora ngerti carane nganyari *. Ing sawetara cara, iki malah apik. Yen sampeyan duwe sawetara data penting, umpamane, akuntansi, mula ora ana sing bisa ngirim, amarga ora ana nganyari.

* Dhukungan kanggo nganyari lan mbusak ing mode kumpulan wis ditambahake suwene suwe.

Nanging ana sawetara cara khusus sing ngidini nganyari kaya ing latar mburi. Contone, tabel kaya ReplaceMergeTree. Dheweke nggawe nganyari sajrone nggabungake latar mburi. Sampeyan bisa meksa iki nggunakake tabel ngoptimalake. Nanging aja nindakake iki asring banget, amarga bakal nimpa partisi.

Gabungan sing disebarake ing ClickHouse uga ora ditangani dening perencana pitakon.

Bad, nanging kadhangkala Ok.

Nggunakake ClickHouse mung kanggo maca data maneh nggunakake pilih *.

Aku ora bakal nyaranake nggunakake ClickHouse kanggo petungan cumbersome. Nanging iki ora sakabehe bener, amarga kita wis pindhah saka rekomendasi iki. Lan kita bubar nambahake kemampuan kanggo ngetrapake model pembelajaran mesin ing ClickHouse - Catboost. Lan ngganggu aku amarga aku mikir, "Apa medeni. Iki carane akeh siklus saben bait dadi metu! Aku pancene sengit mbuang jam ing bita.

Efektif nggunakake ClickHouse. Alexey Milovidov (Yandex)

Nanging aja wedi, instal ClickHouse, kabeh bakal apik. Yen ana, kita duwe komunitas. Miturut cara, masyarakat iku sampeyan. Lan yen sampeyan duwe masalah, paling ora sampeyan bisa menyang chatting kita, lan muga-muga bisa mbantu sampeyan.

Pitakonan

Matur nuwun kanggo laporan! Ngendi aku bisa sambat babagan nabrak ClickHouse?

Sampeyan bisa sambat kanggo kula pribadi sapunika.

Aku bubar miwiti nggunakake ClickHouse. Aku langsung dropped antarmuka cli.

Bejo sampeyan.

A little mengko aku tabrakan server karo pilih cilik.

Sampeyan duwe bakat.

Aku mbukak bug GitHub, nanging ora digatekake.

Kita bakal weruh.

Alexey ngapusi aku supaya nekani laporan kasebut, janji bakal ngandhani carane sampeyan ngakses data ing njero.

Prasaja banget.

Aku wingi ngerti iki. Luwih spesifik.

Ora ana trik sing nggegirisi ing kana. Ana mung komprèsi blok-by-blok. Standar kasebut yaiku LZ4, sampeyan bisa ngaktifake ZSTD *. Blok saka 64 kilobyte nganti 1 megabyte.

* ana uga dhukungan kanggo codec kompresi khusus sing bisa digunakake ing rantai karo algoritma liyane.

Apa pamblokiran mung data mentah?

Ora rampung mentah. Ana larik. Yen sampeyan duwe kolom numerik, banjur nomer ing baris diselehake ing larik.

Wis jelas.

Alexey, conto sing ana karo uniqExact liwat IPs, IE kasunyatan sing uniqExact njupuk maneh kanggo ngetung dening garis saka nomer, lan ing. Kepiye yen kita nggunakake kuping kanthi ngapusi lan nggawe proofreading? Yaiku, sampeyan wis ujar manawa ing disk kita ora beda banget. Yen kita maca garis saka disk lan cast, agregat kita bakal luwih cepet utawa ora? Utawa bakal kita isih gain rada kene? Iku misale jek kula sing dites iki, nanging sakperangan alesan ora nuduhake ing pathokan.

Aku bakal luwih alon tinimbang tanpa casting. Ing kasus iki, alamat IP kudu diurai saka string. Mesthi, ing ClickHouse, parsing alamat IP kita uga dioptimalake. Kita nyoba banget hard, nanging ana sing nomer ditulis ing wangun sepuluh ewu. Banget ora kepenak. Ing tangan liyane, fungsi uniqExact bakal luwih alon ing strings, ora mung amarga iki strings, nanging uga amarga spesialisasi beda saka algoritma dipilih. Strings mung diproses kanthi beda.

Apa yen kita njupuk jinis data sing luwih primitif? Contone, kita nulis id pangguna, sing ana ing, nulis minangka baris, banjur scrambled, bakal luwih nyenengake utawa ora?

Aku ora yakin. Aku bakal dadi luwih sedih, amarga sawise kabeh, nomer parsing masalah serius. Iku misale jek kula sing rowange iki malah menehi laporan carane angel iku kanggo parse nomer ing wangun sepuluh ewu, nanging Mungkin ora.

Alexey, matur nuwun kanthi sanget kanggo laporan! Lan matur nuwun kanthi sanget kanggo ClickHouse! Aku duwe pitakonan babagan rencana. Apa ana rencana kanggo fitur nganyari kamus kanthi ora lengkap?

Yaiku, reboot parsial?

Ya wis. Kaya kemampuan kanggo nyetel lapangan MySQL ana, yaiku nganyari sawise supaya mung data iki dimuat yen kamus gedhe banget.

Fitur sing menarik banget. Lan aku mikir sawetara wong ngusulake ing obrolan kita. Mungkin malah sampeyan.

Aku ora mikir.

Apik, saiki jebule ana rong panjaluk. Lan sampeyan bisa miwiti kanthi alon-alon. Nanging aku pengin ngelingake sampeyan manawa fitur iki cukup gampang diimplementasikake. Sing, ing teori, sampeyan mung kudu nulis nomer versi ing tabel lan banjur nulis: versi kurang saka kuwi lan kuwi. Iki tegese, paling kamungkinan, kita bakal nawakake iki kanggo para penggemar. Apa sampeyan antusias?

Ya, nanging, sayangé, ora ing C ++.

Apa kolega sampeyan ngerti carane nulis ing C++?

Aku bakal nemokake wong.

Agung*.

* fitur iki ditambahaké rong sasi sawise laporan - penulis pitakonan dikembangaké lan dikirim kang narik panyuwunan.

Matur suwun!

Hello! Matur nuwun kanggo laporan! Sampeyan nyatakake yen ClickHouse apik banget kanggo nggunakake kabeh sumber daya sing kasedhiya. Lan speaker ing jejere Luxoft ngomong babagan solusi kanggo Russian Post. Ngandika sing padha pancene disenengi ClickHouse, nanging padha ora digunakake tinimbang saingan utama sabenere amarga iki mangan munggah kabeh CPU. Lan padha ora bisa plug menyang arsitektur, menyang ZooKeeper karo dockers. Apa bisa mbatesi ClickHouse supaya ora nggunakake kabeh sing kasedhiya?

Ya, iku bisa lan gampang banget. Yen sampeyan pengin nggunakake inti luwih sithik, banjur tulis set max_threads = 1. Lan iku, bakal nglakokaké panjalukan ing siji inti. Kajaba iku, sampeyan bisa nemtokake setelan sing beda kanggo pangguna sing beda. Dadi ora masalah. Lan marang kolega saka Luxoft sing ora apik sing padha ora nemokake setelan iki ing dokumentasi.

Alexey, hello! Aku arep takon babagan pitakonan iki. Iki dudu sepisanan aku krungu manawa akeh wong sing wiwit nggunakake ClickHouse minangka panyimpenan kanggo log. Ing laporan sampeyan ngandika ora nindakake iki, IE sampeyan ora perlu kanggo nyimpen strings dawa. Apa sampeyan mikir babagan iki?

Kaping pisanan, log, minangka aturan, ora dawa strings. Ana, mesthi, pangecualian. Contone, sawetara layanan sing ditulis ing java mbuwang pangecualian, wis mlebu. Lan ing daur ulang tanpa wates, lan papan ing hard drive entek. Solusi kasebut gampang banget. Yen garis kasebut dawa banget, banjur dipotong. Apa tegese dawa? Puluhan kilobyte iku ala *.

* ing versi paling anyar saka ClickHouse, "granularitas indeks adaptif" diaktifake, sing ngilangi masalah nyimpen baris sing dawa.

Apa kilobyte normal?

Нормально.

Hello! Matur nuwun kanggo laporan! Aku wis takon babagan iki ing chatting, nanging aku ora ngelingi yen aku nampa jawaban. Apa ana rencana kanggo ngembangake bagean WITH kanthi cara CTE?

durung. Kita WITH bagean Luwih sembrono. Iku kaya fitur cilik kanggo kita.

Aku ngerti. Matur nuwun!

Matur nuwun kanggo laporan! Apik banget! Pitakonan global. Apa ana rencana kanggo ngowahi pambusakan data, bisa uga ana ing wangun stub?

kudune. Iki minangka tugas pertama kita ing antrian. Saiki kita aktif mikir babagan carane nindakake kabeh kanthi bener. Lan sampeyan kudu miwiti mencet keyboard *.

* menet tombol ing keyboard lan nindakake kabeh.

Apa iki bakal mengaruhi kinerja sistem utawa ora? Apa sisipan bakal cepet kaya saiki?

Bisa uga mbusak dhewe lan nganyari dhewe bakal abot banget, nanging iki ora bakal mengaruhi kinerja milih utawa kinerja sisipan.

Lan siji liyane pitakonan cilik. Ing presentasi sampeyan ngomong babagan kunci utama. Dadi, kita duwe pemisahan, sing saben wulan minangka standar, bener? Lan nalika kita nyetel rentang tanggal sing cocog karo sasi, banjur mung partisi iki sing diwaca, ta?

Ya.

Pitakonan. Yen kita ora bisa milih kunci utama, banjur apa bener kanggo nindakake kanthi khusus miturut kolom "Tanggal" supaya ing latar mburi ana kurang rearrangement saka data iki supaya pas ing proses luwih tertib? Yen sampeyan ora duwe pitakon sawetara lan sampeyan ora bisa milih kunci utama apa wae, apa kudu dilebokake tanggal ing kunci utama?

Ya.

Bisa uga ana akal kanggo nyelehake kolom ing kunci utama sing bakal ngompres data luwih apik yen diurutake miturut kolom iki. Contone, ID pangguna. Pangguna, umpamane, menyang situs sing padha. Ing kasus iki, sijine id pangguna lan wektu. Banjur data sampeyan bakal luwih apik dikompres. Kanggo tanggal, yen sampeyan pancene ora duwe lan ora tau duwe pitakon babagan tanggal, mula sampeyan ora kudu nglebokake tanggal kasebut ing kunci utama.

OK matur nuwun kanthi sanget!

Source: www.habr.com

Add a comment