{"id":89878,"date":"2020-07-27T01:42:42","date_gmt":"2020-07-26T23:42:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g"},"modified":"2020-07-27T01:42:42","modified_gmt":"2020-07-26T23:42:42","slug":"teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","title":{"rendered":"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b46b964324a3311157d5df737526b1d1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0411\u0414 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u043d\u044b. \u0418\u0445 \u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u044e\u0442 \u0438 \u0435\u0449\u0435 \u0445\u0443\u0436\u0435 \u0443\u043c\u0435\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 &quot;\u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0442\u0443\u0441&quot; \u0441 MySQL \u0438\u043b\u0438 PostgreSQL, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0441 NoSQL \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. ClickHouse \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u043c\u0438\u0440 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 DBMS.<\/p>\n<p><\/p>\n<p>Poro\u010dilo s konferencije BackEnd Conf 2018 in je objavljeno s soglasjem govornika.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"9MwKE30aUPs\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/9MwKE30aUPs\/hqdefault.jpg\" alt=\"Predvajaj video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6c55b639d9703f460d99e0b0b1194507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKdo sem jaz in zakaj govorim o ClickHouse? Sem direktor za razvoj v podjetju LifeStreet, ki uporablja ClickHouse. Poleg tega sem ustanovitelj Altinity. To je partner Yandexa, ki promovira ClickHouse in pomaga Yandexu, da postane ClickHouse uspe\u0161nej\u0161i. Prav tako sem pripravljen deliti svoja znanja o ClickHouse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/36af6acba62271f7aa19dda2eb470870.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In \u0161e nisem brat Pete Zajceva. Pogosto me o tem spra\u0161ujejo. Ne, nisva bratje.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6ca605f97619a1373bb8a92f88d480d5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\"Vsem je znano\", da je ClickHouse:<\/p>\n<p><\/p>\n<ul>\n<li>Zelo hiter,<\/li>\n<li>Zelo pregleden, <\/li>\n<li>Uporablja se v Yandexu. <\/li>\n<\/ul>\n<p><\/p>\n<p>Malce manj znano je, v katerih podjetjih in kako se uporablja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c097b003bf8ea13b8a3bb765270e99c8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Povedal vam bom, za kaj, kje in kako se ClickHouse uporablja, poleg Yandexa. <\/p>\n<p><\/p>\n<p>Povedal bom, kako se konkretne naloge re\u0161ujejo s pomo\u010djo ClickHouse v razli\u010dnih podjetjih, katere funkcionalnosti ClickHouse lahko uporabite za svoje naloge in kako so se uporabljale v razli\u010dnih podjetjih.<\/p>\n<p><\/p>\n<p>Izbral sem tri primere, ki prikazujejo ClickHouse z razli\u010dnih strani. Mislim, da bo to zanimivo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d3cab92ceccd6c7d01ca1f28b028803f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prvo vpra\u0161anje: \"Zakaj je potreben ClickHouse?\". Zdi se, da je vpra\u0161anje precej o\u010ditno, vendar je odgovorov ve\u010d kot en. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1a4e14cc041a3c01ad0fd2a305aeeab0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Prvi odgovor \u2013 zaradi zmogljivosti. ClickHouse je zelo hiter. Analitika na ClickHouse je prav tako zelo hitra. Pogosto ga lahko uporabljate tam, kjer nekaj drugega deluje zelo po\u010dasi ali zelo slabo. <\/li>\n<li>Drugi odgovor \u2013 to je cena. In predvsem cena skaliranja. Na primer, Vertica je popolnoma odli\u010dna podatkovna baza. Zelo dobro deluje, \u010de imate le malo terabajtov podatkov. Ampak, ko gre za stotine terabajtov ali petabajtov, cena licence in podpore postane precej velika cifra. In to je drago. ClickHouse pa je brezpla\u010den. <\/li>\n<li>Tretji odgovor je operativni stro\u0161ek. To je pristop, ki je nekoliko druga\u010den. RedShift je odli\u010dna alternativa. Na RedShiftu lahko hitro razvijete re\u0161itev. Dobro bo delovalo, vendar boste vsak dan in vsak mesec pla\u010devali precej visoke stro\u0161ke Amazonu, ker je to precej drag storitev. Google BigQuery prav tako. Kdor ga je uporabljal, ve, da lahko spro\u017ei ve\u010d poizvedb in nenadoma dobi ra\u010dun v vi\u0161ini stotin dolarjev. <\/li>\n<\/ul>\n<p><\/p>\n<p>V ClickHouse teh te\u017eav ni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3084a8bd9271f14726d73989946816c5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kje se zdaj uporablja ClickHouse? Poleg Yandexa se ClickHouse uporablja v \u0161tevilnih razli\u010dnih podjetjih. <\/p>\n<p><\/p>\n<ul>\n<li>V prvi vrsti je to analitika spletnih aplikacij, tj. to je uporaba, ki izhaja iz Yandexa.<\/li>\n<li>Veliko AdTech podjetij uporablja ClickHouse. <\/li>\n<li>\u0160tevilna podjetja, ki morajo analizirati operativne dnevnike iz razli\u010dnih virov.<\/li>\n<li>Nekaj podjetij uporablja ClickHouse za spremljanje varnostnih dnevnikov. Ti jih nalo\u017eijo v ClickHouse, pripravljajo poro\u010dila in dobijo \u017eelene rezultate.<\/li>\n<li>Podjetja za\u010dnejo uporabljati ClickHouse tudi v finan\u010dni analizi, tj. postopoma se veliki posli tudi pribli\u017eujejo ClickHouseu. <\/li>\n<li>CloudFlare. Kdor spremlja ClickHouse, je zagotovo sli\u0161al za to podjetje. To je en od pomembnih prispevnikov skupnosti. Imajo zelo resno namestitev ClickHouse. Na primer, razvili so Kafka engine za ClickHouse. <\/li>\n<li>Telekomunikacijska podjetja so za\u010dela uporabljati ClickHouse. Nekaj podjetij ga uporablja bodisi kot dokaz koncepta bodisi \u017ee v produkciji.<\/li>\n<li>Ena dru\u017eba uporablja ClickHouse za spremljanje proizvodnih procesov. Testirajo \u010dipe, bele\u017eijo kup parametrov, okoli 2.000 zna\u010dilnosti. Nato analizirajo \u2013 dobra serija ali slaba.<\/li>\n<li>Analitika verige blokov. Obstaja rusko podjetje, kot je Bloxy.info. To je analiza ethereum omre\u017eja. To so tudi naredili na ClickHouse. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/8a0c1924a20ed2d15cd0f959e9b3e499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pri tem velikost ni pomembna. Veliko podjetij uporablja en majhen stre\u017enik. Ta jim omogo\u010da re\u0161evanje njihovih te\u017eav. In \u0161e ve\u010d podjetij uporablja velike klastre iz mnogih <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sl\/server\/\"   title=\"stre\u017enikov\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1513\">stre\u017enikov<\/a> ali desetih stre\u017enikov. <\/p>\n<p><\/p>\n<p>In \u010de pogledamo rekorde, to:<\/p>\n<p><\/p>\n<ul>\n<li>Yandex: 500+ stre\u017enikov, 25 milijard zapisov na dan tam shranijo.<\/li>\n<li>LifeStreet: 60 stre\u017enikov, pribli\u017eno 75 milijard zapisov na dan. Manj stre\u017enikov, ve\u010d zapisov kot v Yandexu. <\/li>\n<li>CloudFlare: 36 stre\u017enikov, 200 miljard zapisov na dan se shranjuje. Imajo \u0161e manj stre\u017enikov in \u0161e ve\u010d podatkov, ki jih shranjujejo. <\/li>\n<li>Bloomberg: 102 <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sl\/server\/dts-los-angeles\/\"   title=\"stre\u017enika\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3643\">stre\u017enika<\/a>, pribli\u017eno trilijon zapisov na dan. Rekorder po zapisih.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/49194030b6586221cb17029889ce33da.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Geografsko \u2013 to je tudi veliko. Ta graf poka\u017ee heatmap, kjer se ClickHouse uporablja po svetu. Tukaj izstopata Rusija, Kitajska in Amerika. Evropskih dr\u017eav je malo. In lahko izpostavimo 4 klastre.<\/p>\n<p><\/p>\n<p>To je primerjalna analiza, tukaj ni potrebno iskati absolutnih \u0161tevilk. To je analiza obiskovalcev, ki berejo angle\u0161ke vsebine na spletnem mestu Altinity, ker tam ni ruskih govorcev. Rusija, Ukrajina, Belorusija, torej rusko govore\u010di del skupnosti, so najbolj \u0161tevil\u010dni uporabniki. Nato sledita ZDA in Kanada. Kitajska mo\u010dno dohiteva. \u0160e pred \u0161estimi meseci skoraj da ni bilo Kitajske, zdaj pa je Kitajska \u017ee prehitela Evropo in \u0161e naprej raste. Stara Evropa prav tako ne zaostaja, pri \u010demer je vodilni uporabnik ClickHouse \u2013 kar je presenetljivo \u2013 Francija. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3a8305c51b1bd62f3467b795402df4ed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Zakaj to vse pripovedujem? Da poka\u017eem, da ClickHouse postaja standardna re\u0161itev za analizo velikih podatkov in da se \u017ee na mnogih mestih uporablja.<\/strong> \u010ce ga uporabljate, ste na pravi poti. \u010ce ga \u0161e niste uporabili, se ni treba bati, da boste ostali sami in da vam nih\u010de ne bo pomagal, ker se \u017ee mnogi s tem ukvarjajo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6aa635f3a35034d3af837c78b2c8fe60.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To so primeri dejanske uporabe ClickHouse v ve\u010d podjetjih. <\/p>\n<p><\/p>\n<ul>\n<li>Prvi primer \u2013 ogla\u0161evalska mre\u017ea: migracija z Vertice na ClickHouse. Poznam ve\u010d podjetij, ki so pre\u0161la z Vertice ali so v procesu prehoda. <\/li>\n<li>Drugi primer \u2013 transakcijsko shranjevanje na ClickHouse. To je primer, zgrajen na antipatternih. Vse, kar ne bi smeli po\u010deti v ClickHouse po nasvetih razvijalcev, je tukaj narejeno. In to je tako u\u010dinkovito, da deluje. In deluje veliko bolje kot tipi\u010dna transakcijska re\u0161itev. <\/li>\n<li>Tretji primer \u2013 to so distribuirane izra\u010duni na ClickHouse. Bilo je vpra\u0161anje o tem, kako lahko ClickHouse integriramo v Hadoop ekosistem. Poka\u017eem primer, kako je podjetje na ClickHouse naredilo nekaj podobnega kontenerju map reduce, pri \u010demer so upo\u0161tevali lokalizacijo podatkov itd., da bi izra\u010dunali zelo trivialno nalogo. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e08ab5418500599f08d40324ccdfbcd0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>LifeStreet \u2013 to je Ad Tech podjetje, ki ima vse tehnologije, povezane z ogla\u0161evalsko mre\u017eo. <\/li>\n<li>Ukvarjajo se z optimizacijo oglasov, programati\u010dno ponudbo. <\/li>\n<li>Veliko podatkov: okoli 10 milijard dogodkov na dan. Pri tem se lahko dogodki delijo na ve\u010d poddogodkov.<\/li>\n<li>Veliko strank uporablja te podatke, pri \u010demer to niso le ljudje, ampak mnogo ve\u010d \u2013 razli\u010dni algoritmi, ki se ukvarjajo s programatskim biddingom. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2da99b53eb25f675a2431027f86db934.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Podjetje je pre\u0161lo dolgo in mukotrpno pot. O tem sem govoril na HighLoad. Najprej je LifeStreet pre\u0161la z MySQL (s kratkim postankom na Oracle) na Vertico. O tem lahko najdete zgodbo. <\/p>\n<p><\/p>\n<p>Vse je potekalo zelo dobro, a je kmalu postalo jasno, da se podatki pove\u010dujejo in da je Vertica draga. Opravili smo iskanje razli\u010dnih alternativ. Nekatere so tukaj na\u0161tevene. Pravzaprav smo naredili dokaz koncepta ali v\u010dasih testiranje zmogljivosti skoraj vseh baz podatkov, ki so bile na voljo na trgu od 13. do 16. leta in so pribli\u017eno ustrezale funkcionalnosti. O nekaterih sem tudi govoril na HighLoad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/4bebd2f43892cbef9249ddded1b8a70a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Naloga je bila \u2013 migrirati z Vertice, ker so se podatki pove\u010dali. Ti so rasti eksponentno ve\u010d let. Potem so za trenutek ustavili, a kljub temu. Ob predvidevanju te rasti so poslovne zahteve glede obsega podatkov, po katerih je treba izvajati analitiko, jasno kazale, da se bo hitro za\u010delo pogovarjati o petabajtih. Pla\u010devanje za petabajte je zelo drago, zato so iskali alternativo, kam iti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f170a4307168e8560122966eab85c24e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kam iti? Dolo\u010deno obdobje je bilo popolnoma nejasno, kam iti, saj so na eni strani komercialne baze podatkov, ki delujejo dokaj dobro. Nekatere delujejo skoraj tako dobro, kot Vertica, nekatere slab\u0161e. A vse so drage, ni\u010d cenej\u0161ega in bolj\u0161ega ni bilo mogo\u010de najti. <\/p>\n<p><\/p>\n<p>Na drugi strani pa obstajajo re\u0161itve z odprtokodnim sistemom, ki jih ni veliko, kar pomeni, da jih lahko pre\u0161tejemo na prste. So brezpla\u010dne ali poceni, vendar delujejo po\u010dasneje. Po navadi jim primanjkuje potrebne in uporabne funkcionalnosti.<\/p>\n<p><\/p>\n<p>Torej, da bi zdru\u017eili to dobro, kar imajo komercialne baze podatkov, in vse tisto brezpla\u010dno, kar obstaja v odprtokodu \u2013 ni bilo ni\u010desar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/abbefbf0d9578b554f81579b87213a50.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ni\u010desar ni bilo, dokler Yandex ni nepri\u010dakovano predstavil ClickHouse, kot bi \u010darovnik potegnil zajca iz klobuka. In to je bila nepri\u010dakovana re\u0161itev, \u0161e vedno se spra\u0161ujejo: 'Zakaj?', a kljub temu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c88981aace9d5925396ca5171241b7d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In the summer of 2016, we started investigating what ClickHouse is. It turned out that sometimes it can be faster than Vertica. We tested different scenarios on various queries. And if a query used only one table, i.e., without any joins, ClickHouse was twice as fast as Vertica. <\/p>\n<p><\/p>\n<p>I took the time to look at Yandex's tests a few days ago. They found the same: ClickHouse is twice as fast as Vertica, which is why they often mention it. <\/p>\n<p><\/p>\n<p>However, if the queries involve joins, things become less straightforward. ClickHouse can be twice as slow as Vertica. But with a bit of adjustment and rewriting of the query, the performance becomes roughly equivalent. Not bad, and it's free. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/188bf56b72123175a18d2cb97d989a47.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>After obtaining the test results and examining them from different perspectives, LifeStreet decided to adopt ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1183b9b7681916686c52786fc95ccb45.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>This is 2016, just to remind you. It was like the joke about the mice who cried and pierced themselves but continued to eat the cactus. It was explained in detail, there is a video about it, etc. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/993052ed83dc295c3777e614c7703456.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Therefore, I will not discuss this in detail; I will only share the results and a few interesting things I did not mention back then. <\/p>\n<p><\/p>\n<p>The results are:<\/p>\n<p><\/p>\n<ul>\n<li>A successful migration, and the system has been operating in production for over a year now. <\/li>\n<li>Performance and flexibility have increased. Out of the 10 billion records we could afford to store per day, and for a limited time at that, LifeStreet now stores 75 billion records daily and can maintain this for three months or more. At peak times, this amounts to nearly a million events per second being saved. More than a million SQL queries per day are sent to this system, primarily from various bots. <\/li>\n<li>Despite ClickHouse utilizing more servers than Vertica, cost savings on hardware were achieved because Vertica relied on relatively expensive SAS drives, whereas ClickHouse used SATA. Why? Because in Vertica, inserts are synchronous. Synchronization requires that the drives don't lag too much and that the network doesn't lag too, which is a relatively costly operation. In ClickHouse, inserts are asynchronous. Moreover, you can always write everything locally without any additional costs, allowing data to be inserted into ClickHouse much faster than in Vertica, even on not the fastest drives. Reading speeds are approximately the same. Reading on SATA, especially when configured in RAID, is quite fast. <\/li>\n<li>Licenca nije ograni\u010dena, tj. 3 petabajta podataka na 60 servera (20 servera je jedna replika) i 6 triliona zapisa u \u010dinjenicama i agregatima. Ni\u0161ta sli\u010dno nije mogla priu\u0161titi Vertica. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f461cdc12917ee655655dd7eb9c32bb2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sada prelazim na prakti\u010dne stvari u ovom primeru.<\/p>\n<p><\/p>\n<ul>\n<li>Prvo \u2013 to je efikasna shema. Od sheme zavisi veoma mnogo. <\/li>\n<li>Drugo \u2013 to je generisanje efikasnog SQL-a.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e7dc2a217e77c8794ff6e8a754e78c85.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tipi\u010dan OLAP upit je select. Deo kolona ide u group by, deo kolona ide u agregatne funkcije. Tu je i where, \u0161to mo\u017eemo predstaviti kao prese\u010dan kocku. Ceo group by mo\u017eemo predstaviti kao projekciju. I zato se ovo naziva multidimenzionalna analiza podataka. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a03a2d7fd28905ae83183346f0c673e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010cesto se to modeluje u obliku star sheme, kada postoji centralna \u010dinjenica i karakteristike te \u010dinjenice sa strana, oko zrakova. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d9671af4b39cc83e1ae49e6fd75d0e02.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I s fizi\u010dkog dizajna, onoga kako se to postavlja u tabelu, obi\u010dno se pravi normalizovana reprezentacija. Mo\u017eete denormalizovati, ali to je skupo po disku i nije efikasno po upitima. Zato se obi\u010dno pravi normalizovana reprezentacija, tj. tabela \u010dinjenica i mnogo, mnogo tabeli dimenzija. <\/p>\n<p><\/p>\n<p>Ali u ClickHouse-u to slabo funkcioni\u0161e. Ima dva razloga: <\/p>\n<p><\/p>\n<ul>\n<li>Prvi \u2013 to je zato \u0161to u ClickHouse-u nemamo dobre join-ove, tj. join-ovi postoje, ali su lo\u0161i. Za sada lo\u0161i. <\/li>\n<li>Drugi \u2013 to je \u0161to se tabele ne a\u017euriraju. Obi\u010dno u ovim tabelama, koje su oko star sheme, treba ne\u0161to menjati. Na primer, naziv klijenta, naziv kompanije itd. I to ne funkcioni\u0161e. <\/li>\n<\/ul>\n<p><\/p>\n<p>Postoji re\u0161enje za ovo u ClickHouse-u. \u010cak dva: <\/p>\n<p><\/p>\n<ul>\n<li>Prvi \u2013 to je kori\u0161\u0107enje re\u010dnika. External Dictionaries je ono \u0161to poma\u017ee da se 99 % re\u0161i problem sa star shemom, sa a\u017euriranjima i sli\u010dnim. <\/li>\n<li>Drugi \u2013 to je kori\u0161\u0107enje nizova. Nizovi tako\u0111e poma\u017eu da se re\u0161e problemi sa join-ovima i normalizacijom. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/775972cc412651600799173407384492.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Join-ovi nisu potrebni. <\/li>\n<li>A\u017euriraju se. Od marta 2018. godine postoji nedokumentovana mogu\u0107nost (to ne\u0107ete na\u0107i u dokumentaciji) da se delimi\u010dno a\u017euriraju re\u010dnici, tj. oni zapisi koji su se promenili. Prakti\u010dno \u2013 to je kao tabela.<\/li>\n<li>Uvek u memoriji, tako da join-ovi sa re\u010dnikom rade br\u017ee nego ako bi to bila tabela koja le\u017ei na disku i jo\u0161 nije sigurno da li je u ke\u0161u, verovatno nije. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f73176a650b6d885011e3265c2af2fc3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Tako\u0111e nisu potrebni join-ovi.<\/li>\n<li>To je kompaktno predstavljanje 1 prema mnogima. <\/li>\n<li>I po mom mi\u0161ljenju, nizovi su napravljeni za geekove. To su lambda funkcije i sli\u010dno. <\/li>\n<\/ul>\n<p><\/p>\n<p>To ni je zgolj marketin\u0161ka poteza. To je zelo mo\u010dna funkcionalnost, ki omogo\u010da enostavno in elegantno izvajanje \u0161tevilnih nalog. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5d813952ca8f3da7a74c6f2a15d80a9b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tipi\u010dni primeri, ki pomagajo re\u0161evati nize. Ti primeri so preprosti in dovolj nazorni:<\/p>\n<p><\/p>\n<ul>\n<li>Iskanje po oznakah. \u010ce imate tam hashtag-e in \u017eelite najti dolo\u010dene objave po hashtag-u. <\/li>\n<li>Iskanje po parih klju\u010d-vrednost. Tudi tu so nekateri atributi z vrednostjo. <\/li>\n<li>Shranjevanje seznamov klju\u010dev, ki jih morate prevesti v nekaj drugega.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vse te naloge lahko re\u0161ite brez nizov. Oznake lahko spravite v en niz in jih izberete s pomo\u010djo rednih izrazov ali v lo\u010deno tabelo, toda v tem primeru boste morali delati zdru\u017eitve (join).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/dbbf90eee098c4564206532f24156823.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V ClickHouse pa ni potrebno ni\u010desar narediti, dovolj je opisati niz string za hashtag-e ali ustvariti vdelano strukturo za sisteme tipa klju\u010d-vrednost.<\/p>\n<p><\/p>\n<p>Vdelana struktura \u2013 morda ni najbolj primeren naziv. To sta dva niza, ki imata skupni del v imenu in nekatere povezane zna\u010dilnosti. <\/p>\n<p><\/p>\n<p>Iskanje po oznaki je zelo enostavno. Obstaja funkcija <code>has<\/code>, ki preverja, ali je element prisoten v nizu. To je to, na\u0161li smo vse zapise, ki se nana\u0161ajo na na\u0161o konferenco.<\/p>\n<p><\/p>\n<p>Iskanje po subid je nekoliko bolj zapleteno. Najprej moramo najti indeks klju\u010da, nato pa vzeti element z tem indeksom in preveriti, ali je njegova vrednost tista, ki jo potrebujemo. Vseeno pa je zelo preprosto in kompaktno.<\/p>\n<p><\/p>\n<p>Redni izraz, ki bi ga \u017eeleli napisati, \u010de bi vse to shranili v en niz, bi bil, najprej, neroden. In drugi\u010d, delal bi veliko dlje kot dva niza. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/17664c3121b2b0d33188adbfaa653d4e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Drug primer. Imate niz, v katerem shranjujete ID-je. In lahko jih prevedete v imena. Funkcija <code>arrayMap<\/code>. To je tipi\u010dna lambda funkcija. Tja posredujete lambda izraz. In ta izsleduje vrednost imena vsakemu ID-ju iz slovarja.<\/p>\n<p><\/p>\n<p>Podobno lahko izvedete iskanje. Predaja se funkcija predikata, ki preverja, kateri elementi ustrezajo dolo\u010denim kriterijem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/146917b71a35d38a550cd9accf6ab2f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Te stvari mo\u010dno poenostavijo shemo in re\u0161ujejo \u0161tevilne te\u017eave. <\/p>\n<p><\/p>\n<p>Naslednja te\u017eava, s katero smo se soo\u010dili in o kateri bi \u017eelel spregovoriti, so u\u010dinkoviti poizvedbe. <\/p>\n<p><\/p>\n<ul>\n<li>V ClickHouse ni na\u010drtovalnika poizvedb. Sploh ne. <\/li>\n<li>Vseeno pa je potrebno kompleksne poizvedbe na\u010drtovati. V katerih primerih? <\/li>\n<li>\u010ce v poizvedbi obstaja ve\u010d povezav (join), ki jih zavijate v podpoizvedbe. In vrstni red, v katerem se izvajajo, ima pomen. <\/li>\n<li>In drugo - \u010de je poizvedba razdeljena. Ker v razdeljeni poizvedbi se le najgloblja podpoizvedba izvaja razdeljeno, vse ostalo pa se prenese na en stre\u017enik, s katerim ste povezani in se tam izvaja. Zato, \u010de imate razdeljene poizvedbe z mnogimi povezavami (join), morate izbrati vrstni red. <\/li>\n<\/ul>\n<p><\/p>\n<p>In celo v preprostej\u0161ih primerih je v\u010dasih smiselno opraviti delo na\u010drtovalnika in poizvedbe malo prepisati. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/217d422b429e8b4bc13abbf0efdf6be1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tukaj je primer. Na levi strani je poizvedba, ki prikazuje top-5 dr\u017eav. In traja 2,5 sekunde, po mojem mnenju. Na desni strani pa je ista poizvedba, a malo prepisana. Namesto da bi grupirali po vrsti, smo za\u010deli grupirati po klju\u010du (int). In to je hitreje. Potem smo k rezultatu priklju\u010dili slovar. Namesto 2,5 sekunde poizvedba traja 1,5 sekunde. To je dobro. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f19fb7d7f0397a3b38b2a3bd179c156b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Podoben primer s prepisovanjem filtrov. Tukaj je poizvedba za Rusijo. Traja 5 sekund. \u010ce jo prepi\u0161emo tako, da primerjamo ponovno ne vrsto, ampak \u0161tevilke s nekim nizom tistih klju\u010dev, ki se nana\u0161ajo na Rusijo, bo to veliko hitreje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0c1dd1f317133d1d106ffef85f337079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Obstaja veliko takih trikov. In ti omogo\u010dajo znatno pospe\u0161itev poizvedb, za katere se zdi, da \u017ee delujejo hitro, ali nasprotno, delujejo po\u010dasi. Lahko jih naredimo \u0161e hitreje.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/25b132790b03f239e38237af5e92ab63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Najve\u010d dela v razdeljenem na\u010dinu. <\/li>\n<li>Sortiranje po minimalnih tipih, kot sem to po\u010del s int-ji. <\/li>\n<li>\u010ce obstajajo kak\u0161ne povezave (join), slovarji, je najbolje, da jih naredite na samem koncu, ko so va\u0161i podatki vsaj delno grupirani, takrat bo operacija povezav (join) ali klic slovarja manjkrat poklicana in to bo hitrej\u0161e. <\/li>\n<li>Zamenjava filtrov. <\/li>\n<\/ul>\n<p><\/p>\n<p>Obstajajo \u0161e druge tehnike, ne le tiste, ki sem jih prikazal. In vse te v\u010dasih omogo\u010dajo znatno pospe\u0161itev izvajanja poizvedb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/175832796bee525909d8875bd723a881.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Preidimo na naslednji primer. Podjetje X iz ZDA. Kaj po\u010dne? <\/p>\n<p><\/p>\n<p>Naloga je bila: <\/p>\n<p><\/p>\n<ul>\n<li>Offline povezovanje reklamnih transakcij. <\/li>\n<li>Modeliranje razli\u010dnih modelov povezovanja. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0136b71a1205512d86f13e86761146f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V \u010dem je scenarij?<\/p>\n<p><\/p>\n<p>Obi\u010dan posjetitelj posjeti stranicu, na primjer, 20 puta mjese\u010dno s razli\u010ditih oglasa ili jednostavno s vremena na vrijeme do\u0111e bez ikakvih oglasa, jer se sje\u0107a te stranice. Pregleda neke proizvode, stavlja ih u ko\u0161aricu, vadi ih iz ko\u0161arice. I, na kraju, ne\u0161to kupuje. <\/p>\n<p><\/p>\n<p>Razumna pitanja: \"Kome treba platiti za oglas, ako je potrebno?\" i \"Koji oglas je na njega utjecao, ako je utjecao?\". To jest, za\u0161to je kupio i kako u\u010diniti tako da ljudi sli\u010dni ovoj osobi tako\u0111er kupuju?<\/p>\n<p><\/p>\n<p>Kako bi se ovaj zadatak rije\u0161io, potrebno je pravilno povezati doga\u0111aje koji se doga\u0111aju na web stranici, to jest izgraditi neku vrstu veze me\u0111u njima. Zatim ih proslijediti na analizu u DWH. Na temelju te analize, izgraditi modele, kome i koji oglas prikazati.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e53ec81ce89150697d0eca4d72886638.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Reklamna transakcija je skup povezanih doga\u0111aja korisnika, koji po\u010dinju od prikazivanja oglasa, zatim ne\u0161to se doga\u0111a, mo\u017eda kupnja, a zatim mogu biti dodatne kupnje. Na primjer, ako je ovo mobilna aplikacija ili mobilna igra, obi\u010dno se instalacija aplikacije doga\u0111a besplatno, a ako se u aplikaciji ne\u0161to dalje radi, za to mogu biti potrebna sredstva. I \u0161to vi\u0161e osoba potro\u0161i u aplikaciji, to je ona vrijednija. No, za to je potrebno sve povezati. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a2213613f1ef660409124ef8bcdd4fe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Postoji mnogo modela povezivanja. <\/p>\n<p><\/p>\n<p>Najpopularniji su:<\/p>\n<p><\/p>\n<ul>\n<li>Last Interaction, gdje je interaction \u2013 ili klik ili prikaz.<\/li>\n<li>First Interaction, tj. prvo \u0161to je dovelo osobu na stranicu.<\/li>\n<li>Linearna kombinacija \u2013 svima jednako. <\/li>\n<li>Istjecanje.<\/li>\n<li>I drugo. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/9523307d557e094d981da5b525ed0b59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I kako je sve to izvorno radilo? Postojao je Runtime i Cassandra. Cassandra se koristila kao transaction storage, tj. u njoj su bile pohranjene sve povezane transakcije. I kada do\u0111e neki doga\u0111aj u Runtime, na primjer, prikaz neke stranice ili ne\u0161to drugo, radila se upit u Cassandru \u2013 postoji li takva osoba ili ne. Onda su se dobijale transakcije koje se odnose na njega. I vr\u0161eno je povezivanje.<\/p>\n<p><\/p>\n<p>I ako je bilo sre\u0107e da u upitu postoji transaction id, to je lako. No obi\u010dno nije sre\u0107e. Stoga je bilo potrebno prona\u0107i posljednju transakciju ili transakciju s posljednjim klikom itd. <\/p>\n<p><\/p>\n<p>In the beginning, everything worked very well as long as the linking was to the last click. With about 10 million clicks a day, which amounts to 300 million a month if a monthly window is set. And since in Cassandra it all has to be in memory to work quickly\u2014because Runtime needs to respond swiftly\u2014this required around 10-15 servers. <\/p>\n<p><\/p>\n<p>However, when they wanted to link transactions to shows, it didn't go as smoothly. Why? Clearly, it requires storing 30 times more events. Consequently, 30 times more servers are needed. It reached an astronomical figure, needing up to 500 servers to handle the linking while having significantly fewer in Runtime\u2014that just doesn't add up. They started brainstorming solutions. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/7af35f1ade680232cc83a6887891bc5c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>They landed on ClickHouse. But how do you implement it with ClickHouse? At first glance, it seems like a collection of anti-patterns. <\/p>\n<p><\/p>\n<ul>\n<li>The transaction grows as we attach more and more new events to it, making it mutable, while ClickHouse doesn't handle mutable objects very well. <\/li>\n<li>When a visitor arrives, we need to retrieve their transactions by key, specifically by their visit id. This is also a point query, which isn't typically how ClickHouse operates. Generally, ClickHouse deals with large scans, but here we need to fetch a few records. Another anti-pattern. <\/li>\n<li>Additionally, transactions were in JSON format, but rewriting was not preferred, so they wanted to store JSON in an unstructured way and extract what was needed. This too is an anti-pattern. <\/li>\n<\/ul>\n<p><\/p>\n<p>That is to say, a collection of anti-patterns. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2473129a5880ee3172b8ab7bf4afc376.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nevertheless, they succeeded in creating a system that worked quite well. <\/p>\n<p><\/p>\n<p>What was done? ClickHouse was implemented, with logs being ingested in records. An attributed service was created to retrieve logs from ClickHouse. Then, for each record by visit id, it fetched transactions that might not have been fully processed yet, along with snapshots\u2014i.e., already linked transactions, representing the results of previous work. From these, they built the logic, selected the correct transaction, and connected new events. The updated logs were written back into ClickHouse, establishing a constantly cyclical system. Additionally, the data was sent to DWH for further analysis. <\/p>\n<p><\/p>\n<p>V t\u00e9to podob\u011b to nefungovalo moc dob\u0159e. A aby to ClickHouse usnadnil, kdy\u017e prob\u00edhal dotaz podle visit id, skupinovali jsme tyto dotazy do blok\u016f po 1 000-2 000 visit id a vytahovali jsme ve\u0161ker\u00e9 transakce pro 1 000-2 000 lid\u00ed. A pak to v\u0161echno za\u010dalo fungovat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d920ce231e6e4b5fd5b27ab28f848aed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pokud se pod\u00edv\u00e1te do ClickHouse, existuj\u00ed pouze 3 hlavn\u00ed tabulky, kter\u00e9 to v\u0161e obsluhuj\u00ed. <\/p>\n<p><\/p>\n<p>Prvn\u00ed tabulka, do kter\u00e9 se ukl\u00e1daj\u00ed logy, p\u0159i\u010dem\u017e logy se ukl\u00e1daj\u00ed prakticky bez zpracov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p>Druh\u00e1 tabulka. P\u0159es materializovan\u00fd pohled se z t\u011bchto log\u016f vyb\u00edraly, kter\u00e9 je\u0161t\u011b nebyly p\u0159i\u0159azen\u00e9 ud\u00e1losti, tj. nesouvisej\u00edc\u00ed. A p\u0159es materializovan\u00fd pohled se z t\u011bchto log\u016f vytahovaly transakce pro vytvo\u0159en\u00ed snapshotu. Tj. speci\u00e1ln\u00ed materializovan\u00fd pohled vytv\u00e1\u0159el snapshot, a to konkr\u00e9tn\u011b posledn\u00ed nahromad\u011bn\u00fd stav transakce. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/12b0adb691f483923a6c35bb6e4a5017.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zde je naps\u00e1n text na SQL. Cht\u011bl bych v n\u011bm okomentovat n\u011bkolik d\u016fle\u017eit\u00fdch v\u011bc\u00ed. <\/p>\n<p><\/p>\n<p>Prvn\u00ed d\u016fle\u017eit\u00e1 v\u011bc \u2013 to je mo\u017enost v ClickHouse vyb\u00edrat sloupce z json. Tj. v ClickHouse existuj\u00ed n\u011bkter\u00e9 metody pro pr\u00e1ci s json. Jsou velmi, velmi primitivn\u00ed. <\/p>\n<p><\/p>\n<p>visitParamExtractInt umo\u017e\u0148uje vyb\u00edrat atributy z json, tj. prvn\u00ed z\u00e1sah se spust\u00ed. A t\u00edmto zp\u016fsobem je mo\u017en\u00e9 vyt\u00e1hnout transaction id nebo visit id. To je prvn\u00ed v\u011bc. <\/p>\n<p><\/p>\n<p>Druh\u00e1 \u2013 zde je pou\u017eito chytr\u00e9 materializovan\u00e9 pole. Co to znamen\u00e1? To znamen\u00e1, \u017ee nem\u016f\u017eete vlo\u017eit do tabulky, tj. nevkl\u00e1d\u00e1 se, ale vypo\u010d\u00edt\u00e1v\u00e1 se a uchov\u00e1v\u00e1 p\u0159i vlo\u017een\u00ed. P\u0159i vlo\u017een\u00ed ClickHouse ud\u011bl\u00e1 pr\u00e1ci za v\u00e1s. A ji\u017e se vyb\u00edr\u00e1 z json to, co pak pot\u0159ebujete.<\/p>\n<p><\/p>\n<p>V tomto p\u0159\u00edpad\u011b je materializovan\u00fd pohled ur\u010den pro zpracovan\u00e9 \u0159\u00e1dky. A pr\u00e1v\u011b se pou\u017e\u00edv\u00e1 prvn\u00ed tabulka s prakticky syrov\u00fdmi logy. A co d\u011bl\u00e1? Za prv\u00e9, m\u011bn\u00ed t\u0159\u00edd\u011bn\u00ed, tj. t\u0159\u00edd\u011bn\u00ed nyn\u00ed prob\u00edh\u00e1 podle visit id, proto\u017ee pot\u0159ebujeme rychle vyb\u00edrat konkr\u00e9tn\u00ed transakci konkr\u00e9tn\u00ed osoby. <\/p>\n<p><\/p>\n<p>Druh\u00e1 d\u016fle\u017eit\u00e1 v\u011bc \u2013 to je index_granularity. Pokud jste vid\u011bli MergeTree, obvykle je jako v\u00fdchoz\u00ed hodnota 8 192 nastavena index_granularity. Co to je? To je parametr \u0159\u00eddkosti indexu. V ClickHouse je index \u0159\u00eddk\u00fd, nikdy neindexuje ka\u017ed\u00fd z\u00e1znam. D\u011bl\u00e1 to po ka\u017ed\u00fdch 8 192. A to je dobr\u00e9, kdy\u017e je pot\u0159eba spo\u010d\u00edtat velk\u00e9 mno\u017estv\u00ed dat, ale \u0161patn\u00e9, kdy\u017e jen n\u011bkolik, proto\u017ee je velk\u00fd overhead. A pokud sn\u00ed\u017e\u00edte index granularity, sni\u017eujete overhead. Sn\u00ed\u017eit na jedni\u010dku nelze, proto\u017ee by mohlo b\u00fdt nedostatek pam\u011bti. Index je v\u017edy uchov\u00e1v\u00e1n v pam\u011bti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5fe303061977cad64e6c0333b125d595.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Snapshot uporablja \u0161e nekatere zanimive funkcionalnosti ClickHouse.<\/p>\n<p><\/p>\n<p>Najprej, to je AggregatingMergeTree. In v AggregatingMergeTree se hrani argMax, tj. stanje transakcije, ki ustreza zadnjemu timestampu. Transakcije se ves \u010das ustvarjajo nove za tega obiskovalca. In v najnovej\u0161em stanju te transakcije smo dodali dogodek in dobili novo stanje. To je ponovno pri\u0161lo v ClickHouse. In preko argMax v tem materializiranem pogledu vedno lahko pridobimo aktualno stanje.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d1b87301ab5206a36bf035679f79d35a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Povezava je 'odstranjena' z Runtime. <\/li>\n<li>Shranjuje in obdeluje do 3 milijarde transakcij na mesec. To je za red velikosti ve\u010d, kot je bilo v Cassandri, tj. v tipi\u010dni transakcijski sistem. <\/li>\n<li>Klaster z 2x5 stre\u017eniki ClickHouse. 5 stre\u017enikov in vsak stre\u017enik ima repliko. To je celo manj, kot je bilo v Cassandri za izvajanje click based atribucije, tukaj pa imamo impression based. Tj. namesto, da bi pove\u010dali \u0161tevilo stre\u017enikov 30-krat, smo jih uspeli zmanj\u0161ati. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/583779fe9e133df519411e2256401eb3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In zadnji primer je finan\u010dna podjetje Y, ki je analiziralo korelacije sprememb te\u010dajev delnic. <\/p>\n<p><\/p>\n<p>In naloga je bila taka:<\/p>\n<p><\/p>\n<ul>\n<li>Obstaja pribli\u017eno 5.000 delnic. <\/li>\n<li>Te\u010daji so znani vsakih 100 milisekund. <\/li>\n<li>Podatki so se nabrali v 10-letih. O\u010ditno, pri nekaterih podjetjih ve\u010d, pri nekaterih manj. <\/li>\n<li>Skupaj pribli\u017eno 100 milijard vrstic. <\/li>\n<\/ul>\n<p><\/p>\n<p>In bilo je treba izra\u010dunati korelacijo sprememb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b02051e6cadec8c51e7f6e351ef903f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tukaj sta dve delnici in njuni te\u010daji. \u010ce ena raste, in druga raste, potem je to pozitivna korelacija, tj. ena nara\u0161\u010da, druga tudi. \u010ce ena raste, kot na koncu grafa, druga pa pada, potem je to negativna korelacija, tj. ko ena raste, druga pada. <\/p>\n<p><\/p>\n<p>Z analiziranjem teh medsebojnih sprememb lahko naredimo napovedi na finan\u010dnem trgu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/31329cf7523eef6a167632d281a634ce.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ampak naloga je zahtevna. Kaj se za to dela? Imamo 100 milijard zapisov, v katerih so: \u010das, delnica in cena. Najprej moramo izra\u010dunati 100 milijard krat runningDifference algoritma cene. RunningDifference je funkcija v ClickHouse, ki zaporedno izra\u010duna razliko med dvema vrsticama. <\/p>\n<p><\/p>\n<p>Nato je treba izra\u010dunati korelacijo, pri \u010demer je korelacijo treba izra\u010dunati za vsak par. Za 5.000 delnic to pomeni 12,5 milijona parov. In to je veliko, tj. 12,5 krat je treba izra\u010dunati to funkcijo korelacije. <\/p>\n<p><\/p>\n<p>In case someone has forgotten, \u035ex and \u035ey are the mathematical expectations based on the sample. That means you have to not only calculate the roots and sums, but also perform additional summations within those sums. A lot of calculations need to be executed 12.5 million times, and they need to be grouped by hours as well. And we have quite a few hours. And we have to do it all within 60 seconds. Just kidding. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/567a07f586a824c91671820fe21ec305.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>We had to manage somehow because everything was running very, very slowly before ClickHouse arrived.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3eca1af4c3f25ff4b23fce9b84e16659.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>They tried to calculate this on Hadoop, on Spark, on Greenplum. And it was all very slow or expensive. That is, it was possible to get a calculation, but it was costly. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/37608c7e87ddb9a7d54854643044c369.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Then ClickHouse came along, and everything got much better. <\/p>\n<p><\/p>\n<p>I remind you, we have a problem with data locality, so the correlations cannot be localized. We cannot put part of the data on one server and part on another to make calculations; all data must be available everywhere. <\/p>\n<p><\/p>\n<p>What did they do? Initially, the data was localized. Each server stores data for the pricing of a specific set of stocks. And they do not overlap. Therefore, logReturns can be calculated in parallel and independently; all this happens while being both parallel and distributed. <\/p>\n<p><\/p>\n<p>Then they decided to reduce this data while retaining its expressiveness. They reduced it using arrays; that is, for each time interval, they created an array of stocks and an array of prices. This way, it takes up much less space, making the data easier to work with. These are almost parallel operations, meaning we simultaneously perform partial calculations and then write to the server. <\/p>\n<p><\/p>\n<p>After that, it can be replicated. The letter 'r' indicates that these data have been replicated. That is, we have the same data on all three servers \u2013 these arrays. <\/p>\n<p><\/p>\n<p>Then, with a special script, we can create batches from this set of 12.5 million correlations that need to be calculated. That is, 2,500 tasks with 5,000 pairs of correlations. And this task is computed on a specific ClickHouse server. It has all the data because it's the same on all servers, allowing it to compute sequentially. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/587c6d587a48f2407dd2687f5423d44a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poglejmo, kako to izgleda. Na za\u010detku imamo vse podatke v tej strukturi: \u010das, delnice, cena. Potem smo izra\u010dunali logReturn, to je podatke iste strukture, le da namesto cene imamo logReturn. Potem smo jih predelali, torej imamo \u010das in groupArray po delnicah in cenah. Sreplirali smo jih. In po tem smo ustvarili vrsto opravil in nahranili ClickHouse, da jih je obdelal. In to deluje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/434e7385aebcffcc03d1bd1a2020c8bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na proof of concept naloga \u2013 to je bila podnaloga, torej smo vzeli manj podatkov. In to na treh stre\u017enikih.<\/p>\n<p><\/p>\n<p>Ti prvi dve fazi: izra\u010dun log_return in ovijanje v tabele sta trajali pribli\u017eno eno uro. <\/p>\n<p><\/p>\n<p>Izra\u010dun korelacije pa je trajal pribli\u017eno 50 ur. Ampak 50 ur je malo, ker je prej to delovalo tedne. To je bil velik uspeh. In \u010de izra\u010dunamo, je bilo vse obdelano 70-krat na sekundo na tem klastru.<\/p>\n<p><\/p>\n<p>Ampak najpomembnej\u0161a stvar je, da je ta sistem prakti\u010dno brez ozkih grl, torej se prakti\u010dno linearno skalira. In to so preverili. Uspe\u0161no so ga raz\u0161irili. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5a595a84897e492b49dccfb0f058b1b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Pravilna shema je polovica uspeha. In pravilna shema je uporaba vseh potrebnih tehnologij ClickHouse. <\/li>\n<li>Summing\/AggregatingMergeTrees so tehnologije, ki omogo\u010dajo agregacijo ali izra\u010dun snapshot state kot posebno vrsto. In to bistveno poenostavi mnoge stvari. <\/li>\n<li>Materialized Views omogo\u010dajo zaobiti omejitev enega indeksa. Morda tega nisem razlo\u017eil zelo jasno, a ko smo nalagali dnevnike, so bili surovi dnevniki v tabeli z enim indeksom, medtem ko so bili dnevniki atributov v drugi tabeli, torej iste podatke, le filtrirane, vendar je bil indeks popolnoma druga\u010den. Na videz so to isti podatki, vendar z druga\u010dno sortiranjem. In Materialized Views omogo\u010dajo, da se, \u010de potrebujete, izognete taki omejitvi ClickHouse. <\/li>\n<li>Zmanj\u0161ajte granularnost indeksa za to\u010dne poizvedbe. <\/li>\n<li>In pametno razporedite podatke, posku\u0161ajte \u010dim bolj lokalizirati podatke znotraj stre\u017enika. In posku\u0161ajte, da tudi poizvedbe uporabljajo lokalizacijo tam, kjer je to mogo\u010de. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c0fc1737986e3f18ed1d3c53df9f0252.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In summary, we can say that ClickHouse has firmly established itself in both commercial databases and open-source databases, specifically for analytics. It fits wonderfully into this landscape. Moreover, it is gradually starting to displace others because when you have ClickHouse, you don't need InfiniDB. Vertica may soon become unnecessary if they provide proper SQL support. Enjoy using it!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teorija i praksa kori\u0161\u0107enja ClickHouse-a u realnim aplikacijama. Aleksandar Zajcev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6e9a65d32eb6de7f9f139a30e7ab0d25.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u2014<em>Thank you for the presentation! Very interesting! Were there any comparisons with Apache Phoenix?<\/em><\/p>\n<p><\/p>\n<p>-No, I haven't heard anyone make comparisons. Both we and Yandex try to keep track of all comparisons of ClickHouse with different databases. Because if something turns out to be faster than ClickHouse, then Alexey Milovidov can't sleep at night and quickly starts to accelerate it. I haven't heard of such a comparison. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>(Alexey Milovidov) Apache Phoenix is an SQL engine on HBase. HBase is mainly designed for key-value type work scenarios. Each row can have an arbitrary number of columns with arbitrary names. This can be said about systems like HBase and Cassandra. Heavy analytical queries won't work well on them. Or you might think they work fine if you haven't had any experience with ClickHouse.<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Hvala<\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>Good afternoon! I've been quite interested in this topic because I have an analytical subsystem. But when I look at ClickHouse, I get the feeling that ClickHouse is very well suited for event analysis, mutable data. And if I need to analyze a lot of business data with a bunch of large tables, then ClickHouse, as I understand it, isn't very suitable for me? Especially if they change. Is this correct, or are there examples that could refute this?<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>To je pravilno. In to je res za ve\u010dino specializiranih analiti\u010dnih podatkovnih baz. Te so zasnovane tako, da obravnavajo eno ali ve\u010d velikih tabel, ki so spremenljive, in veliko manj\u0161ih, ki se po\u010dasneje spreminjajo. To pomeni, da ClickHouse ni kot Oracle, kjer lahko shranite vse in gradite zelo kompleksne poizvedbe. Da bi ClickHouse u\u010dinkovito uporabljali, je treba zasnovati shemo na na\u010din, ki dobro deluje v ClickHouse. To pomeni, da se je treba izogniti pretirani normalizaciji, uporabljati slovarje in se truditi ustvariti manj dolgih povezav. In \u010de je shema tako zasnovana, lahko podobne poslovne naloge na ClickHouse re\u0161ujemo veliko bolj u\u010dinkovito kot v tradicionalni relacijski podatkovni bazi. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Hvala za predstavitev! Imam vpra\u0161anje glede zadnjega finan\u010dnega primera. Imeli so analitiko. Treba je bilo primerjati, kako se stvari gibljejo gor in dol. In mislim, da ste sistem zgradili prav za to analitiko? \u010ce bi jutri potrebovali kak\u0161en drug poro\u010dilo glede teh podatkov, ali bi bilo potrebno ponovno zgraditi shemo in nalo\u017eiti podatke? Torej, bi morali opraviti kak\u0161no predobdelavo, da bi lahko ustvarili poizvedbo?<\/em><\/p>\n<p><\/p>\n<p>Seveda, to je uporaba ClickHouse za povsem konkretno nalogo. To bi bilo tradicionalno re\u0161eno v okviru Hadoop-a. To je idealna naloga za Hadoop. A v Hadoop-u je to zelo po\u010dasi. Moja cilj je pokazati, da lahko s ClickHouse-om re\u0161ujemo naloge, ki jih obi\u010dajno obravnavamo z drugimi sredstvi, vendar jih re\u0161ujemo bistveno u\u010dinkoviteje. To je zasnovano za specifi\u010dno nalogo. Seveda, \u010de je naloga nekoliko podobna, jo lahko re\u0161ujemo na podoben na\u010din. <\/p>\n<p><\/p>\n<p><em>Razumem. Rekli ste, da se je obdelovalo 50 ur. Je to od samega za\u010detka, ko so bili podatki nalo\u017eeni, ali ko so bili pridobljeni rezultati?<\/em><\/p>\n<p><\/p>\n<p>Da-da.<\/p>\n<p><\/p>\n<p><em>Dobro, najlep\u0161a hvala.<\/em><\/p>\n<p><\/p>\n<p>To je na 3-stre\u017eni klasterski konfiguraciji. <\/p>\n<p><\/p>\n<p><em>Pozdravljam! Hvala za predstavitev! Vse je zelo zanimivo. Malo ne spra\u0161ujem glede funkcionalnosti, ampak o uporabi ClickHouse z vidika stabilnosti. Se vam je kdaj zgodilo, da ste morali obnoviti? Kako se obna\u0161a ClickHouse v takih situacijah? Ali se je zgodilo, da ste izgubili tudi replikacijo? Mi smo na primer pri ClickHouse-u naleteli na te\u017eavo, ko je le-ta presegel svoj limit in padel.<\/em><\/p>\n<p><\/p>\n<p>Seveda, popolni sistemi ne obstajajo. Tudi ClickHouse ima svoje te\u017eave. Ampak, ste kdaj sli\u0161ali, da Yandex.Metrica ni deloval dolgo \u010dasa? Verjetno ne. Deluje zanesljivo nekje od leta 2012-2013 na ClickHouse. O svoji izku\u0161nji lahko tudi povem, da nikoli nismo imeli popolnih okvar. Nekatere delne te\u017eave so se lahko zgodile, vendar nikoli niso bile kriti\u010dne dovolj, da bi resno vplivale na posel. Nikoli to ni bilo. ClickHouse je dovolj zanesljiv in ne odpove naklju\u010dno. O tem ni treba skrbeti. To ni nedodelana stvar. To so dokazale mnoge dru\u017ebe. <\/p>\n<p><\/p>\n<p><em>Pozdravljeni! Rekli ste, da je treba takoj dobro premisliti o shemi podatkov. Kaj pa, \u010de se to zgodi? Moji podatki se nalivajo in nalivajo. Mine pol leta in razumem, da tako ne morem ve\u010d, moram ponovno nalo\u017eiti podatke in nekaj narediti z njimi.<\/em> <\/p>\n<p><\/p>\n<p>To seveda odvisno od va\u0161ega sistema. Obstaja ve\u010d na\u010dinov, kako to storiti prakti\u010dno brez zaustavitve. Na primer, lahko ustvarite Materialized View, v katerem naredite drugo strukturo podatkov, \u010de jo je mogo\u010de nedvoumno preslikati. T. j. \u010de omogo\u010da preslikavo z orodji ClickHouse, t. j. izvle\u010di nekatere stvari, spremeniti primarni klju\u010d, spremeniti particioniranje, potem lahko naredite Materialized View. Tja prepi\u0161ete svoje stare podatke, novi pa se bodo zapisovali samodejno. Nato se samo preklopite na uporabo Materialized View, nato spremenite zapis in staro tabelo izbri\u0161ete. To je na\u010din brez zaustavitve. <\/p>\n<p><\/p>\n<p><em>Hvala.<\/em><\/p>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/512304\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0411\u0414 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u043d\u044b. \u0418\u0445 \u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u044e\u0442 \u0438 \u0435\u0449\u0435 \u0445\u0443\u0436\u0435 \u0443\u043c\u0435\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 &quot;\u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0442\u0443\u0441&quot; \u0441 MySQL \u0438\u043b\u0438 PostgreSQL, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0441 NoSQL \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. ClickHouse \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89879,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89878","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f ClickHouse \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0417\u0430\u0439\u0446\u0435\u0432 (2018\u0433) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-26T23:42:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-26T23:42:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Teorija in praksa uporabe ClickHouse v realnih aplikacijah. Aleksander Zajcev (2018) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f ClickHouse \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0417\u0430\u0439\u0446\u0435\u0432 (2018\u0433) | ProHoster","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-26T23:42:42+00:00","article:modified_time":"2020-07-26T23:42:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89878","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:02:37","updated":"2026-02-22 15:29:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/89878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=89878"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/89878\/revisions"}],"predecessor-version":[{"id":162171,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/89878\/revisions\/162171"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/89879"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=89878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=89878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=89878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}