Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Tungod kay ang ClickHouse usa ka espesyal nga sistema, importante nga tagdon ang mga peculiarities sa arkitektura niini kung gamiton kini. Niini nga taho, si Alexey maghisgot bahin sa mga panig-ingnan sa kasagarang mga sayup kung gamiton ang ClickHouse, nga mahimong mosangpot sa dili maayo nga trabaho. Gamit ang praktikal nga mga pananglitan, ipakita namon kung giunsa ang pagpili sa usa o lain nga pamaagi sa pagproseso sa datos mahimo’g mabag-o ang pasundayag pinaagi sa mga order sa kadako.

Kumusta tanan! Ako si Alexey, naghimo ko og ClickHouse.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Una, nagdali ako sa pagpahimuot kanimo dayon, dili ko isulti kanimo karon kung unsa ang ClickHouse. To be honest, gikapoy nako. Gisultihan ko ikaw sa matag higayon kung unsa kini. Ug tingali ang tanan nahibalo na.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Hinuon, isulti ko kanimo kung unsa ang posible nga rake, i.e. kung giunsa ang ClickHouse mahimong maabuso. Sa tinuud, dili ka angay mahadlok, tungod kay among gipalambo ang ClickHouse ingon usa ka sistema nga yano, kombenyente, ug nagtrabaho sa gawas sa kahon. Gi-install ang tanan, wala’y problema.

Bisan pa, kinahanglan nga hinumdoman nga kini nga sistema espesyalista ug dali ka nga mapandol sa usa ka dili kasagaran nga kaso sa paggamit nga magkuha sa kini nga sistema gikan sa komportable nga sona.

Busa, unsa ang mga rake? Sa panguna maghisgot ako bahin sa klaro nga mga butang. Ang tanan klaro sa tanan, ang tanan nakasabut sa tanan ug malipay nga sila maalamon kaayo, ug kadtong wala makasabut makakat-on og bag-ong butang.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang una nga pinakasimple nga pananglitan, nga, sa walay palad, kanunay nga mahitabo, mao ang daghang gidaghanon sa mga pagsal-ot nga adunay gagmay nga mga batch, i.e. usa ka dako nga gidaghanon sa gagmay nga mga pagsal-ot.

Kung atong hunahunaon kung giunsa paghimo sa ClickHouse ang usa ka insert, nan mahimo ka magpadala labing menos usa ka terabyte nga datos sa usa ka hangyo. Dili kini problema.

Ug tan-awon nato kung unsa ang kasagaran nga pasundayag. Pananglitan, kami adunay usa ka lamesa nga adunay datos sa Yandex.Metrica. Mga hit. 105 pipila ka mga kolum. 700 bytes nga wala ma-compress. Ug among i-insert sa maayong paagi ang mga batch sa usa ka milyon nga linya.

Gisulud namon sa lamesa sa MergeTree, nakuha ang tunga sa milyon nga laray matag segundo. Nindot. Sa usa ka replicated nga lamesa - kini mahimong mas gamay, mga 400 ka laray matag segundo.

Ug kon imong i-on ang insert sa korum, gamay ra ang imong makuha, apan maayo gihapon nga performance, 250 ka beses kada segundo. Ang Quorum Insertion usa ka undocumented feature sa ClickHouse*.

* sa 2020, dokumentado na.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Unsa ang mahitabo kung imong buhaton kini nga sayup? Gisulod namo ang usa ka laray sa lamesa sa MergeTree ug makakuha kamig 59 ka laray kada segundo. Kini 10 ka beses nga hinay. Sa ReplicatedMergeTree - 000 ka laray matag segundo. Ug kon ang korum mo-on, nan 6 ka linya matag segundo ang makuha. Sa akong opinyon, kini usa ka matang sa hingpit nga kabuang. Unsaon nimo paghinayhinay sa ingon niana? Nag-ingon pa sa akong T-shirt nga ang ClickHouse kinahanglan nga dili maghinayhinay. Apan bisan pa niana kini mahitabo usahay.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Sa pagkatinuod, kini ang atong kakulangan. Mahimo unta namo kini nga maayo, apan wala namo mahimo. Ug wala kami, tungod kay ang among script wala magkinahanglan niini. Naa na mi mga batch. Bag-o lang mi nakadawat og mga batch sa entrada, ug walay problema. I-plug kini ug maayo ang tanan. Apan, siyempre, ang tanang matang sa mga senaryo posible. Pananglitan, kung ikaw adunay usa ka hugpong sa mga server diin ang datos nahimo. Ug dili sila kanunay nga mag-insert sa data, apan kanunay gihapon sila nga nagsal-ot. Ug kinahanglan nimo nga likayan kini.

Gikan sa usa ka teknikal nga punto sa panglantaw, ang ubos nga linya mao nga sa diha nga ikaw sa pagbuhat sa usa ka insert sa ClickHouse, ang data dili sa pagkuha sa bisan unsa nga memtable. Wala gani mi tinuod nga MergeTree log structure, pero MergeTree lang, kay walay log o memTable. Gisulat ra dayon namo ang datos sa file system, nga nadugta na sa mga kolum. Ug kung ikaw adunay 100 ka mga kolum, nan labaw pa sa 200 nga mga file ang kinahanglan nga isulat sa usa ka lahi nga direktoryo. Kining tanan lisud kaayo.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ug ang pangutana mitungha: "Unsaon pagbuhat niini sa husto?" Kung ang ingon nga sitwasyon, kinahanglan pa nimo nga isulat ang datos sa ClickHouse.

Pamaagi 1. Kini ang pinakasayon ​​nga paagi. Gamita ang usa ka matang sa giapod-apod nga pila. Pananglitan, Kafka. Gikuha nimo ang datos gikan sa Kafka, gi-batch namon kini kausa sa usa ka segundo. Ug mamaayo ra ang tanan, imong girekord, maayo ang tanan.

Ang mga disbentaha mao nga ang Kafka usa ka lain nga lisud nga pag-apod-apod nga sistema. Kasabot pud ko kung naa na kay Kafka sa imong company. Maayo kini, kini komportable. Apan kung wala kini, nan kinahanglan nga maghunahuna ka tulo ka beses sa dili pa i-drag ang lain nga giapod-apod nga sistema sa imong proyekto. Ug busa angay nga hunahunaon ang mga alternatibo.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Pamaagi 2. Ania ang usa ka alternatibo sa daan nga eskwelahan ug sa samang higayon yano kaayo. Aduna ka bay usa ka matang sa server nga nagmugna sa imong mga troso. Ug gisulat lang niini ang imong mga troso sa usa ka file. Ug kausa sa usa ka segundo, pananglitan, usbon namon ang kini nga file, pag-abli og bag-o. Ug ang usa ka bulag nga script pinaagi sa cron o pipila nga daemon nagkuha sa labing karaan nga file ug gisulat kini sa ClickHouse. Kung magsulat ka og mga troso kausa sa usa ka segundo, maayo ra ang tanan.

Apan ang disbentaha niini nga pamaagi mao nga kung ang imong server diin ang mga troso namugna nawala sa usa ka dapit, nan ang data mawala usab.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Pamaagi 3. Adunay laing makapaikag nga paagi, nga walay temporaryo nga mga file sa tanan. Pananglitan, ikaw adunay usa ka matang sa advertising spinner o uban pang makapaikag nga daemon nga nagpatunghag datos. Ug mahimo nimong makolekta ang usa ka hugpong sa datos sa RAM, sa buffer. Ug kung molabay ang igo nga oras, imong ibutang kini nga buffer, maghimo usa ka bag-o, ug isulud kung unsa ang naipon na sa ClickHouse sa usa ka lahi nga hilo.

Sa laing bahin, ang datos mawala usab sa pagpatay -9. Kung ang imong server mawala, mawala nimo kini nga datos. Ug ang usa pa nga problema mao nga kung dili ka makasulat sa database, nan ang imong data matipon sa RAM. Ug bisan ang RAM mahurot, o mawala ra ang datos.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Pamaagi 4. Laing makaiikag nga paagi. Aduna ka bay proseso sa server. Ug mahimo niya ipadala ang data sa ClickHouse sa usa ka higayon, apan buhaton kini sa usa ka koneksyon. Pananglitan, nagpadala ko og hangyo sa http nga may transfer-encoding: chunked with insert. Ug kini makamugna og mga tipik nga dili kaayo talagsa, mahimo nimong ipadala ang matag linya, bisan kung adunay usa ka overhead alang sa pag-frame niini nga datos.

Bisan pa, sa kini nga kaso, ang datos ipadala dayon sa ClickHouse. Ug ang ClickHouse mismo ang mag-buffer kanila.

Apan adunay mga problema usab. Karon mawad-an ka sa datos, lakip na kung ang imong proseso gipatay ug kung ang proseso sa ClickHouse gipatay, tungod kay kini usa ka dili kompleto nga pagsal-ot. Ug sa ClickHouse pagsal-ot mao ang atomic sa pipila ka piho nga threshold sa gidak-on sa mga laray. Sa prinsipyo, kini usa ka makapaikag nga paagi. Mahimo usab nga gamiton.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Pamaagi 5. Ania ang laing makaiikag nga paagi. Kini usa ka matang sa server nga gipalambo sa komunidad alang sa pag-batch sa datos. Wala pa nako kini gitan-aw sa akong kaugalingon, mao nga dili ako makagarantiya sa bisan unsa. Bisan pa, wala’y mga garantiya alang sa ClickHouse mismo. Kini usab bukas nga tinubdan, apan sa laing bahin, mahimo kang maanad sa pipila ka kalidad nga sumbanan nga among gisulayan nga ihatag. Apan alang niini nga butang - wala ko kahibalo, adto sa GitHub, tan-awa ang code. Tingali maayo ang ilang gisulat.

*sa 2020, kinahanglan usab nga idugang sa konsiderasyon Balay sa Kuting.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Pamaagi 6. Ang laing paagi mao ang paggamit sa Buffer tables. Ang bentaha niini nga pamaagi mao nga kini mao ang kaayo sayon ​​sa pagsugod sa paggamit. Paghimo usa ka lamesa sa Buffer ug isulud kini.

Apan ang disbentaha mao nga ang problema dili hingpit nga masulbad. Kung sa rate sa tipo sa MergeTree kinahanglan nimo nga igrupo ang datos sa usa ka batch matag segundo, unya sa rate sa buffer table, kinahanglan nimo nga maggrupo labing menos hangtod sa pila ka libo matag segundo. Kung adunay labaw pa sa 10 matag segundo, kini dili maayo. Ug kung imong gisulud sa mga batch, nan imong nakita nga usa ka gatos ka libo nga linya matag segundo ang nakuha didto. Ug naa na kini sa medyo bug-at nga datos.

Ug usab ang mga buffer tables walay log. Ug kung adunay sayup sa imong server, nan ang data mawala.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ug isip usa ka bonus, bag-ohay lang kami adunay oportunidad sa pagkolekta sa datos gikan sa Kafka sa ClickHouse. Adunay usa ka makina sa lamesa - Kafka. Nagmugna ka lang. Ug mahimo nimong ibitay ang mga materyal nga pagtan-aw niini. Sa kini nga kaso, iyang kuhaon ang datos gikan sa Kafka ug isulod kini sa mga lamesa nga imong gikinahanglan.

Ug ang labi nga makapahimuot sa kini nga oportunidad mao nga wala namon kini nahimo. Kini usa ka bahin sa komunidad. Ug sa diha nga ako moingon "komunidad nga bahin", ako mosulti niini nga walay bisan unsa nga pagtamay. Gibasa namon ang code, naghimo usa ka pagrepaso, kinahanglan kini molihok nga maayo.

* sa 2020, adunay susama nga suporta alang sa RabbitMQ.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Unsa pa ang mahimong dili kombenyente o wala damha kung magsulud sa datos? Kung maghimo ka usa ka pangutana sa pagsulud sa mga kantidad ug pagsulat sa pipila nga gikalkula nga mga ekspresyon sa mga kantidad. Pananglitan, karon () usa usab ka gibanabana nga ekspresyon. Ug sa kini nga kaso, ang ClickHouse napugos sa paglansad sa tighubad niini nga mga ekspresyon alang sa matag linya, ug ang pasundayag mahulog sa mga order sa kadako. Mas maayo nga likayan kini.

* sa pagkakaron, ang problema hingpit nga nasulbad, wala nay performance regression kung mogamit ug mga ekspresyon sa VALUES.

Ang laing pananglitan diin adunay pipila ka mga problema mao ang kung ang imong data sa usa ka batch iya sa usa ka hugpong sa mga partisyon. Sa kasagaran, ang mga partisyon sa ClickHouse sa bulan. Ug kung magsal-ot ka usa ka hugpong sa usa ka milyon nga mga laray, ug adunay mga datos sa daghang mga tuig, nan adunay ka daghang dosena nga mga partisyon didto. Ug kini katumbas sa kamatuoran nga adunay mga batch sa daghang napulo ka beses nga mas gamay, tungod kay sa sulod sila kanunay nga gibahin sa mga partisyon.

* bag-o lang sa ClickHouse sa experimental mode midugang suporta alang sa compact format sa chunks ug chunks sa RAM nga may write-ahead log, nga halos hingpit nga makasulbad sa problema.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Karon hunahunaa ang ikaduha nga matang sa problema - pag-type sa datos.

Ang pag-type sa datos mahimong estrikto, ug usahay string. String - kini ang imong gikuha ug gipahayag nga naa nimo ang tanan nga mga natad sa tipo nga string. Makadaot. Dili nimo kinahanglan nga buhaton kana.

Atong mahibal-an kung giunsa kini buhaton sa husto sa mga kaso diin gusto nimo isulti nga kami adunay usa ka uma, usa ka pisi, ug tugoti ang ClickHouse nga mahibal-an kini sa iyang kaugalingon, apan dili ako maligo. Apan angayan gihapon nga maningkamot.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Pananglitan, kami adunay IP address. Sa usa ka kaso, among gitipigan kini isip usa ka hilo. Pananglitan, 192.168.1.1. Kung dili, kini usa ka gidaghanon sa tipo nga UInt32*. Ang 32 bits igo na alang sa IPv4 address.

Una, katingad-an, ang datos ma-compress nga parehas. Adunay usa ka kalainan, sigurado, apan dili ingon kadako. Busa walay espesyal nga mga problema sa disk I/O.

Apan adunay usa ka seryoso nga kalainan sa oras sa CPU ug oras sa pagpatuman sa pangutana.

Atong ihap ang gidaghanon sa talagsaon nga mga adres sa IP kon kini gitipigan isip mga numero. Kini nahimo nga 137 milyon nga linya matag segundo. Kung parehas sa mga linya, unya 37 milyon nga linya matag segundo. I don't know nganong nahitabo ni nga coincidence. Gibuhat nako kini nga mga hangyo sa akong kaugalingon. Apan bisan pa niana mga 4 ka beses nga hinay.

Ug kung imong kuwentahon ang kalainan sa disk space, nan adunay usa ka kalainan. Ug ang kalainan hapit usa ka quarter, tungod kay adunay daghang talagsaon nga mga adres sa IP. Ug kung adunay mga linya nga adunay gamay nga gidaghanon sa lainlaing mga kantidad, nan kini hilom nga gi-compress sa diksyonaryo sa parehas nga gidaghanon.

Ug ang upat ka pilo nga kalainan sa oras wala nahimutang sa dalan. Tingali ikaw, siyempre, wala’y pagtagad, apan kung nakita nako ang ingon nga kalainan, naguol ako.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Atong tagdon ang lainlaing mga kaso.

1. Usa ka kaso kung ikaw adunay pipila ka lainlain nga talagsaon nga mga kantidad. Sa kini nga kaso, naggamit kami usa ka yano nga praktis nga lagmit nahibal-an nimo ug magamit alang sa bisan unsang DBMS. Kining tanan makatarunganon dili lamang alang sa ClickHouse. Isulat lang ang mga numeric identifier sa database. Ug mahimo nimong i-convert sa mga string ug balik sa kilid sa imong aplikasyon.

Pananglitan, ikaw adunay usa ka rehiyon. Ug ikaw naningkamot sa pagluwas niini ingon nga usa ka hilo. Ug kini isulat didto: Moscow ug Moscow Region. Ug kung nakita nako nga ang "Moscow" nasulat didto, nan kini wala gihapon, ug kung kini MO, sa usa ka paagi nahimo nga hingpit nga kasubo. Mao kana kung pila ka bytes.

Hinuon, isulat lang namo ang Ulnt32 nga numero ug 250. Kami adunay 250 sa Yandex, apan ang imoha mahimong lahi. Sa kaso lang, isulti ko nga ang ClickHouse adunay built-in nga abilidad sa pagtrabaho sa usa ka geobase. Isulat ra nimo ang usa ka direktoryo nga adunay mga rehiyon, lakip ang usa ka hierarchical, i.e. adunay Moscow, Rehiyon sa Moscow, ug tanan nga imong kinahanglan. Ug mahimo ka magbag-o sa lebel sa hangyo.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang ikaduha nga kapilian parehas ra, apan adunay suporta sa sulod sa ClickHouse. Kini usa ka tipo sa datos sa Enum. Isulat ra nimo ang tanan nga mga kantidad nga imong kinahanglan sa sulod sa Enum. Pananglitan, ang matang sa device ug isulat didto: desktop, mobile, tablet, TV. 4 lamang nga mga kapilian.

Ang disbentaha mao nga kinahanglan nimo nga usbon matag karon ug unya. Usa ra ka kapilian ang gidugang. Naghimo mi og alter table. Sa tinuud, ang pag-usab sa lamesa sa ClickHouse libre. Ilabi na nga libre alang sa Enum tungod kay ang data sa disk wala mausab. Apan bisan pa niana, ang alter makakuha og kandado * sa lamesa ug kinahanglang maghulat hangtud makompleto ang tanang pinili. Ug pagkahuman lamang niini nga pagbag-o ipatuman, sa ato pa, adunay pipila nga mga kahasol.

* sa bag-o nga mga bersyon sa ClickHouse, ang ALTER gihimo nga hingpit nga dili pag-block.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang laing kapilian nga talagsaon alang sa ClickHouse mao ang koneksyon sa mga eksternal nga diksyonaryo. Mahimo nimong isulat ang mga numero sa ClickHouse, ug ibutang ang imong mga direktoryo sa bisan unsang sistema nga kombenyente alang kanimo. Pananglitan, mahimo nimong gamiton ang: MySQL, Mongo, Postgres. Mahimo ka pa nga maghimo sa imong kaugalingon nga microservice, nga magpadala niini nga datos pinaagi sa http. Ug sa lebel sa ClickHouse, nagsulat ka usa ka function nga magbag-o sa kini nga datos gikan sa mga numero ngadto sa mga kuwerdas.

Kini usa ka espesyal apan episyente kaayo nga paagi sa paghimo sa usa ka pag-apil sa usa ka gawas nga lamesa. Ug adunay duha ka kapilian. Sa usa ka kapilian, kini nga data bug-os nga ma-cache, hingpit nga anaa sa RAM ug ma-update sa pipila ka mga agwat. Ug sa laing kapilian, kung kini nga datos dili mohaum sa RAM, nan mahimo nimo kini nga partially cache.

Ania ang usa ka pananglitan. Adunay Yandex.Direct. Ug adunay usa ka kompanya sa advertising ug mga banner. Tingali adunay napulo ka milyon nga mga kompanya sa advertising. Ug halos mohaum sa RAM. Ug adunay binilyon nga mga bandera, dili kini angay. Ug naggamit kami usa ka naka-cache nga diksyonaryo gikan sa MySQL.

Ang problema ra kay ang naka-cache nga diksyonaryo molihok nga maayo kung ang hit rate hapit sa 100%. Kung kini mas gamay, unya kung ang pagproseso sa mga hangyo alang sa matag data pack, kinahanglan nga aktuwal nga kuhaon ang nawala nga mga yawe ug moadto aron makuha ang datos gikan sa MySQL. Mahitungod sa ClickHouse, makagarantiya gihapon ko nga - oo, dili kini mohinay, dili ako maghisgot bahin sa ubang mga sistema.

Ug isip usa ka bonus, ang mga diksyonaryo usa ka sayon ​​​​nga paagi sa pag-update sa datos sa ClickHouse nga retroactively. Sa ato pa, ikaw adunay usa ka taho sa mga kompanya sa advertising, ang tiggamit yano nga nagbag-o sa kompanya sa advertising ug sa tanan nga daan nga datos, sa tanan nga mga taho, kini nga datos usab nausab. Kung isulat nimo ang mga linya direkta sa lamesa, dili nimo kini ma-update.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Laing paagi kung wala ka mahibal-an kung asa makuha ang mga identifier alang sa imong mga kuwerdas. hash lang nimo. Ug ang labing kadali nga kapilian mao ang pagkuha sa usa ka 64-bit hash.

Ang bugtong problema mao nga kung ang hash 64-bit, nan hapit ka adunay mga pagbangga. Tungod kay kung adunay usa ka bilyon nga linya, nan ang posibilidad nahimo na nga tangible.

Ug dili kaayo maayo nga i-hash ang mga ngalan sa mga kompanya sa advertising nga ingon niana. Kung ang mga kampanya sa advertising sa lainlaing mga kompanya magkasagol, nan adunay usa ka butang nga dili masabtan.

Ug adunay usa ka yano nga limbong. Tinuod, dili usab kini angayan alang sa seryoso nga datos, apan kung adunay usa ka butang nga dili kaayo seryoso, unya idugang lang ang lain nga tigpaila sa kliyente sa yawe sa diksyonaryo. Ug unya ikaw adunay mga bangga, apan sulod lamang sa usa ka kliyente. Ug gigamit namon kini nga pamaagi alang sa link nga mapa sa Yandex.Metrica. Kami adunay mga url didto, kami nagtipig sa mga hash. Ug nahibal-an namon nga adunay mga panagbangi, siyempre. Apan kung ang usa ka panid gipakita, nan ang kalagmitan nga naa sa usa ka panid alang sa usa ka tiggamit nga ang pipila ka mga url magtapot ug kini mamatikdan, nan kini mahimong mapasagdan.

Ingon usa ka bonus, alang sa daghang mga operasyon, igo ra ang mga hash ug ang mga kuwerdas mismo dili matipig bisan diin.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Laing pananglitan kung ang mga kuwerdas mubo, sama sa mga domain sa website. Mahimo silang tipigan sama sa naandan. O, pananglitan, ang browser language ru kay 2 bytes. Syempre, naluoy ko sa mga byte, pero ayaw kabalaka, 2 bytes dili sayang. Palihog ipabilin kini nga mao, ayaw kabalaka.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang laing kaso mao kung, sa kasukwahi, adunay daghang mga kuldas ug sa samang higayon adunay daghang mga talagsaon nga mga butang sa kanila, ug bisan ang set posible nga walay kutub. Ang kasagaran nga pananglitan mao ang mga prase sa pagpangita o mga url. Pangitag mga hugpong sa mga pulong, lakip ang tungod sa mga typo. Atong tan-awon kung pila ka talagsaon nga mga prase sa pagpangita matag adlaw. Ug kini nahimo nga hapit katunga sa tanan nga mga panghitabo. Ug sa kini nga kaso, mahimo nimong hunahunaon nga kinahanglan nimo nga i-normalize ang datos, ihap ang mga identifier, ibutang kini sa usa ka lahi nga lamesa. Apan dili nimo kinahanglan nga buhaton kana. Hupti lang kini nga mga linya sama sa naandan.

Mas maayo - ayaw pag-imbento bisan unsa, tungod kay kung gilain nimo kini, kinahanglan nimo nga mag-apil. Ug kini nga pag-apil mao ang labing maayo nga random nga pag-access sa memorya, kung kini mohaum pa sa memorya. Kung dili kini angay, nan adunay mga problema sa kinatibuk-an.

Ug kung ang datos gitipigan sa lugar, nan kini gibasa lamang sa husto nga pagkahan-ay gikan sa file system ug ang tanan maayo.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Kung ikaw adunay mga url o uban pang komplikado nga taas nga hilo, nan kinahanglan nimo nga hunahunaon ang kamatuoran nga mahimo nimong kalkulahon ang pila nga pagpislit sa daan ug isulat kini sa usa ka lahi nga kolum.

Alang sa mga url, pananglitan, mahimo nimong tipigan ang domain nga gilain. Ug kung kinahanglan gyud nimo ang usa ka domain, gamita lang kini nga kolum, ug ang mga url mamakak, ug dili nimo kini mahikap.

Atong tan-awon kung unsa ang kalainan. Ang ClickHouse adunay espesyal nga function nga nagkalkula sa domain. Kini paspas kaayo, gi-optimize namon kini. Ug, sa pagkamatinud-anon, wala gani kini nagsunod sa RFC, apan bisan pa niana gikonsiderar niini ang tanan nga atong gikinahanglan.

Ug sa usa ka kaso, makuha ra namo ang mga url ug kuwentahon ang domain. Kini nahimo nga 166 milliseconds. Ug kung magkuha ka usa ka andam nga domain, nan kini nahimo nga 67 milliseconds, nga mao, hapit tulo ka beses nga mas paspas. Ug mas paspas, dili tungod kay kinahanglan namon nga maghimo pipila nga mga kalkulasyon, apan tungod kay gamay ra ang among gibasa nga datos.

Alang sa pipila ka rason, ang usa ka hangyo, nga mas hinay, makakuha og mas paspas sa gigabytes kada segundo. Tungod kay nagbasa kini og daghang gigabytes. Kini usa ka hingpit nga sobra nga datos. Ang hangyo daw mas paspas nga modagan, apan mas dugay aron makompleto.

Ug kung imong tan-awon ang gidaghanon sa datos sa disk, kini nahimo nga ang URL 126 megabytes, ug ang domain 5 megabytes lamang. Kini nahimo nga 25 ka beses nga mas gamay. Bisan pa, ang pangutana 4 ka beses nga mas paspas. Apan kana tungod kay ang datos init. Ug kung kini bugnaw, tingali kini 25 ka beses nga mas paspas tungod sa disk I / O.

Pinaagi sa dalan, kung imong susihon kung unsa ka gamay ang domain kaysa sa URL, nan kini nahimo nga mga panahon sa 4. Apan sa usa ka hinungdan, ang datos sa disk nagkuha sa 25 ka beses nga dili kaayo. Ngano man? Tungod sa compression. Ug ang url gi-compress, ug ang domain gi-compress. Apan kasagaran ang url adunay daghang basura.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ug, siyempre, angay nga gamiton ang husto nga mga tipo sa datos nga espesipikong gidisenyo alang sa husto nga mga kantidad o kana nga angay. Kung naa ka sa IPv4 unya tipigi ang UInt32*. Kung IPv6, unya FixedString(16), tungod kay ang IPv6 address kay 128 bits, ie store direkta sa binary format.

Apan komosta kon ikaw usahay adunay IPv4 nga mga adres ug usahay IPv6? Oo, mahimo nimong tipigan ang duha. Usa ka kolum alang sa IPv4, lain alang sa IPv6. Siyempre, adunay kapilian sa pagmapa sa IPv4 ngadto sa IPv6. Kini usab molihok, apan kung kanunay nimo kinahanglan ang usa ka IPv4 nga adres sa imong mga hangyo, nan maayo nga ibutang kini sa usa ka lahi nga kolum.

* Ang ClickHouse karon aduna nay bulag nga IPv4, IPv6 nga mga tipo sa datos nga nagtipig sa datos sama ka episyente sa mga numero, apan nagrepresentar niini nga sayon ​​sama sa mga kuwerdas.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Importante usab nga hinumdoman nga kini angay nga preprocessing daan sa datos. Pananglitan, ang pipila ka hilaw nga mga troso moabut kanimo. Ug, tingali, dili nimo kini ibutang dayon sa ClickHouse, bisan kung makatintal kaayo nga wala’y mahimo ug ang tanan molihok. Apan takus gihapon ang paghimo sa mga kalkulasyon nga posible.

Pananglitan, ang bersyon sa browser. Sa pipila ka silingan nga departamento, nga dili nako gusto nga ipunting ang tudlo, ang bersyon sa browser gitipigan didto sama niini, nga mao, ingon usa ka hilo: 12.3. Ug unya, aron makahimo usa ka taho, gikuha nila kini nga hilo ug gibahin sa usa ka laray, ug dayon sa una nga elemento sa laray. Natural, ang tanan mohinay. Nangutana ko nganong ila ning gibuhat. Gisultihan ko nila nga dili nila gusto ang ahat nga pag-optimize. Ug dili ko ganahan ug premature pessimism.

Mao nga sa kini nga kaso mas husto nga bahinon sa 4 nga mga kolum. Ayaw kahadlok dinhi, tungod kay kini ang ClickHouse. Ang ClickHouse usa ka database sa kolum. Ug ang labi ka hapsay nga gagmay nga mga kolum, labi ka maayo. Adunay 5 BrowserVersion, paghimo og 5 nga mga kolum. Maayo kini.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Karon hunahunaa kung unsa ang buhaton kung ikaw adunay daghang taas nga mga kuwerdas, taas kaayo nga mga han-ay. Dili nila kinahanglan nga tipigan sa ClickHouse sa tanan. Hinuon, mahimo nimong tipigan ang pipila ka identifier sa ClickHouse. Ug kining taas nga mga linya nagduso kanila ngadto sa laing sistema.

Pananglitan, ang usa sa among mga serbisyo sa analytics adunay pipila ka mga parameter sa panghitabo. Ug kung daghang mga parameter ang moabut sa mga panghitabo, gitipigan ra naton ang una nga 512 nga makit-an. Kay ang 512 dili luoy.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ug kung dili ka makadesisyon sa imong mga tipo sa datos, nan mahimo ka usab magsulat sa datos sa ClickHouse, apan sa usa ka temporaryo nga lamesa sa tipo sa Log, nga espesyal alang sa temporaryo nga datos. Pagkahuman niana, mahimo nimong analisahon kung unsang klase sa pag-apod-apod sa mga kantidad ang naa kanimo, kung unsa ang kasagaran didto ug paghimo sa husto nga mga tipo.

* Karon ang ClickHouse adunay usa ka tipo sa datos Ubos nga Cardinality nga nagtugot kanimo sa episyente nga pagtipig sa mga kuwerdas nga adunay gamay nga paningkamot.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Karon tagda ang laing makapaikag nga kaso. Usahay ang mga butang molihok sa usa ka talagsaon nga paagi alang sa mga tawo. Ako moadto ug tan-awon kini. Ug ingon dayon nga kini gihimo sa pipila ka eksperyensiyado, maalamon nga admin nga adunay daghang kasinatian sa pag-set up sa MySQL nga bersyon 3.23.

Dinhi atong makita ang usa ka libo nga mga lamesa, ang matag usa niini naglangkob sa nahibilin sa pagbahin niini dili klaro kung unsa ang usa ka libo.

Sa prinsipyo, gitahud nako ang kasinatian sa ubang mga tawo, lakip ang pagsabut kung unsang klase sa pag-antos ang maangkon niini nga kasinatian.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ug ang mga hinungdan labi pa o dili kaayo klaro. Kini ang mga daan nga stereotypes nga mahimong natipon samtang nagtrabaho sa ubang mga sistema. Pananglitan, ang MyISAM nga mga lamesa walay clustered primary key. Ug kini nga paagi sa pagpaambit sa datos mahimong usa ka desperado nga pagsulay aron makuha ang parehas nga gamit.

Ang laing rason mao nga lisud ang paghimo sa bisan unsang mga operasyon sa pag-usab sa dagkong mga lamesa. Ang tanan ma-block. Bisan sa modernong mga bersyon sa MySQL, kini nga problema dili na seryoso.

O, pananglitan, microsharding, apan labaw pa niana sa ulahi.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Sa ClickHouse, dili nimo kinahanglan nga buhaton kini, tungod kay, una, ang panguna nga yawe gipundok, ang datos gimando sa panguna nga yawe.

Ug usahay ang mga tawo mangutana kanako: "Giunsa ang paghimo sa mga pangutana sa range sa ClickHouse nga nagbag-o sa gidak-on sa lamesa?". Giingon ko nga wala gyud kini mausab. Pananglitan, ikaw adunay usa ka lamesa nga adunay usa ka bilyon nga mga laray ug ikaw nagbasa sa usa ka han-ay sa usa ka milyon nga mga laray. Maayo ra ang tanan. Kung ang lamesa adunay usa ka trilyon nga mga laray ug nagbasa ka usa ka milyon nga mga laray, nan kini hapit parehas.

Ug, ikaduha, ang bisan unsang mga piraso sama sa manwal nga mga partisyon dili kinahanglan. Kung mosulod ka ug tan-awon kung unsa ang naa sa file system, imong makita nga ang usa ka lamesa usa ka seryoso nga butang. Ug didto sa sulod adunay usa ka butang nga sama sa mga partisyon. Kana mao, gibuhat sa ClickHouse ang tanan alang kanimo ug dili nimo kinahanglan nga mag-antos.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang pagbag-o sa ClickHouse libre kung usbon ang pagdugang / paghulog sa kolum.

Ug dili ka angay maghimo ug gagmay nga mga lamesa, tungod kay kung adunay 10 ka laray o 10 ka laray sa imong lamesa, dili kini hinungdanon. Ang ClickHouse usa ka sistema nga nag-optimize sa throughput, dili latency, busa wala’y kahulogan ang pagproseso sa 000 ka linya.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Husto nga gamiton ang usa ka dako nga lamesa. Isalikway ang daan nga mga stereotype, ang tanan mamaayo ra.

Ug isip usa ka bonus, sa pinakabag-o nga bersyon, kita adunay oportunidad sa paghimo sa usa ka arbitraryong partitioning yawe aron sa pagbuhat sa tanan nga mga matang sa maintenance operasyon sa tagsa-tagsa nga partitions.

Pananglitan, kinahanglan nimo ang daghang gagmay nga mga lamesa, pananglitan, kung kinahanglan nga iproseso ang pipila nga mga intermediate nga datos, makadawat ka mga tipik ug kinahanglan nimo nga himuon ang usa ka pagbag-o sa kanila sa wala pa magsulat sa katapusang lamesa. Alang niini nga kaso, adunay usa ka talagsaon nga makina sa lamesa - StripeLog. Kini sama sa TinyLog, mas maayo.

* Karon ang ClickHouse adunay daghan pa lamesa function input.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang laing anti-pattern mao ang microsharding. Pananglitan, kinahanglan nimo nga shard data ug ikaw adunay 5 nga mga server, ug ugma adunay 6 nga mga server. Ug naghunahuna ka kung giunsa pagbalanse ang kini nga datos. Ug sa baylo, wala ka nagbahin sa 5 ka shards, apan sa 1 ka shards. Ug dayon imong mapa ang matag usa niini nga mga microshard sa usa ka lahi nga server. Ug magmalampuson ka sa usa ka server, pananglitan, 000 ClickHouse, pananglitan. Panagbulag nga pananglitan sa lahi nga mga pantalan o lahi nga mga database.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Apan sa ClickHouse kini dili kaayo maayo. Tungod kay bisan usa ka pananglitan sa ClickHouse misulay sa paggamit sa tanan nga magamit nga mga kapanguhaan sa server aron maproseso ang usa ka hangyo. Kana mao, ikaw adunay usa ka matang sa server ug didto, pananglitan, 56 ka mga core sa processor. Nagdagan ka usa ka pangutana nga nagkinahanglag usa ka segundo ug mogamit kini nga 56 ka mga cores. Ug kung gibutang nimo ang 200 ClickHouses sa usa ka server didto, nan kini nahimo nga 10 nga mga thread ang magsugod. Sa kinatibuk-an, ang tanan mahimong dili maayo.

Ang laing rason mao nga ang pag-apod-apod sa trabaho niining mga higayona mahimong dili patas. Ang uban mahuman og sayo, ang uban mahuman sa ulahi. Kung kining tanan nahitabo sa usa ka higayon, nan ang ClickHouse mismo makahunahuna kung giunsa ang husto nga pag-apod-apod sa datos taliwala sa mga sapa.

Ug ang laing rason mao nga ikaw adunay interprocessor nga komunikasyon sa TCP. Ang datos kinahanglan nga serialized, deserialized, ug kini usa ka dako nga gidaghanon sa mga microshards. Dili lang kini molihok.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Laing antipattern, bisan kung dili kini matawag nga antipattern. Kini usa ka dako nga kantidad sa pre-aggregation.

Sa kinatibuk-an, maayo ang preaggregation. Adunay ka usa ka bilyon nga mga laray, imong giusa kini ug nahimo kini nga 1 ka mga laray, ug karon ang pangutana gipatuman dayon. Maayo ang tanan. Ingon niana ang imong mahimo. Ug alang niini, bisan ang ClickHouse adunay usa ka espesyal nga tipo sa lamesa nga AggregatingMergeTree nga naghimo sa pagdugang nga pagtipon samtang gisulud ang datos.

Apan adunay mga higayon nga maghunahuna ka nga mag-aggregate kami og data nga sama niini ug mag-aggregate og data nga sama niini. Ug sa pipila ka silingan nga departamento, dili ko gusto nga isulti kung hain ang usa, gigamit nila ang mga lamesa sa SummingMergeTree alang sa pagsumada sa panguna nga yawe, ug 20 nga mga kolum gigamit ingon panguna nga yawe. Sa kaso lang, akong giusab ang mga ngalan sa pipila ka mga kolum alang sa panagkunsabo, apan kana mahitungod niini.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ug ang ingon nga mga problema mitungha. Una, ang gidaghanon sa datos nga naa nimo dili kaayo mokunhod. Pananglitan, kini pagkunhod sa tulo ka beses. Tulo ka beses nga usa ka maayong presyo aron maabut ang walay kutub nga pag-analisa nga moabut uban ang wala’y panagsama nga datos. Kung ang datos giipon, nan makakuha ka lamang sa makalolooy nga estadistika imbes nga analytics.

Ug unsa ang labi ka maayo? Nga kini nga mga tawo gikan sa sunod nga departamento, adto ug mangutana usahay sa pagdugang sa usa pa ka kolum sa panguna nga yawe. Sa ato pa, giusa namo ang datos nga sama niini, ug karon gusto namong gamay pa. Apan walay alter primary key sa ClickHouse. Busa, kinahanglan nimong isulat ang pipila ka mga script sa C ++. Ug dili ko ganahan sa mga script, bisan kung kini naa sa C++.

Ug kung imong tan-awon kung unsa ang gibuhat sa ClickHouse, nan ang dili naipon nga datos mao gyud ang senaryo kung diin kini natawo. Kung gigamit nimo ang ClickHouse alang sa dili giipon nga datos, nan imong gibuhat ang tanan nga husto. Kung nag-aggregate ka, nan kini usahay mapasaylo.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang laing makapaikag nga kaso mao ang mga hangyo sa usa ka walay katapusan nga loop. Usahay moadto ako sa pipila ka server sa produksiyon ug tan-awon ang lista sa mga proseso sa show didto. Ug sa matag higayon nga madiskobrehan nako nga adunay makalilisang nga nahitabo.

Pananglitan, ania kini. Klaro dayon nga posible nga buhaton ang tanan sa usa ka hangyo. Isulat lang ang url ug ang listahan didto.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ngano nga daghang ingon nga mga hangyo sa usa ka walay katapusan nga loop dili maayo? Kung ang indeks wala gigamit, nan adunay daghang mga pagpasa sa parehas nga datos. Apan kung gigamit ang usa ka index, pananglitan, ikaw adunay panguna nga yawe sa ru ug gisulat nimo ang url = usa ka butang didto. Ug sa imong hunahuna nga ang usa ka url mabasa gikan sa lamesa, maayo ra ang tanan. Pero sa tinuod wala. Tungod kay ang ClickHouse naghimo sa tanan sa mga batch.

Kung kinahanglan niya nga basahon ang pila ka sakup sa datos, magbasa siya labi pa, tungod kay ang indeks sa ClickHouse gamay ra. Kini nga indeks wala magtugot kanimo sa pagpangita sa usa ka indibidwal nga laray sa lamesa, usa lamang ka matang sa range. Ug ang datos gi-compress sa mga bloke. Aron mabasa ang usa ka linya, kinahanglan nimong kuhaon ang tibuuk nga bloke ug i-uncompress kini. Ug kung magpadagan ka daghang mga pangutana, daghan ka nga mga interseksyon sa mga, ug daghan ka nga trabaho nga buhaton nga balik-balik.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ug isip bonus, makita nimo nga sa ClickHouse dili ka angay mahadlok nga ibalhin bisan ang mga megabytes ug bisan ang gatusan ka mga megabytes sa seksyon sa IN. Nahinumdom ko gikan sa among praktis nga kung magpasa kami usa ka hugpong sa mga kantidad sa seksyon sa IN sa MySQL, pananglitan, gipasa namon ang 100 megabytes sa pipila nga mga numero didto, unya ang MySQL mokaon sa 10 gigabytes nga memorya ug wala’y lain nga mahitabo sa. kini, ang tanan molihok nga dili maayo.

Ug ang ikaduha nga butang mao nga sa ClickHouse, kung ang imong mga pangutana mogamit usa ka indeks, nan kini kanunay nga dili hinay kaysa usa ka bug-os nga pag-scan, i.e. kung kinahanglan nimo nga basahon ang hapit sa tibuuk nga lamesa, kini magsunud-sunod ug basahon ang tibuuk nga lamesa. Sa kinatibuk-an, mahibal-an niya kini.

Apan, adunay pipila ka mga kalisdanan. Pananglitan, kana nga IN nga adunay subquery wala mogamit sa indeks. Apan kini ang among problema ug kinahanglan namon nga ayohon kini. Walay pundamental dinhi. Buhaton nato kini*.

Ug ang laing makapaikag nga butang mao nga kung ikaw adunay usa ka taas nga hangyo ug ang giapod-apod nga pagproseso sa hangyo nagpadayon, nan kini nga taas nga hangyo ipadala sa matag server nga wala’y compression. Pananglitan, 100 megabytes ug 500 server. Ug, sumala niana, 50 gigabytes ang ibalhin sa network. Kini ibalhin ug unya ang tanan malamposong ipatuman.

* nagamit na; ang tanan naayo sumala sa gisaad.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ug kini kasagaran kung ang mga hangyo gikan sa API. Pananglitan, nakahimo ka og usa ka matang sa serbisyo. Ug kung adunay usa nga nanginahanglan sa imong serbisyo, unya imong giablihan ang API ug sa literal duha ka adlaw ang milabay imong makita nga adunay usa ka butang nga dili masabtan nga nahitabo. Ang tanan nabug-atan ug ang pipila ka makalilisang nga mga hangyo moabut nga dili gyud unta mahimo.

Ug adunay usa lamang ka solusyon. Kung giablihan nimo ang API, kinahanglan nimo kini putlon. Pananglitan, sa pagsulod sa pipila ka mga quota. Walay laing makatarunganon nga mga kapilian. Kung dili, mosulat dayon sila og script ug adunay mga problema.

Ug ang ClickHouse adunay espesyal nga bahin - kini ang pagkalkula sa mga quota. Dugang pa, mahimo nimong ibalhin ang imong quota key. Kini, pananglitan, usa ka internal nga user ID. Ug ang mga quota kalkulado nga independente alang sa matag usa niini.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Karon laing makapaikag nga butang. Kini usa ka manual nga replikasyon.

Nahibal-an ko ang daghang mga kaso diin, bisan pa nga ang ClickHouse adunay built-in nga suporta sa pagkopya, ang mga tawo nagsundog sa ClickHouse nga mano-mano.

Unsa ang prinsipyo? Adunay ka pipeline sa pagproseso sa datos. Ug kini nagtrabaho nga independente, pananglitan, sa lainlaing mga sentro sa datos. Gisulat nimo ang parehas nga datos sa parehas nga paagi sa ClickHouse, ingon kaniadto. Tinuod, gipakita sa pagpraktis nga ang datos magkalainlain gihapon tungod sa pipila nga mga lahi sa imong code. Nanghinaut ko nga sa imoha.

Ug matag karon ug unya kinahanglan nimo nga mano-mano ang pag-sync. Pananglitan, kausa sa usa ka bulan ang mga admin naghimo og rsync.

Sa tinuud, labi ka dali nga gamiton ang built-in nga replikasyon sa ClickHouse. Apan tingali adunay pipila ka mga contraindications, tungod kay alang niini kinahanglan nimo nga gamiton ang ZooKeeper. Dili ako mosulti og bisan unsa nga dili maayo mahitungod sa ZooKeeper, sa prinsipyo, ang sistema nagtrabaho, apan kini mahitabo nga ang mga tawo dili mogamit niini tungod sa java-phobia, tungod kay ang ClickHouse usa ka maayo nga sistema nga gisulat sa C ++ nga imong magamit ug mamaayo ra ang tanan. Ug ZooKeeper sa java. Ug sa usa ka paagi dili nimo gusto nga tan-awon, apan mahimo nimo gamiton ang manwal nga pagkopya.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang ClickHouse usa ka praktikal nga sistema. Gikonsiderar niini ang imong mga panginahanglan. Kung adunay ka manwal nga replikasyon, mahimo ka nga maghimo usa ka Na-apod-apod nga lamesa nga nagtan-aw sa imong manual nga mga replika ug naghimo usa ka failover sa taliwala nila. Ug adunay bisan usa ka espesyal nga kapilian nga nagtugot kanimo sa paglikay sa mga flop, bisan kung ang imong mga linya sistematikong magkalainlain.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Dugang pa, mahimong adunay mga problema kung mogamit ka sa mga makina sa primitive nga lamesa. Ang ClickHouse usa ka tigtukod nga adunay daghang lainlaing mga makina sa lamesa. Para sa tanang seryosong kaso, sumala sa nahisulat sa dokumentasyon, gamita ang mga lamesa sa pamilyang MergeTree. Ug ang tanan nga uban pa - mao kini, alang sa indibidwal nga mga kaso o alang sa mga pagsulay.

Sa usa ka lamesa sa MergeTree, dili nimo kinahanglan nga adunay bisan unsang petsa ug oras. Mahimo pa nimo gamiton. Kung walay petsa ug oras, isulat nga ang default kay 2000. Kini molihok ug dili magkinahanglan og mga kapanguhaan.

Ug sa bag-ong bersyon sa server, mahimo nimong ipiho nga adunay ka naandan nga partisyon nga wala’y yawe sa partisyon. Kini mahimong sama.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Sa laing bahin, ang mga primitive nga makina sa lamesa mahimong magamit. Pananglitan, pun-a ang datos sa makausa ug tan-awa, i-twist ug tangtangon. Mahimo nimong gamiton ang Log.

O ang pagtipig sa gagmay nga mga volume alang sa intermediate nga pagproseso mao ang StripeLog o TinyLog.

Ang panumduman mahimong magamit kung adunay gamay nga kantidad sa datos ug i-twist lang ang usa ka butang sa RAM.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Ang ClickHouse dili ganahan kaayo sa renormalized data.

Ania ang usa ka tipikal nga pananglitan. Kini usa ka dako nga gidaghanon sa mga url. Imong gibutang sila sa tapad nga lamesa. Ug unya nakahukom kami nga buhaton ang JOIN uban kanila, apan kini dili molihok, ingon nga usa ka lagda, tungod kay ang ClickHouse nagsuporta lamang sa Hash JOIN. Kung wala’y igo nga RAM alang sa daghang data nga makonektar, nan ang JOIN dili molihok *.

Kung ang datos adunay taas nga kardinal, nan ayaw kabalaka, tipigi kini sa usa ka denormalized nga porma, ang mga URL direkta nga gibutang sa main table.

* ug karon ang ClickHouse adunay usa ka merge join usab, ug kini molihok sa mga kondisyon diin ang intermediate data dili mohaum sa RAM. Apan kini dili epektibo ug ang rekomendasyon nagpabilin nga balido.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Pipila pa nga mga pananglitan, apan nagduhaduha na ako kung kini mga anti-pattern o dili.

Ang ClickHouse adunay usa ka nahibal-an nga disbentaha. Dili siya kabalo unsaon pag update *. Sa usa ka diwa, kini maayo pa. Kung adunay ka hinungdanon nga datos, pananglitan, accounting, wala’y usa nga makapadala niini, tungod kay wala’y mga update.

* Ang suporta alang sa pag-update ug pagtangtang sa batch mode dugay na nga gidugang.

Apan adunay pipila ka mga espesyal nga paagi nga nagtugot sa mga update nga makita sa background. Pananglitan, ang mga lamesa sa tipo nga ReplaceMergeTree. Naghimo sila og mga update sa panahon sa paghiusa sa background. Mahimo nimong pugson kini gamit ang optimize table. Apan ayaw kini buhata kanunay, tungod kay kini hingpit nga ma-overwrite ang partisyon.

Giapod-apod nga mga JOIN sa ClickHouse - kini usab dili maayo nga pagdumala sa tigplano sa pangutana.

Dili maayo, apan usahay OK.

Gamit ang ClickHouse para lang basahon balik ang data gamit ang pili*.

Dili nako irekomendar ang paggamit sa ClickHouse alang sa dagkong mga kalkulasyon. Apan dili kini hingpit nga tinuod, tungod kay nagpalayo na kami sa kini nga rekomendasyon. Ug bag-o lang namo gidugang ang abilidad sa paggamit sa mga modelo sa pagkat-on sa makina sa ClickHouse - Catboost. Ug kini nakapabalaka kanako, tungod kay sa akong hunahuna: "Unsa ka makalilisang. Mao kini kung pila ka mga siklo matag byte ang nahimo! Kini usa ka kaluoy alang kanako nga magsugod sa mga siklo sa orasan sa mga byte.

Epektibo nga paggamit sa ClickHouse. Alexey Milovidov (Yandex)

Apan ayaw kahadlok, i-install ang ClickHouse, mamaayo ra ang tanan. Kung naa man, naa tay komunidad. Pinaagi sa dalan, ang komunidad mao ikaw. Ug kung naa moy mga problema, atleast adto ka sa among chat, ug hinaot nga matabangan ka.

Ang imong mga pangutana

Salamat sa report! Asa magreklamo bahin sa pag-crash sa ClickHouse?

Mahimo ka nga moreklamo kanako sa personal karon.

Bag-o lang ako nagsugod sa paggamit sa ClickHouse. Gihulog dayon ang cli interface.

Unsa ka score.

Usa ka gamay nga ulahi, akong gihulog ang server nga adunay gamay nga pagpili.

May talent ka.

Giablihan nako ang usa ka bug sa GitHub, apan wala kini panumbalinga.

Makita naton.

Gilimbongan ako ni Aleksey sa pagtambong sa taho, nga nagsaad nga isulti kanako kung giunsa nimo pagpislit ang datos sa sulod.

Simple kaayo.

Mao ni akong narealize gahapon. Dugang espesipiko.

Walay makalilisang nga mga limbong. Block-by-block compression lang kini. Ang default mao ang LZ4, mahimo nimong palihokon ang ZSTD*. Mga bloke gikan sa 64 kilobytes ngadto sa 1 megabyte.

* Adunay usab suporta alang sa espesyal nga compression codec nga magamit sa kadena sa ubang mga algorithm.

Hilaw nga datos ra ba ang mga bloke?

Dili gyud hilaw. Adunay mga arrays. Kung ikaw adunay usa ka numero nga kolum, nan ang mga numero sa usa ka laray gipatong sa usa ka laray.

Kini tin-aw.

Alexey, usa ka pananglitan nga adunay uniqExact sa mga IP, i.e. ang kamatuoran nga ang uniqExact mas dugay sa pag-ihap pinaagi sa mga kuwerdas kaysa sa mga numero, ug uban pa. Unsa na man kon atong gamiton ang atong mga dalunggan ug usa ka paglimbong ug ipagawas sa panahon sa pag-proofread? Sa ato pa, ingon nimo giingon nimo nga dili kaayo lahi sa disk. Kung atong basahon ang mga linya gikan sa disk, i-cast, unya aduna ba kita'y mga aggregate nga mas paspas o dili? O gamay ra ba gihapon ang kita dinhi? Para nako gisulayan nimo kini, apan sa pipila ka mga hinungdan wala kini gipakita sa benchmark.

Sa akong hunahuna kini mas hinay kaysa walay cast. Sa kini nga kaso, ang IP address kinahanglan nga ma-parse gikan sa string. Siyempre, sa ClickHouse, ang pag-parse sa IP address gi-optimize usab. Gisulayan namon pag-ayo, apan sa parehas nga lugar naa nimo ang mga numero nga gisulat sa ikanapulo ka libo nga porma. Dili komportable kaayo. Sa laing bahin, ang uniqExact function molihok nga mas hinay sa mga kuwerdas, dili lamang tungod kay kini mga kuwerdas, kondili tungod usab kay gipili ang lain nga espesyalisasyon sa algorithm. Ang mga string lahi ra ang pagdumala.

Ug kung magkuha kami usa ka labi ka karaan nga tipo sa datos? Pananglitan, ilang gisulat ang user id nga anaa kanato, gisulat kini isip usa ka linya, ug dayon gilabay kini, mas makalingaw ba kini o dili?

Nagduda ko. Sa akong hunahuna kini mahimong mas makapasubo, tungod kay pagkahuman, ang pag-parse sa mga numero usa ka seryoso nga problema. Para nako kini nga kauban adunay bisan usa ka taho kung unsa ka lisud ang pag-parse sa mga numero sa ikanapulo nga libo nga porma, apan tingali dili.

Alexey, salamat kaayo sa report! Ug daghang salamat sa ClickHouse! Naa koy pangutana bahin sa mga plano. Adunay ba usa ka bahin sa mga plano alang sa dili kompleto nga pag-update sa mga diksyonaryo?

i.e. partial reboot?

Oo Oo. Sama sa abilidad sa pagbutang sa usa ka MySQL field didto, i.e. pag-update pagkahuman aron kini nga datos ra ang ma-load kung ang diksyonaryo dako kaayo.

Makapainteres kaayo nga bahin. Ug, para nako, naay nagsuggest ani sa among chat. Tingali ikaw man.

Sa akong hunahuna dili.

Maayo, karon kini nahimo nga duha ka hangyo. Ug mahimo nimong sugdan kini nga hinayhinay. Apan gusto nako nga pasidan-an ka dayon nga kini nga bahin yano ra nga ipatuman. Sa ato pa, sa teorya, kinahanglan nimo nga isulat ang numero sa bersyon sa lamesa ug dayon isulat: ang bersyon mas gamay kaysa ingon ug ingon niana. Ug kini nagpasabut nga, lagmit, among itanyag kini sa mga mahiligon. Ikaw ba usa ka mahiligon?

Oo, apan sa kasubo dili sa C++.

Makasulat ba ang imong mga kauban sa C++?

Mangita kog tawo.

Nindot*.

* ang bahin gidugang duha ka bulan pagkahuman sa taho - gipalambo kini sa tagsulat sa pangutana ug gisumite sa iyang paghangyo hangyo.

Спасибо!

Hello! Salamat sa report! Gihisgutan nimo nga ang ClickHouse naggamit sa tanan nga mga kapanguhaan nga magamit niini nga maayo. Ug ang mamumulong sunod sa Luxoft naghisgot bahin sa iyang desisyon alang sa Russian Post. Siya miingon nga ganahan kaayo sila sa ClickHouse, apan wala nila kini gigamit imbes sa ilang nag-unang kakompetensya tungod kay mikaon kini sa tibuok processor. Ug dili nila kini mahaum sa ilang arkitektura, sa ilang ZooKeeper nga adunay mga pantalan. Posible ba nga higpitan ang ClickHouse aron dili magamit ang tanan nga magamit niini?

Oo, kini posible ug sayon ​​kaayo. Kung gusto nimo nga mokaon og gamay nga mga cores, isulat lang set max_threads = 1. Ug kana ang tanan, kini ipatuman ang hangyo sa usa ka kinauyokan. Dugang pa, mahimo nimong itakda ang lainlaing mga setting alang sa lainlaing mga tiggamit. So walay problema. Ug sultihi ang imong mga kauban gikan sa Luxoft nga dili maayo nga wala nila makit-an kini nga setting sa dokumentasyon.

Alexey, hello! Gusto kong mangutana niini nga pangutana. Dili kini ang unang higayon nga nakadungog ako nga daghang mga tawo ang nagsugod sa paggamit sa ClickHouse ingon usa ka tipiganan sa mga troso. Sa report, giingon nimo nga dili kini buhaton, nga mao, dili nimo kinahanglan nga magtipig og taas nga linya. Unsay imong hunahuna bahin niini?

Una, ang mga troso kasagarang dili taas nga linya. Adunay, siyempre, mga eksepsiyon. Pananglitan, ang pipila ka serbisyo nga gisulat sa java naglabay sa usa ka eksepsiyon, kini gi-log. Ug mao nga sa usa ka walay katapusan nga laang, ug nahutdan sa malisud nga drive luna. Ang solusyon yano ra kaayo. Kung ang mga linya taas kaayo, putla kini. Unsa ang gipasabut sa dugay? Ang napulo ka kilobytes dili maayo *.

* sa bag-o nga mga bersyon sa ClickHouse, ang "adaptive index granularity" gipalihok, nga nagtangtang sa problema sa pagtipig sa taas nga mga kuwerdas sa kadaghanan.

Normal ba ang usa ka kilobyte?

Normal kini.

Hello! Salamat sa report! Gipangutana na nako kini sa chat, apan wala ko kahinumdom kung nakadawat ba ko og tubag. Aduna bay plano nga i-extend ang WITH section sa paagi nga CTE?

Dili pa. Ang WITH nga seksyon medyo walay hinungdan. Kini sama sa usa ka gamay nga bahin alang kanamo.

Nakasabot ko. Salamat!

Salamat sa report! Makapainteres kaayo! global nga pangutana. Giplano ba nga buhaton, tingali sa porma sa usa ka matang sa mga stub, pagbag-o sa pagtangtang sa datos?

Kinahanglan. Mao ni ang una namong buluhaton sa among pila. Kami karon aktibo nga naghunahuna kung unsaon pagbuhat ang tanan nga husto. Ug kinahanglang magsugod ka sa pagpindot sa keyboard*.

* gipindot ang mga buton sa keyboard ug nahuman na ang tanan.

Makaapektar ba kini sa performance sa sistema o dili? Ang pagsal-ot ba ingon ka paspas sama sa karon?

Tingali ang pagtangtang sa ilang kaugalingon, ang mga pag-update sa ilang kaugalingon mahimong bug-at kaayo, apan dili kini makaapekto sa paghimo sa mga gipili ug ang paghimo sa mga pagsal-ot sa bisan unsang paagi.

Ug usa pa ka gamay nga pangutana. Sa presentasyon, naghisgot ka bahin sa panguna nga yawe. Tungod niini, kami adunay partitioning, nga binulan nga default, dili ba? Ug kung magbutang kami usa ka han-ay sa petsa nga mohaum sa usa ka bulan, unya mabasa ra namon kini nga partisyon, di ba?

Oo.

Usa ka pangutana. Kung dili kita makapili sa bisan unsang panguna nga yawe, nan husto ba nga buhaton kini sa eksakto sa "Petsa" nga uma aron sa background adunay usa ka gamay nga pag-usab sa kini nga datos aron sila mohaum sa mas hapsay nga paagi? Kung wala kay mga pangutana sa sakup ug dili ka makapili bisan unsang panguna nga yawe, angayan ba nga ibutang ang petsa sa panguna nga yawe?

Oo.

Tingali makatarunganon nga ibutang sa panguna nga yawe ang usa ka uma diin ang datos mahimong mas maayo nga ma-compress kung kini gisunud sa kini nga uma. Pananglitan, user ID. Ang tiggamit, pananglitan, moadto sa parehas nga site. Sa kini nga kaso, ibutang ang user id ug oras. Ug unya ang imong data mas maayo nga ma-compress. Mahitungod sa petsa, kung wala ka ug wala'y mga pangutana sa range sa mga petsa, nan dili nimo ibutang ang petsa sa panguna nga yawe.

OK salamat kaayo!

Source: www.habr.com

Idugang sa usa ka comment