{"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\/et\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","title":{"rendered":"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/b46b964324a3311157d5df737526b1d1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuigi andmeid on praegu peaaegu igal pool palju, on anal\u00fc\u00fctilised andmebaasid endiselt \u00fcsna eksootilised. Neid tuntakse halvasti ja neid osatakse veelgi v\u00e4hem t\u00f5husalt kasutada. Paljud j\u00e4tkavad \"kaktuse s\u00f6\u00f6mist\" MySQL v\u00f5i PostgreSQLiga, mis on loodud teiste stsenaariumide jaoks, vaevavad end NoSQLiga v\u00f5i maksavad liiga palju kommertslahenduste eest. ClickHouse muudab m\u00e4ngureegleid ja v\u00e4hendab oluliselt barj\u00e4\u00e4ri sisenemiseks anal\u00fc\u00fctiliste andmebaasi haldustarkvarade maailma.<\/p>\n<p><\/p>\n<p>Ettekanne BackEnd Conf 2018 ja see on avaldatud ettekandja loal.<\/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=\"M\u00e4ngi videot\" 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=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/6c55b639d9703f460d99e0b0b1194507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKes ma olen ja miks ma r\u00e4\u00e4gin ClickHouse'ist? Olen LifeStreet'i arenduse direktor, kes kasutab ClickHouse'i. Lisaks olen Altinity asutaja. See on Yandexi partner, kes edendab ClickHouse'i ja aitab Yandexil ClickHouse'i edukamaks muuta. Olen ka valmis jagama teadmisi ClickHouse'i kohta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/36af6acba62271f7aa19dda2eb470870.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja veel, ma ei ole Petja Zaitsevi vend. Sellest k\u00fcsitakse mind sageli. Ei, me ei ole vennad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/6ca605f97619a1373bb8a92f88d480d5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00abK\u00f5igile on teada\u00bb, et ClickHouse:<\/p>\n<p><\/p>\n<ul>\n<li>V\u00e4ga kiire,<\/li>\n<li>V\u00e4ga mugav, <\/li>\n<li>Kasutatakse Yandexis. <\/li>\n<\/ul>\n<p><\/p>\n<p>Muudatakse v\u00e4hem tuntuks, millistes ettev\u00f5tetes ja kuidas seda kasutatakse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/c097b003bf8ea13b8a3bb765270e99c8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>R\u00e4\u00e4gin teile, milleks, kus ja kuidas ClickHouse'i kasutatakse, peale Yandexi. <\/p>\n<p><\/p>\n<p>R\u00e4\u00e4gin, kuidas konkreetsed \u00fclesanded lahendatakse ClickHouse'i abil erinevates ettev\u00f5tetes, milliseid ClickHouse'i t\u00f6\u00f6riistu saate oma \u00fclesannete jaoks kasutada ja kuidas neid on erinevates ettev\u00f5tetes kasutatud.<\/p>\n<p><\/p>\n<p>Olen valinud kolm n\u00e4idet, mis n\u00e4itavad ClickHouse'i erinevaid k\u00fclgi. M\u00f5tlen, et see on huvitav.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/d3cab92ceccd6c7d01ca1f28b028803f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esimene k\u00fcsimus: \u00abMiks on vajalik ClickHouse?\u00bb. Kuigi k\u00fcsimus tundub piisavalt ilmne, on sellele rohkem kui \u00fcks vastus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/1a4e14cc041a3c01ad0fd2a305aeeab0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Esimene vastus \u2013 tootlikkuse nimel. ClickHouse on v\u00e4ga kiire. Anal\u00fc\u00fcs ClickHouse'is on samuti v\u00e4ga kiire. Seda saab sageli kasutada seal, kus midagi muud t\u00f6\u00f6tab v\u00e4ga aeglaselt v\u00f5i v\u00e4ga halvasti. <\/li>\n<li>Teine vastus \u2013 see on maksumus. Eelk\u00f5ige skaleerimise maksumus. N\u00e4iteks Vertica on t\u00e4iesti suurep\u00e4rane andmebaas. See t\u00f6\u00f6tab v\u00e4ga h\u00e4sti, kui teil ei ole v\u00e4ga palju terabaite andmeid. Kuid kui jutt on sadadest terabaidist v\u00f5i petabaidist, siis litsentsi ja toe maksumus t\u00f5useb piisavalt suureks. Ja see on kallis. ClickHouse on aga tasuta. <\/li>\n<li>Kolmas vastus on tegevuskulu. See l\u00e4henemine on natuke teiselt poolt. RedShift on suurep\u00e4rane analoog. RedShiftis saab v\u00e4ga kiiresti lahenduse teha. See t\u00f6\u00f6tab h\u00e4sti, kuid see maksab iga tunni, iga p\u00e4eva ja iga kuu l\u00fchidalt Amazonile \u00fcsna kallilt, kuna see on oluliselt kulukas teenus. Google BigQuery on samuti. Kui keegi on seda kasutanud, siis ta teab, et seal saab k\u00e4itada mitu p\u00e4ringut ja \u00e4kki saada arve sadade dollarite eest. <\/li>\n<\/ul>\n<p><\/p>\n<p>ClickHouse'is ei ole neid probleeme. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/3084a8bd9271f14726d73989946816c5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kus kasutatakse ClickHouse'i praegu? Peale Yandexi kasutatakse ClickHouse'i mitmesugustes \u00e4ri- ja ettev\u00f5tetes. <\/p>\n<p><\/p>\n<ul>\n<li>Esiteks on see veebirakenduste anal\u00fc\u00fcs, st see on kasutusjuht, mis tuli Yandexist.<\/li>\n<li>Palju AdTech ettev\u00f5tteid kasutavad ClickHouse'i. <\/li>\n<li>Paljud ettev\u00f5tted, kellel on vaja anal\u00fc\u00fcsida operatiivlogisid erinevatest allikatest.<\/li>\n<li>M\u00f5ned ettev\u00f5tted kasutavad ClickHouse'i turvalogide j\u00e4lgimiseks. Nad laadivad need ClickHouse'i, teevad aruandeid ja saavad vajalikud tulemused.<\/li>\n<li>Ettev\u00f5tted hakkavad seda kasutama finantsanal\u00fc\u00fcsis, st j\u00e4rk-j\u00e4rgult suur \u00e4ri ka valib ClickHouse'i. <\/li>\n<li>CloudFlare. Kui keegi j\u00e4lgib ClickHouse'i, siis on ta kindlasti kuulnud selle ettev\u00f5tte nime. See on \u00fcks olulisemaid panustajaid kogukonnas. Ja neil on v\u00e4ga t\u00f5sine ClickHouse'i paigaldus. N\u00e4iteks nad tegid Kafka Engine'i ClickHouse'i jaoks. <\/li>\n<li>Telekommunikatsiooni ettev\u00f5tted on hakanud seda kasutama. Mitmed ettev\u00f5tted kasutavad ClickHouse'i kas proof of conceptina v\u00f5i juba tootmises.<\/li>\n<li>\u00dcks ettev\u00f5te kasutab ClickHouse'i tootmisprotsesside j\u00e4lgimiseks. Nad testivad mikrokiipe, registreerivad hulga parameetreid, seal on umbes 2000 omadust. Ja seej\u00e4rel anal\u00fc\u00fcsivad \u2013 kas partii on hea v\u00f5i halb.<\/li>\n<li>Blokiaanal\u00fc\u00fcs. On selline Venemaa ettev\u00f5te nagu Bloxy.info. See anal\u00fc\u00fcsib ethereum-v\u00f5rku. Nad tegid seda ka ClickHouse'i abil. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/8a0c1924a20ed2d15cd0f959e9b3e499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lisaks ei ole suurus t\u00e4htis. On palju ettev\u00f5tteid, kes kasutavad \u00fchte v\u00e4ikest serverit. Ja see lahendab nende probleemid. Ja veel rohkem ettev\u00f5tteid kasutavad suuri klastreid, mis koosnevad paljusid <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/\"   title=\"serverid\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1513\">serverid<\/a> v\u00f5i k\u00fcmneid servereid. <\/p>\n<p><\/p>\n<p>Ja kui vaadata rekordite j\u00e4rgi, siis:<\/p>\n<p><\/p>\n<ul>\n<li>Yandex: 500+ serverit, nad salvestavad 25 miljardit kirjet p\u00e4evas.<\/li>\n<li>LifeStreet: 60 serverit, umbes 75 miljardit kirjet p\u00e4evas. Servereid on v\u00e4hem, kirjeid rohkem kui Yandexis. <\/li>\n<li>CloudFlare: 36 serverit, 200 miljardi kirjet p\u00e4evas, mida nad hoiavad. Neil on veel v\u00e4hem servereid ja veel rohkem andmeid, mida nad hoiavad. <\/li>\n<li>Bloomberg: 102 <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/dts-los-angeles\/\"   title=\"serverilt\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3643\">serverilt<\/a>, umbes triljon kirjet p\u00e4evas. Rekordite hoidja.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/49194030b6586221cb17029889ce33da.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Geograafiliselt on see ka palju. Siin on kaart, mis n\u00e4itab heatmap'i, kus ClickHouse'i maailmas kasutatakse. Siin paistavad silma Venemaa, Hiina, Ameerika. Euroopa riike on v\u00e4he. Ja v\u00f5ib v\u00e4lja tuua 4 klastrit.<\/p>\n<p><\/p>\n<p>See on v\u00f5rdlev anal\u00fc\u00fcs, siin ei ole vaja otsida absoluutarve. See on anal\u00fc\u00fcs k\u00fclastajatest, kes loevad ingliskeelseid materjale Altinity veebisaidil, sest seal pole venekeelseid. Venemaa, Ukraina, Valgevene, s.t. venekeelne osa kogukonnast, on k\u00f5ige arvukamad kasutajad. Seej\u00e4rel tulevad USA ja Kanada. Hiina tuleb kiiresti j\u00e4rele. Pool aastat tagasi ei olnud Hiinat peaaegu \u00fcldse, n\u00fc\u00fcd on Hiina juba Euroopa \u00fcle l\u00e4inud ja j\u00e4tkab kasvu. Vanaproua Euroopa j\u00e4\u00e4b raskeveo asemel j\u00e4rele, samas on ClickHouse'i juhtiv kasutaja, nagu kummaline see ka ei tunduks, Prantsusmaa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/3a8305c51b1bd62f3467b795402df4ed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Miks ma seda k\u00f5ike r\u00e4\u00e4gin? Selleks, et n\u00e4idata, et ClickHouse saab standardseks lahenduseks suurte andmete anal\u00fc\u00fcsimiseks ja seda kasutatakse juba v\u00e4ga paljudes kohtades.<\/strong> Kui te seda kasutate, olete \u00f5igel teel. Kui te veel ei kasuta, siis ei pea muretsema, et j\u00e4\u00e4te \u00fcksi ja keegi teid ei aita, sest juba paljud tegelevad sellega.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/6aa635f3a35034d3af837c78b2c8fe60.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Need on ClickHouse'i reaalsed kasutusn\u00e4ited mitmes ettev\u00f5ttes. <\/p>\n<p><\/p>\n<ul>\n<li>Esimene n\u00e4ide on reklaamiv\u00f5rk: migratsioon Verticalt ClickHouse'i. Ja ma tean mitmeid ettev\u00f5tteid, kes on Vertica kaudu kolinud v\u00f5i on kolimisel. <\/li>\n<li>Teine n\u00e4ide on tehingute andmehoidla ClickHouse'is. See on n\u00e4ide, mis on \u00fcles ehitatud antipattern'idel. K\u00f5ik, mida ClickHouse'is ei tohiks teha arendajate n\u00f5uannete j\u00e4rgi, on siin tehtud. Ja see on tehtud nii t\u00f5husalt, et see t\u00f6\u00f6tab. Ja t\u00f6\u00f6tab palju paremini kui t\u00fc\u00fcpiline tehingute lahendus. <\/li>\n<li>Kolmas n\u00e4ide on jaotatud arvutused ClickHouse'is. Oli k\u00fcsimus selle kohta, kuidas ClickHouse'i integreerida Hadoopi \u00f6kos\u00fcsteemi. N\u00e4itan n\u00e4idet, kuidas firma tegi ClickHouse'is midagi t\u00fc\u00fcpi analoog map reduce konteinerist, j\u00e4lgides andmete lokaliseerimist jne, et lahendada v\u00e4ga mitte triviaalne \u00fclesanne. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/e08ab5418500599f08d40324ccdfbcd0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>LifeStreet \u2013 See on Ad Tech ettev\u00f5te, millel on k\u00f5ik tehnoloogiad, mis on seotud reklaamiv\u00f5rguga. <\/li>\n<li>Tegeleb reklaamide optimeerimise ja programmatic bidding'iga. <\/li>\n<li>Palju andmeid: umbes 10 miljardit s\u00fcndmust p\u00e4evas. Need s\u00fcndmused v\u00f5ivad seejuures jaguneda mitmeks alams\u00fcndmuseks.<\/li>\n<li>Palju kliente nendele andmetele, ning need ei ole ainult inimesed, vaid palju rohkem \u2013 erinevad algoritmid, mis tegelevad programmilise pakkumisega. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/2da99b53eb25f675a2431027f86db934.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ettev\u00f5te on l\u00e4binud pika ja keerulise tee. Olen sellest r\u00e4\u00e4kinud HighLoadis. Algul kolis LifeStreet MySQL-lt (v\u00e4ikese peatusega Oracle\u2019il) Verticasse. Ja sellest on v\u00f5imalik leida juttu. <\/p>\n<p><\/p>\n<p>Ja k\u00f5ik oli v\u00e4ga h\u00e4sti, kuid \u00fcsna kiiresti sai selgeks, et andmed kasvavad ja Vertica on kallis. Seet\u00f5ttu otsiti erinevaid alternatiive. M\u00f5ned neist on siin loetletud. Tegime t\u00f5epoolest proof of concept\u2019i v\u00f5i m\u00f5nikord ka j\u00f5udlustestimist peaaegu k\u00f5igi andmebaasidega, mis olid turul saadaval aastatel 2013 kuni 2016 ja vastasid funktsionaalsuselt umbes meie vajadustele. Ja m\u00f5nest neist r\u00e4\u00e4kisin samuti HighLoadis.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/4bebd2f43892cbef9249ddded1b8a70a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dclesanne oli migratsioon Verticast, sest andmed kasvasid. Ja nad kasvasid eksponentsiaalselt mitu aastat. Siis j\u00f5udsid nad tasemele, kuid siiski. Viies seda kasvu prognoosides, ettev\u00f5tte n\u00f5uded andmemahu osas, mille p\u00f5hjal tuleb teha mingisugust anal\u00fc\u00fcsi, oli selge, et varsti hakatakse r\u00e4\u00e4kima petabaitidest. Ja petabaitide eest tuleb juba v\u00e4ga palju maksta, seega otsiti alternatiivi, kuhu liikuda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/f170a4307168e8560122966eab85c24e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuhu liikuda? Pikka aega ei olnud \u00fcldse selge, kuhu minna, sest \u00fchelt poolt on olemas kommertstandmebaasid, mis n\u00e4ivad t\u00f6\u00f6tavat h\u00e4sti. M\u00f5ned neist t\u00f6\u00f6tavad peaaegu sama h\u00e4sti kui Vertica, m\u00f5ned halvemini. Kuid nad k\u00f5ik on kallid, midagi odavamat ja paremat leida ei \u00f5nnestunud. <\/p>\n<p><\/p>\n<p>Teiselt poolt on olemas avatud l\u00e4htekoodiga lahendused, mida ei ole v\u00e4ga palju, st andmete anal\u00fc\u00fcsi jaoks v\u00f5ib neid s\u00f5rmedel kokku lugeda. Need on tasuta v\u00f5i odavad, kuid t\u00f6\u00f6tavad aeglaselt. Ja neis puudub sageli vajalik ja kasulik funktsionaalsus.<\/p>\n<p><\/p>\n<p>Laadi, mis \u00fchendaks hea, mis olemas kommertstandmebaasides, ja kogu tasuta, mis olemas avatud l\u00e4htekoodiga lahendustes \u2013 ei olnud midagi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/abbefbf0d9578b554f81579b87213a50.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ei olnud midagi, kuni ootamatult Yandex ei toonud, nagu maagia, ClickHouse\u2019i. See oli ootamatu lahendus, ja seni k\u00fcsitakse: \"Miks?\", kuid siiski. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/c88981aace9d5925396ca5171241b7d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja juba suvel 2016. aastal hakkasime uurima, mis on ClickHouse. Selgus, et m\u00f5nikord v\u00f5ib see olla kiiremini kui Vertica. Testisime erinevaid stsenaariume erinevate p\u00e4ringute peal. Ja kui p\u00e4ringutas kasutati ainult \u00fchte tabelit, st ilma mingite join'ideta, siis oli ClickHouse kaks korda kiiremini kui Vertica. <\/p>\n<p><\/p>\n<p>Ma ei lasknud end laiskusest andestada ja vaatasin hiljuti ka Yandexi teste. Seal on sama: ClickHouse on kaks korda kiiremini kui Vertica, seet\u00f5ttu r\u00e4\u00e4givad nad sellest sageli. <\/p>\n<p><\/p>\n<p>Aga kui p\u00e4ringutes on join'id, siis on k\u00f5ik mitte nii \u00fcheselt m\u00f5istetav. Ja ClickHouse v\u00f5ib olla Vertica'st kaks korda aeglasem. Kui natuke p\u00e4ringut kohendada ja \u00fcmber kirjutada, siis on need enam-v\u00e4hem \u00fchesugused. Mitte halb. Ja tasuta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/188bf56b72123175a18d2cb97d989a47.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Saades testitulemused ja vaadates sellele erinevatest nurkadest, l\u00e4ks LifeStreet ClickHouse'i \u00fcle.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/1183b9b7681916686c52786fc95ccb45.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See on 2016. aasta, meenutan. See oli nagu anekdoot hiirtest, kes nutsid ja torkisid end, aga j\u00e4tkasid kaktuse s\u00f6\u00f6mist. Ja sellest on p\u00f5hjalikult r\u00e4\u00e4gitud, olemas on selle kohta videosid jne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/993052ed83dc295c3777e614c7703456.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seet\u00f5ttu ma ei hakka sellest p\u00f5hjalikult r\u00e4\u00e4kima, r\u00e4\u00e4gin ainult tulemustest ja m\u00f5nest huvitavast asjast, millest ma tol ajal ei r\u00e4\u00e4kinud. <\/p>\n<p><\/p>\n<p>Tulemused on j\u00e4rgmised:<\/p>\n<p><\/p>\n<ul>\n<li>Edukalt migratsioon ja s\u00fcsteem on juba \u00fcle aasta olnud tootmises. <\/li>\n<li>Tootlikkus ja paindlikkus on kasvanud. 10 miljardi kirje asemel, mida me saime endale lubada s\u00e4ilitada p\u00e4evade kaupa ja siis l\u00fchikest aega, hoiab LifeStreet n\u00fc\u00fcd 75 miljardit kirjet p\u00e4evas ja suudab seda teha 3 kuud v\u00f5i kauem. Tippsituatsioonis salvestatakse kuni miljon s\u00fcndmust sekundis. \u00dcks miljon SQL-p\u00e4ringut p\u00e4evas j\u00f5uab sellesse s\u00fcsteemi, enamasti erinevatelt robotitelt. <\/li>\n<li>Hoolimata sellest, et ClickHouse'i jaoks hakkas kasutama rohkem servereid kui Vertica jaoks, toimus s\u00e4\u00e4stmine ka riistvaras, sest Verticas kasutati \u00fcsna kalliseid SAS-kettasid. ClickHouse'is kasutati SATA-d. Miks? Sest Verticas on insert s\u00fcnkroonne. Ja s\u00fcnkroniseerimine n\u00f5uab, et kettad ei peaks v\u00e4ga palju pidurdama, samuti ei tohi v\u00f5rgu\u00fchendus v\u00e4ga aeglane olla, st see on piisavalt kallis operatsioon. Samas ClickHouse'is on insert as\u00fcnkroonne. Veelgi enam, k\u00f5ike saab alati kohapeal kirjutada, selle jaoks ei ole mingeid lisakulusid, seega saab andmeid ClickHouse'i sisestada palju kiiremini kui Vertica'sse isegi mitte k\u00f5ige kiirematel ketastel. Ja lugemine on umbes sama. Lugemise ajal SATA-l, kui need on RAID-is, on see k\u00f5ik piisavalt kiire. <\/li>\n<li>Ei ole litsentsiga piiratud, st 3 petabaidid andmeid 60 serveris (20 serverit on \u00fcks koopia) ja 6 triljonit kirjet faktide ja agregaatide osas. Midagi sarnast ei suutnud Vertica endale lubada. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/f461cdc12917ee655655dd7eb9c32bb2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd liigun ma selles n\u00e4ites praktiliste asjade juurde.<\/p>\n<p><\/p>\n<ul>\n<li>Esimene asi on efektiivne skeem. Skeemist s\u00f5ltub v\u00e4ga palju. <\/li>\n<li>Teine asi on efektiivse SQL-i genereerimine.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/e7dc2a217e77c8794ff6e8a754e78c85.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u00fc\u00fcpiline OLAP-p\u00e4ring on select. Osa veerge l\u00e4heb group by, osa veerge l\u00e4heb agregaatfunktsioonidesse. On where, mida saab pidada kuubi l\u00f5ikeks. Kogu group by saab pidada projektsiooniks. Seet\u00f5ttu nimetatakse seda multidimensionaalseks andmeanal\u00fc\u00fcsiks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/a03a2d7fd28905ae83183346f0c673e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja sageli modelleeritakse seda star-skeemi kujul, kus on keskne fakt ja selle fakti omadused k\u00fclgedel, kiirte kujul. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/d9671af4b39cc83e1ae49e6fd75d0e02.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja f\u00fc\u00fcsilise disaini seisukohalt, kuidas see tabelisse asetub, tehakse tavaliselt normaliseeritud esitamine. V\u00f5ite denormaliseerida, kuid see on ketta peal kallis ja p\u00e4ringute osas mitte v\u00e4ga t\u00f5hus. Seega tehakse tavaliselt normaliseeritud esitamine, st faktitabel ja palju-palju m\u00f5\u00f5tmetabelit. <\/p>\n<p><\/p>\n<p>Aga ClickHouse'is t\u00f6\u00f6tab see halvasti. On kaks p\u00f5hjust: <\/p>\n<p><\/p>\n<ul>\n<li>Esimene \u2013 see, et ClickHouse'il ei ole v\u00e4ga h\u00e4id join'e, st join'id on olemas, kuid need on halvad. Praegu on nad halvad. <\/li>\n<li>Teine \u2013 see, et tabeleid ei uuendata. Tavaliselt on neil tabelitel, mis on star-skeemi \u00fcmber, vaja midagi muuta. N\u00e4iteks kliendi nimi, ettev\u00f5tte nimi jne. Ja see ei toimi. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ja ClickHouse'is on sellele v\u00e4ljak\u00e4ik. Lausa kaks: <\/p>\n<p><\/p>\n<ul>\n<li>Esimene \u2013 see, et kasutada s\u00f5nastikke. External Dictionaries on see, mis aitab 99% ulatuses lahendada star-skeemi, uuenduste ja muu probleemi. <\/li>\n<li>Teine \u2013 see, et kasutada mahtusid. Mahtud aitavad samuti vabaneda join'ist ja normaliseerimise probleemidest. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/775972cc412651600799173407384492.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Join'id ei ole vajalikud. <\/li>\n<li>Uuendatavad. Alates m\u00e4rtsist 2018 on ilmunud dokumenteerimata v\u00f5imalus (dokumentatsioonis te ei leia seda), et uuendada s\u00f5nastikke osaliselt, st neid kirjeid, mis on muutunud. Praktikas on see nagu tabel.<\/li>\n<li>Alati m\u00e4lus, seega t\u00f6\u00f6tavad join'id s\u00f5nastikuga kiiremini kui siis, kui see oleks tabel, mis on kettal ja pole isegi fakt, et see on vahem\u00e4lus, t\u00f5en\u00e4oliselt ei ole. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/f73176a650b6d885011e3265c2af2fc3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Samuti ei ole join'id vajalikud.<\/li>\n<li>See on kompaktne esitus 1 paljudele. <\/li>\n<li>Ja minu arvates on massiivid loodud geekkide jaoks. Need on lambda-funktsioonid jne. <\/li>\n<\/ul>\n<p><\/p>\n<p>See ei ole lihtsalt t\u00fchja jutu p\u00e4rast. See on v\u00e4ga v\u00f5imas funktsionaalsus, mis v\u00f5imaldab paljusid asju teha v\u00e4ga lihtsalt ja elegantselt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/5d813952ca8f3da7a74c6f2a15d80a9b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u00fc\u00fcpilised n\u00e4ited, mis aitavad lahendada massiive. Need n\u00e4ited on lihtsad ja piisavalt ilustratiivsed:<\/p>\n<p><\/p>\n<ul>\n<li>Otsi siltide j\u00e4rgi. Kui sul on seal hashtags ja soovid leida mingeid postitusi selle sildi j\u00e4rgi. <\/li>\n<li>Otsi key-value paaride j\u00e4rgi. Seal on ka mingeid atribuute koos v\u00e4\u00e4rtustega. <\/li>\n<li>Hoia loendeid v\u00f5tmetest, mida pead t\u00f5lkima millegi muuks.<\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00f5iki neid \u00fclesandeid saab lahendada ka ilma massiivideta. Silte saab panna mingisse ritta ja regulaarselt v\u00e4ljendit kasutades valida v\u00f5i eraldi tabelisse, kuid siis tuleb teha \u00fchendused (join).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/dbbf90eee098c4564206532f24156823.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga ClickHouse'is ei pea mingit lisat\u00f6\u00f6d tegema, piisab, kui kirjeldad massiivi stringide jaoks hashtagi v\u00f5i teed pesakonstruktsiooni key-value t\u00fc\u00fcpi s\u00fcsteemide jaoks.<\/p>\n<p><\/p>\n<p>Pesakonstruktsioon \u2013 see v\u00f5ibolla ei ole k\u00f5ige \u00f5nnestunum nimetus. Need on kaks massiivi, millel on \u00fchine osa nimedes ja m\u00f5ned seotud omadused. <\/p>\n<p><\/p>\n<p>Ja sildi j\u00e4rgi on otsimine v\u00e4ga lihtne. Funktsioon <code>has<\/code>, mis kontrollib, kas massiivis on element. K\u00f5ik, leidsime k\u00f5ik postitused, mis kuuluvad meie konverentsile.<\/p>\n<p><\/p>\n<p>Otsimine subidi j\u00e4rgi on veidi keerulisem. Peame esmalt leidma v\u00f5tme indeksi ja seej\u00e4rel v\u00f5tma selle indeksi elemendi ning kontrollima, kas see v\u00e4\u00e4rtus on selline, nagu me vajame. Kuid see on siiski v\u00e4ga lihtne ja kompaktne.<\/p>\n<p><\/p>\n<p>Regulaarne v\u00e4ljend, mille sa tahaksid kirjutada, kui sa k\u00f5ik seda \u00fche ritta hoiaksid, oleks k\u00f5igepealt kohmakas. Teiseks, see t\u00f6\u00f6taks palju kauem kui kaks massiivi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/17664c3121b2b0d33188adbfaa653d4e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine n\u00e4ide. Sul on massiiv, milles hoiad ID-sid. Ja sa saad need nimedeks t\u00f5lkida. Funktsioon <code>arrayMap<\/code>. See on t\u00fc\u00fcpiline lambda-funktsioon. Sa edastad sinna lambda-v\u00e4ljendeid. Ja see toob igale ID-le s\u00f5nastikus v\u00e4lja nime v\u00e4\u00e4rtuse.<\/p>\n<p><\/p>\n<p>Sarnasel viisil on v\u00f5imalik ka otsingut teha. Edastatakse predikaat-funktsioon, mis kontrollib, millele elemendid vastavad. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/146917b71a35d38a550cd9accf6ab2f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Need asjad lihtsustavad skeemi ja lahendavad hulgaliselt probleeme. <\/p>\n<p><\/p>\n<p>Aga j\u00e4rgmine probleem, millega me silmitsi seisame ja millest ma tahaksin r\u00e4\u00e4kida, on efektiivsed p\u00e4ringud. <\/p>\n<p><\/p>\n<ul>\n<li>ClickHouse'is ei ole p\u00e4ringute planeerijat. \u00dcldse mitte. <\/li>\n<li>Kuid keerulisi p\u00e4ringuid tuleb ikkagi planeerida. Millal? <\/li>\n<li>Kui p\u00e4ringus on mitu join'i, mis \u00fcmbritsete alamp\u00e4ringutes, siis on oluline, millises j\u00e4rjekorras neid t\u00e4idetakse. <\/li>\n<li>Ja teine asi on see, kui p\u00e4ring on jaotatud. Sest jaotatud p\u00e4ringus t\u00e4idetakse ainult k\u00f5ige sisemine alamp\u00e4ring ja k\u00f5ik muu edastatakse \u00fchele serverile, millega olete \u00fchendatud, ja toimub seal. Seet\u00f5ttu, kui teil on jaotatud p\u00e4ringud paljude join'idega, tuleb m\u00e4\u00e4rata j\u00e4rjekord. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ja isegi lihtsamatel juhtudel tuleks m\u00f5nikord planeerija t\u00f6\u00f6d teha ja p\u00e4ringuid natuke \u00fcmber kirjutada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/217d422b429e8b4bc13abbf0efdf6be1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin on n\u00e4ide. Vasakul on p\u00e4ring, mis n\u00e4itab 5 parimat riiki. Ja see kestab 2,5 sekundit, minu arvates. Ja paremal on sama p\u00e4ring, kuid natuke \u00fcmber kirjutatud. Me ei grupeerinud ridade kaupa, vaid grupeerisime v\u00f5tme (int) j\u00e4rgi. Ja see on kiiremini. P\u00e4rast seda liitsime tulemusele s\u00f5nastiku. Selle asemel, et p\u00e4ring kestaks 2,5 sekundit, kestab see 1,5 sekundit. See on hea. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/f19fb7d7f0397a3b38b2a3bd179c156b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sarnane n\u00e4ide filtrite \u00fcmber kirjutamisest. Siin on p\u00e4ring Venemaa kohta. See kestab 5 sekundit. Kui me kirjutame selle \u00fcmber nii, et v\u00f5rreldame taas mitte rida, vaid numbreid mingite v\u00f5tmete kogumiga, mis kuuluvad Venemaale, siis on see palju kiirem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/0c1dd1f317133d1d106ffef85f337079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Selliseid trikke on palju. Ja need v\u00f5imaldavad m\u00e4rkimisv\u00e4\u00e4rselt kiirendada p\u00e4ringute t\u00e4itmist, mis tunduvad juba kiiret, v\u00f5i vastupidi, t\u00f6\u00f6tavad aeglaselt. Need saab teha veelgi kiiremateks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/25b132790b03f239e38237af5e92ab63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Maksimaalne t\u00f6\u00f6 jaotatud re\u017eiimis. <\/li>\n<li>Sorteerimine minimaalsete t\u00fc\u00fcpide j\u00e4rgi, nagu ma seda tegin int-de p\u00f5hjal. <\/li>\n<li>Kui on mingeid join'e, s\u00f5nastikke, siis on parem need teha viimases j\u00e4rjekorras, kui teil on andmed v\u00e4hemalt osaliselt grupeeritud, siis on join'i v\u00f5i s\u00f5nastiku \u00fcleskutse v\u00e4hem kordi ning see on kiirem. <\/li>\n<li>Filtrite asendamine. <\/li>\n<\/ul>\n<p><\/p>\n<p>On veel teisi tehnikaid, mitte ainult need, mida ma demonstreerisin. Ja k\u00f5ik need v\u00f5imaldavad m\u00f5nikord m\u00e4rkimisv\u00e4\u00e4rselt kiirendada p\u00e4ringute t\u00e4itmist.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/175832796bee525909d8875bd723a881.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Liigume j\u00e4rgmise n\u00e4ite juurde. Firma X Ameerikast. Mida nad teevad? <\/p>\n<p><\/p>\n<p>\u00dclesanne oli: <\/p>\n<p><\/p>\n<ul>\n<li>Reklaamitehingute offline-seostamine. <\/li>\n<li>Erinevate seostamismudelite modelleerimine. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/0136b71a1205512d86f13e86761146f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mis on stsenaariumi sisu?<\/p>\n<p><\/p>\n<p>Tavaline k\u00fclastaja k\u00fclastab veebisaiti n\u00e4iteks 20 korda kuus erinevate reklaamide kaudu v\u00f5i tuleb lihtsalt aeg-ajalt j\u00e4lgides, kuna ta m\u00e4letab seda saiti. Ta vaatab m\u00f5ningaid tooteid, paneb need ostukorvi, eemaldab need ostukorvist. Ja l\u00f5puks ostab ta midagi. <\/p>\n<p><\/p>\n<p>M\u00f5istlikud k\u00fcsimused: \"Kellele tuleb reklaami eest tasuda, kui on vajadus?\" ja \"Milline reklaam teda m\u00f5jutas, kui m\u00f5jutas?\". See t\u00e4hendab, miks ta ostis ja kuidas teha nii, et sarnased inimesed ostaksid samuti?<\/p>\n<p><\/p>\n<p>Selle probleemi lahendamiseks on vaja siduda veebisaidil toimuvad s\u00fcndmused omavahel, st luua nende vahel side. Seej\u00e4rel tuleb need edastada anal\u00fc\u00fcsiks DWH-sse. Ja selle anal\u00fc\u00fcsi p\u00f5hjal luua mudeleid, kellele ja millist reklaami n\u00e4idata.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/e53ec81ce89150697d0eca4d72886638.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Reklaamitehing on seotud kasutaja s\u00fcndmuste kogum, mis algab reklaami n\u00e4itamisest, millele j\u00e4rgneb midagi, siis v\u00f5ib-olla ost ja hiljem v\u00f5ivad olla ostud ostus. N\u00e4iteks, kui see on mobiilirakendus v\u00f5i mobiilim\u00e4ng, siis tavaliselt installitakse rakendus tasuta, kuid kui seal toimub midagi muud, v\u00f5ivad selleks olla vajalikud rahad. Ja mida rohkem inimene rakenduses kulutab, seda v\u00e4\u00e4rtuslikum ta on. Kuid selleks tuleb k\u00f5ik siduda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/a2213613f1ef660409124ef8bcdd4fe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sidumise mudeleid on palju. <\/p>\n<p><\/p>\n<p>K\u00f5ige populaarsemad on:<\/p>\n<p><\/p>\n<ul>\n<li>Viimane interaktsioon, kus interaktsioon on kas klikk v\u00f5i n\u00e4itamine.<\/li>\n<li>Esimene interaktsioon, st esimene, mis t\u00f5i inimese veebisaidile.<\/li>\n<li>Lineaarne kombinatsioon \u2013 k\u00f5igil v\u00f5rdselt. <\/li>\n<li>H\u00e4ipumine.<\/li>\n<li>Ja muud. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/9523307d557e094d981da5b525ed0b59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas see k\u00f5ik algselt toimi? Oli Runtime ja Cassandra. Cassandrat kasutati tehingute salvestamiseks, st seal hoiti k\u00f5iki seotud tehinguid. Ja kui m\u00f5ni s\u00fcndmus j\u00f5uab Runtime'i, n\u00e4iteks mingi lehe n\u00e4itamine v\u00f5i midagi muud, tehti p\u00e4ring Cassandrale \u2013 kas selline inimene on olemas v\u00f5i mitte. Siis tuuakse v\u00e4lja tehingud, mis temaga on seotud. Ja sidumine toimus.<\/p>\n<p><\/p>\n<p>Ja kui vedas, et p\u00e4ringus on tehingu id, siis see on lihtne. Kuid tavaliselt ei vea. Seet\u00f5ttu tuli leida viimane tehing v\u00f5i tehing viimase kliki j\u00e4rgi jne. <\/p>\n<p><\/p>\n<p>Ja see k\u00f5ik t\u00f6\u00f6tas v\u00e4ga h\u00e4sti, kuni sidumine toimis viimase kliki j\u00e4rgi. Sest klikke oli n\u00e4iteks 10 miljonit p\u00e4evas, 300 miljonit kuus, kui seada kuu aknaks. Ja kuna Cassandras peab see k\u00f5ik olema m\u00e4lus, et t\u00f6\u00f6tada kiiresti, kuna Runtime peab vastama kiiresti, siis oli vaja umbes 10-15 serverit. <\/p>\n<p><\/p>\n<p>Aga kui sooviti siduda tehingut n\u00e4itamistega, siis hakkas asi koheselt tunduma mitte nii l\u00f5bus. Ja miks? On selge, et tuleb salvestada 30 korda rohkem s\u00fcndmusi. Ja seet\u00f5ttu on vaja 30 korda rohkem servereid. Tulemuseks on mingisugune astronomiline number. Hoida kuni 500 serverit selleks, et siduda, samas kui Runtime'i servereid on oluliselt v\u00e4hem, on vale number. Ja hakati m\u00f5tlema, mida teha. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/7af35f1ade680232cc83a6887891bc5c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja j\u00f5uti ClickHouse'ni. Aga kuidas seda ClickHouse'is teha? Esmapilgul tundub, et see on antipaaterne. <\/p>\n<p><\/p>\n<ul>\n<li>Tehing kasvab, me lisame sellele uusi ja uusi s\u00fcndmusi, see t\u00e4hendab, et see on muudetav, aga ClickHouse ei t\u00f6\u00f6ta h\u00e4sti muudetavate objektidega. <\/li>\n<li>Kui k\u00fclastaja meie juurde tuleb, peame v\u00e4lja t\u00f5mbama tema tehingud v\u00f5tme, tema k\u00fclastuse ID j\u00e4rgi. See on samuti punktik\u00fcsimus, ClickHouse'is nii ei tehta. Tavaliselt tehakse ClickHouse'is suuri skaneeringuid, aga meil on vaja v\u00e4lja t\u00f5mmata mitu kirjet. See on samuti antipaaterne. <\/li>\n<li>Lisaks oli tehing JSON-vormingus, kuid me ei soovinud seda \u00fcmber kirjutada, seet\u00f5ttu soovisime hoida JSON-i struktureerimata ja vajadusel sealt midagi v\u00e4lja t\u00f5mmata. Ja see on samuti antipaaterne. <\/li>\n<\/ul>\n<p><\/p>\n<p>See on antipaaterne kogum. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/2473129a5880ee3172b8ab7bf4afc376.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuid siiski \u00f5nnestus luua s\u00fcsteem, mis t\u00f6\u00f6tas v\u00e4ga h\u00e4sti. <\/p>\n<p><\/p>\n<p>Mis tehti? Ilmus ClickHouse, kuhu visati logid, jagatud kirjedeks. Ilmus atribuuditeenus, mis sai ClickHouse'ist logid. P\u00e4rast seda sai iga kirje j\u00e4rgi k\u00fclastuse ID tehingud, mis v\u00f5isid olla veel t\u00f6\u00f6tlemata, pluss snapshotid, see t\u00e4hendab, et tehingud olid juba seotud, nimelt eelneva t\u00f6\u00f6 tulemus. Nendest tehti juba loogika, valiti \u00f5ige tehing ja \u00fchendati uued s\u00fcndmused. Salvestati uuesti logisse. Logi saadeti tagasi ClickHouse'i, see t\u00e4hendab, et see on pidevalt ts\u00fckliline s\u00fcsteem. Lisaks saadeti see DWH-sse, et seal anal\u00fc\u00fcsida. <\/p>\n<p><\/p>\n<p>Just like that, it didn't work very well. To make it easier for ClickHouse when querying by visit ID, they grouped these requests into blocks of 1,000-2,000 visit IDs and extracted all transactions for 1,000-2,000 people. Then everything started to work.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/d920ce231e6e4b5fd5b27ab28f848aed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>If you look inside ClickHouse, there are only 3 main tables that serve all this. <\/p>\n<p><\/p>\n<p>The first table, where logs are poured in, is filled with logs that are virtually unprocessed.<\/p>\n<p><\/p>\n<p>The second table. Through a materialized view, non-attributed events, i.e. unrelated ones, were filtered out from these logs. And through another materialized view, transactions were extracted from these logs to build a snapshot. Specifically, a special materialized view constructed the snapshot, representing the latest accumulated state of the transaction. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/12b0adb691f483923a6c35bb6e4a5017.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Here is the text written in SQL. I would like to comment on a few important things in it. <\/p>\n<p><\/p>\n<p>The first important thing is ClickHouse's ability to extract columns and fields from JSON. That is, ClickHouse has some methods for working with JSON. They are very, very primitive. <\/p>\n<p><\/p>\n<p>visitParamExtractInt allows extracting attributes from JSON, i.e., the first occurrence is triggered. This way, you can fetch the transaction ID or visit ID. That's one. <\/p>\n<p><\/p>\n<p>Second, a clever materialized field is used here. What does this mean? It means that you can't insert it into the table; it is calculated and stored upon insertion. When you insert, ClickHouse does the work for you. And it extracts from JSON what you will need later.<\/p>\n<p><\/p>\n<p>In this case, the materialized view is for unprocessed rows. It precisely uses the first table with virtually raw logs. So, what does it do? First of all, it changes the sorting, i.e., sorting is now done by visit ID because we need to quickly extract the transaction for a specific person. <\/p>\n<p><\/p>\n<p>The second important thing is index_granularity. If you've seen MergeTree, the default index_granularity is usually set to 8,192. What is this? This parameter indicates the sparsity of the index. In ClickHouse, the index is sparse; it never indexes every record. It does this every 8,192 entries. This is good when you need to calculate a lot of data, but bad when you need just a few, as it incurs significant overhead. And if you decrease index granularity, you reduce overhead. However, it cannot be reduced to one because there might not be enough memory. The index is always stored in memory. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/5fe303061977cad64e6c0333b125d595.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Snapshoot kasutab veel m\u00f5ningaid huvitavaid ClickHouse'i funktsioone.<\/p>\n<p><\/p>\n<p>Esiteks on see AggregatingMergeTree. Ja AggregatingMergeTree'is hoitakse argMax'i, s.t. see on tehingu olek, mis vastab viimasele ajam\u00e4rgile. Tehingud genereeritakse pidevalt selle k\u00fclastaja jaoks. Ja selle tehingu uuemas olekus lisame s\u00fcndmuse ja meil on uus olek. See j\u00f5udis j\u00e4lle ClickHouse'i. Ja l\u00e4bi argMax'i selles materialiseeritud vaates saame alati saada ajakohase oleku.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/d1b87301ab5206a36bf035679f79d35a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Sidumine on \u201elahutatud\u201c Runtime'ist. <\/li>\n<li>Kuni 3 miljardit tehingut kuus hoitakse ja t\u00f6\u00f6deldakse. See on kordades rohkem kui oli Cassandras, s.t. t\u00fc\u00fcpilises tehingus\u00fcsteemis. <\/li>\n<li>Klastri 2x5 ClickHouse'i serverites. 5 serverit ja igal serveril on koopiad. See on isegi v\u00e4hem, kui oli Cassandras, et teha kliki p\u00f5hjal atribuutikat, siin on meil aga mulje p\u00f5hjal. S.t. selle asemel, et suurendada serverite arvu 30 korda, suudeti neid v\u00e4hendada. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/583779fe9e133df519411e2256401eb3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja viimane n\u00e4ide on finantsfirma Y, mis anal\u00fc\u00fcsis aktsiahindade muutuste korrelatsioone. <\/p>\n<p><\/p>\n<p>Ja \u00fclesanne oli j\u00e4rgmine:<\/p>\n<p><\/p>\n<ul>\n<li>Umbes 5000 aktsiat on. <\/li>\n<li>Hinnad on teada iga 100 millisekundi j\u00e4rel. <\/li>\n<li>Andmed on kogunenud 10 aasta jooksul. N\u00e4ib, et m\u00f5ne firma jaoks rohkem, m\u00f5ne jaoks v\u00e4hem. <\/li>\n<li>Kokku umbes 100 miljardit rida. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ja tuli arvutada muutuste korrelatsioon. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/b02051e6cadec8c51e7f6e351ef903f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin on kaks aktsiat ja nende hinnad. Kui \u00fcks t\u00f5useb ja teine t\u00f5useb, siis on see positiivne korrelatsioon, s.t. \u00fcks kasvab ja teine kasvab. Kui \u00fcks t\u00f5useb, nagu graafiku l\u00f5pus, ja teine langeb, siis on see negatiivne korrelatsioon, s.t. kui \u00fcks kasvab, langeb teine. <\/p>\n<p><\/p>\n<p>Anal\u00fc\u00fcsides neid vastastikuseid muutusi, saab teha ennustusi finantsturgudel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/31329cf7523eef6a167632d281a634ce.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga \u00fclesanne on keeruline. Mida selleks tehakse? Meil on 100 miljardit kirjet, kus on: aeg, aktsia ja hind. Peame esmalt arvutama 100 miljardit korda kost l\u00f5ikes olevat hinnavahetust. RunningDifference on funktsioon ClickHouse'is, mis arvutab j\u00e4rjestikku kahe rea vahelise erinevuse. <\/p>\n<p><\/p>\n<p>Ja p\u00e4rast seda tuleb arvutada korrelatsioon, ja korrelatsioon tuleb arvutada iga paari jaoks. 5000 aktsia jaoks on paare 12,5 miljonit. Ja see on palju, s.t. 12,5 korda tuleb arvutada selline korrelatsioonifunktsioon. <\/p>\n<p><\/p>\n<p>Ja kui keegi on unustanud, siis \u035ex ja \u035ey \u2013 need on valimi matemaatilised ootused. See t\u00e4hendab, et tuleb mitte ainult juured ja summad arvutada, vaid ka nende summade sees veel \u00fched summad. Tuleb teha tohutult arvutusi 12,5 miljonit korda ja lisaks tuleb need ka tundide kaupa grupeerida. Aega on meil samuti parajalt. Ja k\u00f5ik see tuleb 60 sekundi jooksul \u00e4ra teha. See on nali. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/567a07f586a824c91671820fe21ec305.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tuli kuidagi hakkama saada, sest k\u00f5ik see t\u00f6\u00f6tas v\u00e4ga- v\u00e4ga aeglaselt, enne kui ClickHouse tuli.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/3eca1af4c3f25ff4b23fce9b84e16659.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nad proovisid seda arvutada Hadoopis, Sparkis, Greenplumis. Ja k\u00f5ik see oli kas v\u00e4ga aeglane v\u00f5i kallis. See t\u00e4hendab, et mingil moel oli v\u00f5imalik arvutada, kuid see oli seej\u00e4rel kallis. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/37608c7e87ddb9a7d54854643044c369.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja siis tuli ClickHouse ja k\u00f5ik muutus palju paremaks. <\/p>\n<p><\/p>\n<p>Tuletan meelde, et meie probleem on andmete lokaalsus, seet\u00f5ttu ei saa korrelatsioone lokaliseerida. Me ei saa osa andmeid panna \u00fchele serverile, osa teisele ja arvutada, k\u00f5ik andmed peavad olema igal pool. <\/p>\n<p><\/p>\n<p>Mida nad tegid? Algselt on andmed lokaliseeritud. Igal serveril hoitakse andmeid kindla aktsiapuhul hindade kohta. Need ei \u00fchti. Seet\u00f5ttu saab logReturni arvutada paralleelselt ja iseseisvalt, k\u00f5ik toimub paralleelselt ja jaotatult. <\/p>\n<p><\/p>\n<p>Edasi otsustati andmeid v\u00e4hendada, samas mitte kaotades v\u00e4ljendusrikkust. V\u00e4hendada massiivide abil, st iga ajavahemiku jaoks teha aktsiate massiiv ja hindade massiiv. Nii v\u00f5tab see andmete hoidmiseks palju v\u00e4hem ruumi. Ja nendega on veidi mugavam t\u00f6\u00f6tada. Need on peaaegu paralleelsed toimingud, st arvutame paralleelselt osaliselt ja siis kirjutame serverisse. <\/p>\n<p><\/p>\n<p>P\u00e4rast seda saab need replitseerida. T\u00e4ht 'r' t\u00e4hendab, et need andmed oleme replitseerinud. See t\u00e4hendab, et k\u00f5ikidel kolmel serveril on samad andmed - need massiivid. <\/p>\n<p><\/p>\n<p>Ja edasi erilise skripti abil saab sellest 12,5 miljonist korrelatsioonist, mida tuleb arvutada, teha pakendid. See t\u00e4hendab 2 500 \u00fclesannet, milles iga\u00fches on 5 000 korrelatsiooni paari. Ja seda \u00fclesannet arvutada konkreetses ClickHouse serveris. K\u00f5ik andmed on tal olemas, kuna andmed on samad ja ta saab neid j\u00e4rjestikku arvutada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/587c6d587a48f2407dd2687f5423d44a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Veel, kuidas see v\u00e4lja n\u00e4eb. Esiteks on meil k\u00f5ik andmed sellises struktuuris: aeg, aktsiad, hind. Siis arvutasime logReturn, st andmed sama struktuuri, ainult et hinna asemel on meil n\u00fc\u00fcd logReturn. Siis tegime need \u00fcmber, st meil on aeg ja groupArray aktsiate ja hindade kaupa. Me replikeerisime. Ja p\u00e4rast seda genereerisime hulga \u00fclesandeid ja s\u00f6\u00f6tsime need ClickHouse' ile, et see neid arvutaks. Ja see t\u00f6\u00f6tab. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/434e7385aebcffcc03d1bd1a2020c8bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Proof of concept'i \u00fclesanne - see oli alam\u00fclesanne, st v\u00f5tsime v\u00e4hem andmeid. Ja k\u00f5ik vaid kolmel serveril.<\/p>\n<p><\/p>\n<p>Kaks esimest etappi: log_returni arvutamine ja massiividesse pakkimine v\u00f5ttis aega umbes tund. <\/p>\n<p><\/p>\n<p>Aga korrelatsiooni arvutamine v\u00f5ttis umbes 50 tundi. Kuid 50 tund on v\u00e4he, sest varem t\u00f6\u00f6tas see n\u00e4dalate kaupa. See oli suur edu. Ja kui arvutada, siis 70 korda sekundis arvutati kogu selle klastriga.<\/p>\n<p><\/p>\n<p>Aga k\u00f5ige t\u00e4htsam on see, et see s\u00fcsteem on praktiliselt ilma kitsaskohtadeta, st see skaleerub praktiliselt lineaarselt. Ja nad on seda kontrollinud. Eduka skaleerimise saavutasid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/5a595a84897e492b49dccfb0f058b1b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>\u00d5ige skeem on pool edu. Ja \u00f5ige skeem on k\u00f5igi vajalike ClickHouse'i tehnoloogiate kasutamine. <\/li>\n<li>Summing\/Aggregating MergeTrees - need on tehnoloogiad, mis v\u00f5imaldavad agregreerida v\u00f5i arvutada snapshot state'i erijuhuks. See lihtsustab palju asju. <\/li>\n<li>Materialiseeritud vaated v\u00f5imaldavad v\u00e4ltida \u00fche indeksi piirangut. V\u00f5ib-olla ei selgitanud ma seda v\u00e4ga selgelt, kuid kui laadisime logisid, siis toored logid olid tabelis, kus oli \u00fcks indeks, ja atribuutlogid olid teises tabelis, st samad andmed, ainult filtreeritud, aga indeks oli t\u00e4iesti erinev. N\u00e4ib, et need on samad andmed, kuid erinev j\u00e4rjestus. Ja materialiseeritud vaated v\u00f5imaldavad, kui see on vajalik, sellist ClickHouse'i piirangut v\u00e4ltida. <\/li>\n<li>V\u00e4hendage indeksi granulaarsust t\u00e4ppisteks p\u00e4ringuteks. <\/li>\n<li>Ja jaotage andmeid nutikalt, p\u00fc\u00fcdke maksimaalselt lokaliseerida andmeid serveri sees. Ja p\u00fc\u00fcdke, et p\u00e4ringud kasutaksid ka lokaliseerimist seal, kus see on v\u00f5imalik maksimaalselt. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/c0fc1737986e3f18ed1d3c53df9f0252.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kokkuv\u00f5ttes v\u00f5ib \u00f6elda, et ClickHouse on kindlalt haaranud nii kommertsebase andmebaaside kui ka avatud l\u00e4htekoodiga andmebaaside territooriumi, st just anal\u00fc\u00fcsi jaoks. See on suurep\u00e4raselt sobitunud sellele maastikule. Veelgi enam, see hakkab tasapisi teisi v\u00e4lja t\u00f5rjuma, sest kui teil on ClickHouse, siis ei vaja te InfiniDB-d. Veridika v\u00f5ib peagi olla ebavajalik, kui nad teevad normaalse SQL-i toe. Kasutage seda!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Podcasti transkriptsioon on t\u00f5lgitud Linuxi administraatori kursuse alguse eel\u00f5htuks\" src=\"\/wp-content\/uploads\/2020\/07\/6e9a65d32eb6de7f9f139a30e7ab0d25.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u2014<em>Ait\u00e4h ettekande eest! V\u00e4ga huvitav! Kas oli mingeid v\u00f5rdlusi Apache Phoenixiga?<\/em><\/p>\n<p><\/p>\n<p>-Ei, ma ei ole kuulnud, et keegi oleks v\u00f5rrelnud. Me ja Yandex p\u00fc\u00fcame j\u00e4lgida k\u00f5iki v\u00f5rdlusi ClickHouse'i ja erinevate andmebaaside vahel. Sest kui \u00e4kki selgub, et midagi on kiirem kui ClickHouse, siis Aleksei Milovidov ei saa \u00f6\u00f6siti magada ja hakkab seda kiiresti kiirendama. Ma ei ole sellisest v\u00f5rdlusest kuulnud. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>(Aleksei Milovidov) Apache Phoenix on SQL-mootor Hbase'i peal. Hbase on peamiselt m\u00f5eldud key-value t\u00fc\u00fcpi t\u00f6\u00f6stsenaariumiteks. Iga rida v\u00f5ib sisaldada suvalist arvu veerge suvaliste nimedega. Seda saab \u00f6elda selliste s\u00fcsteemide kohta nagu Hbase, Cassandra. Ja nende peal ei t\u00f6\u00f6ta t\u00f5sised anal\u00fc\u00fctilised p\u00e4ringud normaalselt. V\u00f5i v\u00f5ite arvata, et need t\u00f6\u00f6tavad normaalselt, kui teil pole ClickHouse'iga t\u00f6\u00f6kogemust.<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Ait\u00e4h<\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>Tere p\u00e4evast! Ma olen juba \u00fcsna palju selle teemaga huvitatud, kuna mul on anal\u00fc\u00fctiline alams\u00fcsteem. Kuid kui ma vaatan ClickHouse'i, siis mul on tunne, et ClickHouse sobib v\u00e4ga h\u00e4sti s\u00fcndmuste, muutuvate andmete anal\u00fc\u00fcsimiseks. Ja kui mul on vaja anal\u00fc\u00fcsida palju \u00e4rilisi andmeid koos suurte tabelitega, siis ClickHouse, nii palju kui ma aru saan, ei sobi mulle eriti? Eriti kui need muutuvad. Kas see on \u00f5ige v\u00f5i on olemas n\u00e4iteid, mis v\u00f5iksid seda \u00fcmber l\u00fckata?<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>See on \u00f5ige. Ja see kehtib enamiku spetsialiseeritud anal\u00fc\u00fctiliste andmebaaside kohta. Need on optimeeritud selleks, et seal oleks \u00fcks v\u00f5i mitu suurt tabelit, mis on muutuvad, ja palju v\u00e4ikseid, mis aeglaselt muutuvad. Teisis\u00f5nu, ClickHouse ei ole nagu Oracle, kuhu saab panna k\u00f5ike ja luua keerulisi p\u00e4ringuid. Et kasutada ClickHouse'i efektiivselt, tuleb skeem \u00fcles ehitada viisil, mis ClickHouse'is h\u00e4sti t\u00f6\u00f6tab. See t\u00e4hendab, et tuleks v\u00e4ltida liigset normaliseerimist, kasutada s\u00f5nastikke ja p\u00fc\u00fcda luua v\u00e4hem pikki seoseid. Ja kui skeem on \u00fcles ehitatud selliselt, siis sarnaseid \u00e4rilisi \u00fclesandeid ClickHouse'is saab lahendada palju efektiivsemalt kui traditsioonilises relatsioonilises andmebaasis. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Ait\u00e4h ettekande eest! Mul on k\u00fcsimus viimase finantsjuhtumi kohta. Neil oli anal\u00fc\u00fcs. Tuleb v\u00f5rrelda, kuidas asjad liiguvad \u00fcles-alla. Ja ma saan aru, et te ehitasite s\u00fcsteemi just selle anal\u00fc\u00fcsi jaoks? Kui neil homme, \u00fctleme, on vaja mingit muud aruannet nende andmete p\u00f5hjal, kas tuleb skeem uuesti \u00fcles ehitada ja andmed uuesti laadida? See t\u00e4hendab, et tuleb teha mingisugune eelprotsess, et saada p\u00e4ring?<\/em><\/p>\n<p><\/p>\n<p>Muidugi, see on ClickHouse'i kasutamine t\u00e4iesti konkreetse \u00fclesande lahendamiseks. Seda on traditsiooniliselt v\u00f5inud lahendada Hadoopi raames. Hadoopi jaoks on see ideaalne \u00fclesanne. Kuid Hadoopis on see v\u00e4ga aeglane. Ja minu eesm\u00e4rk on n\u00e4idata, et ClickHouse'is on v\u00f5imalik lahendada \u00fclesandeid, mis tavaliselt lahendatakse t\u00e4iesti teiste vahendite abil, kuid samas teha seda palju efektiivsemalt. See on konkreetselt \u00fchele \u00fclesandele kohandatud. Loomulikult, kui on sarnane \u00fclesanne, siis on v\u00f5imalik seda sarnasel viisil lahendada. <\/p>\n<p><\/p>\n<p><em>Selge. Te \u00fctlesite, et t\u00f6\u00f6deldi 50 tundi. Kas see algas algusest, kui andmed laaditi v\u00f5i kui tulemused saadi?<\/em><\/p>\n<p><\/p>\n<p>Jah-jah.<\/p>\n<p><\/p>\n<p><em>H\u00e4sti, suur ait\u00e4h.<\/em><\/p>\n<p><\/p>\n<p>See on 3-serveri klastris. <\/p>\n<p><\/p>\n<p><em>Tervitused! Ait\u00e4h ettekande eest! K\u00f5ik on v\u00e4ga huvitav. Ma k\u00fcsin natuke mitte funktsionaalsuse kohta, vaid ClickHouse'i kasutamise kohta usaldusv\u00e4\u00e4rsuse seisukohalt. Kas teil on olnud mingeid probleeme, kas on tulnud taastada? Kuidas ClickHouse sel juhul k\u00e4itub? Kas on olnud nii, et ka replikatsioon on kokku kukkunud? Me oleme n\u00e4iteks ClickHouse'is kokku puutunud probleemiga, et see siiski \u00fcletab oma piiri ja kukub v\u00e4lja.<\/em><\/p>\n<p><\/p>\n<p>Muidugi ei ole ideaalset s\u00fcsteemi. Ka ClickHouse'il on oma probleemid. Kuid kas olete kuulnud, et Yandex.Metrica ei t\u00f6\u00f6tanud pikka aega? T\u00f5en\u00e4oliselt mitte. See on t\u00f6\u00f6tanud usaldusv\u00e4\u00e4rselt alates 2012-2013. aastast ClickHouse'il. Minu kogemuse kohta v\u00f5in samuti \u00f6elda. Meil ei ole kunagi olnud t\u00e4ielikke rikkeid. M\u00f5ned osalised probleemid v\u00f5ivad juhtuda, kuid need pole kunagi olnud nii kriitilised, et t\u00f5siselt \u00e4ri m\u00f5jutada. Sedasorti olukordi ei ole kunagi olnud. ClickHouse on piisavalt usaldusv\u00e4\u00e4rne ega krahhi mingil ettearvamatul p\u00f5hjusel. Selle p\u00e4rast ei pea muretsema. See ei ole toores asi. Seda on t\u00f5estanud paljud ettev\u00f5tted. <\/p>\n<p><\/p>\n<p><em>Tere! Te \u00fctlesite, et andmeskeemi tuleks kohe h\u00e4sti l\u00e4bi m\u00f5elda. Ent kui see on juba juhtunud? Andmed voolavad ja voolavad. Aasta m\u00f6\u00f6dub, ja ma saan aru, et nii ei saa elada, pean andmed uuesti \u00fcles laadima ja millegagi tegelema.<\/em> <\/p>\n<p><\/p>\n<p>See s\u00f5ltub muidugi teie s\u00fcsteemist. On mitmeid viise, kuidas seda teha praktiliselt katkestusteta. N\u00e4iteks v\u00f5ite luua Materialized View, milles on teine andmestruktuur, kui seda saab \u00fchem\u00f5tteliselt kaardistada. St. kui see lubab kaardistamist ClickHouse'i vahenditega, s.t. tuletada m\u00f5ningaid asju, muuta primaarv\u00f5tit, muuta partitsioneerimist, siis saab teha Materialized View. Vanad andmed saab sinna kirjutada, uued kirjutatakse automaatselt. Ja siis lihtsalt l\u00fclituda Materialized View'i kasutamisele, seej\u00e4rel l\u00fclitada kirjutamine ja vana tabel h\u00e4vitada. See on t\u00e4iesti katkestusteta meetod. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h.<\/em><\/p>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Teooria ja praktika ClickHouse'i kasutamisest reaalsetes rakendustes. Aleksandr Zaitsev (2018) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/89878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=89878"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/89878\/revisions"}],"predecessor-version":[{"id":162171,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/89878\/revisions\/162171"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/89879"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=89878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=89878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=89878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}