{"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\/ro\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","title":{"rendered":"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b46b964324a3311157d5df737526b1d1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De\u0219i exist\u0103 acum multe date aproape peste tot, bazele de date analitice sunt \u00eenc\u0103 destul de exotice. Foarte pu\u021bini le cunosc bine \u0219i \u0219i mai pu\u021bini \u0219tiu cum s\u0103 le utilizeze eficient. Mul\u021bi continu\u0103 s\u0103 \"m\u0103n\u00e2nce cactu\u0219i\" cu MySQL sau PostgreSQL, care sunt proiectate pentru alte scenarii, s\u0103 se chinuie cu NoSQL sau s\u0103 pl\u0103teasc\u0103 prea mult pentru solu\u021bii comerciale. ClickHouse schimb\u0103 regulile jocului \u0219i reduce semnificativ pragul de intrare \u00een lumea sistemelor de gestionare a bazelor de date analitice.<\/p>\n<p><\/p>\n<p>Prezentarea de la BackEnd Conf 2018 \u0219i a fost publicat\u0103 cu acordul prezentatorului.<\/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=\"Reda\u021bi 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=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6c55b639d9703f460d99e0b0b1194507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCine sunt eu \u0219i de ce vorbesc despre ClickHouse? Sunt director de dezvoltare la LifeStreet, care utilizeaz\u0103 ClickHouse. \u00cen plus, sunt fondatorul Altinity. Acesta este un partener al Yandex care promoveaz\u0103 ClickHouse \u0219i ajut\u0103 Yandex s\u0103 fac\u0103 ClickHouse mai de succes. De asemenea, sunt dispus s\u0103 \u00eemp\u0103rt\u0103\u0219esc cuno\u0219tin\u021be despre ClickHouse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/36af6acba62271f7aa19dda2eb470870.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i nu sunt fratele lui Petya Zaytsev. M\u0103 \u00eentreab\u0103 adesea despre asta. Nu, nu suntem fra\u021bi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6ca605f97619a1373bb8a92f88d480d5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00abEste bine cunoscut\u00bb, c\u0103 ClickHouse:<\/p>\n<p><\/p>\n<ul>\n<li>Este foarte rapid,<\/li>\n<li>Este foarte convenabil, <\/li>\n<li>Este folosit \u00een Yandex. <\/li>\n<\/ul>\n<p><\/p>\n<p>Pu\u021bin mai pu\u021bin este cunoscut \u00een ce companii \u0219i cum este utilizat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c097b003bf8ea13b8a3bb765270e99c8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voi vorbi despre scopul, locul \u0219i modul \u00een care este folosit ClickHouse, \u00een afar\u0103 de Yandex. <\/p>\n<p><\/p>\n<p>Voi explica cum sunt rezolvate sarcini specifice cu ajutorul ClickHouse \u00een diferite companii, ce instrumente ClickHouse pute\u021bi utiliza pentru sarcinile voastre \u0219i cum au fost folosite \u00een diverse companii.<\/p>\n<p><\/p>\n<p>Am selectat trei exemple care arat\u0103 ClickHouse din perspective diferite. Cred c\u0103 va fi interesant.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d3cab92ceccd6c7d01ca1f28b028803f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prima \u00eentrebare: \u201eDe ce este nevoie de ClickHouse?\u201d. Pare o \u00eentrebare destul de evident\u0103, dar exist\u0103 mai multe r\u0103spunsuri. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1a4e14cc041a3c01ad0fd2a305aeeab0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Primul r\u0103spuns \u2013 din cauza performan\u021bei. ClickHouse este foarte rapid. Analiza pe ClickHouse este, de asemenea, foarte rapid\u0103. Adesea, poate fi folosit acolo unde altceva func\u021bioneaz\u0103 foarte lent sau foarte prost. <\/li>\n<li>Al doilea r\u0103spuns \u2013 este costul. \u0218i, \u00een primul r\u00e2nd, costul scal\u0103rii. De exemplu, Vertica \u2013 o baz\u0103 de date complet diferit\u0103. Func\u021bioneaz\u0103 foarte bine dac\u0103 ave\u021bi doar c\u00e2\u021biva terabai\u021bi de date. Dar c\u00e2nd vine vorba de sute de terabai\u021bi sau de petabai\u021bi, costul licen\u021bei \u0219i al suportului devine o sum\u0103 destul de considerabil\u0103. \u0218i este scump. Iar ClickHouse este gratuit. <\/li>\n<li>R\u0103spunsul trei este costul opera\u021bional. Este o abordare pu\u021bin diferit\u0103. RedShift este un analog excelent. Pe RedShift po\u021bi crea foarte repede o solu\u021bie. Aceasta va func\u021biona bine, dar \u00een fiecare or\u0103, \u00een fiecare zi \u0219i \u00een fiecare lun\u0103 vei pl\u0103ti destul de mult c\u0103tre Amazon, deoarece acesta este un serviciu considerabil scump. Google BigQuery, de asemenea. Dac\u0103 cineva l-a folosit, \u0219tie c\u0103 acolo po\u021bi lansa c\u00e2teva interog\u0103ri \u0219i s\u0103 prime\u0219ti o factur\u0103 care poate ajunge la sute de dolari dintr-o dat\u0103. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u00cen ClickHouse nu exist\u0103 aceste probleme. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3084a8bd9271f14726d73989946816c5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Unde se folose\u0219te acum ClickHouse? Pe l\u00e2ng\u0103 Yandex, ClickHouse este utilizat \u00een multe afaceri \u0219i companii diferite. <\/p>\n<p><\/p>\n<ul>\n<li>\u00cen primul r\u00e2nd, este vorba de analiza aplica\u021biilor web, adic\u0103 acesta este un caz de utilizare care provine de la Yandex.<\/li>\n<li>Multe companii AdTech folosesc ClickHouse. <\/li>\n<li>Companii numeroase care au nevoie s\u0103 analizeze jurnalele opera\u021bionale din diferite surse.<\/li>\n<li>C\u00e2teva companii folosesc ClickHouse pentru monitorizarea jurnalele de securitate. Le \u00eencarc\u0103 \u00een ClickHouse, genereaz\u0103 rapoarte, ob\u021bin rezultatele dorite.<\/li>\n<li>Companiile \u00eencep s\u0103 \u00eel foloseasc\u0103 \u00een analiza financiar\u0103, adic\u0103 treptat, marile afaceri se \u00eendreapt\u0103 \u0219i ele c\u0103tre ClickHouse. <\/li>\n<li>CloudFlare. Dac\u0103 cineva urm\u0103re\u0219te ClickHouse, cu siguran\u021b\u0103 a auzit de aceast\u0103 companie. Este unul dintre contributorii importan\u021bi din comunitate. \u0218i au o instalare ClickHouse foarte serioas\u0103. De exemplu, au creat Kafka Engine pentru ClickHouse. <\/li>\n<li>Companiile telecomunica\u021biilor au \u00eenceput s\u0103 foloseasc\u0103. C\u00e2teva companii folosesc ClickHouse fie ca dovad\u0103 de concept, fie deja \u00een produc\u021bie.<\/li>\n<li>O companie folose\u0219te ClickHouse pentru monitorizarea proceselor de produc\u021bie. Testeaz\u0103 cipuri, colecteaz\u0103 o mul\u021bime de parametri, \u00een jur de 2.000 de caracteristici. Apoi analizeaz\u0103 \u2013 un lot bun sau unul slab.<\/li>\n<li>Analiza blockchain. Exist\u0103 o companie rus\u0103 numit\u0103 Bloxy.info. Aceasta face analiza re\u021belei ethereum. De asemenea, au f\u0103cut \u0219i asta pe ClickHouse. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/8a0c1924a20ed2d15cd0f959e9b3e499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen plus, dimensiunea nu conteaz\u0103. Exist\u0103 multe companii care folosesc un singur server mic. \u0218i acesta le permite s\u0103 \u00ee\u0219i rezolve problemele. \u0218i chiar mai multe companii folosesc clustere mari formate din multe <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/ro\/server\/\"   title=\"servere\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1513\">servere<\/a> sau zeci de servere. <\/p>\n<p><\/p>\n<p>\u0218i dac\u0103 ne uit\u0103m la recorduri:<\/p>\n<p><\/p>\n<ul>\n<li>Yandex: 500+ servere, 25 de miliarde de \u00eenregistr\u0103ri pe zi le p\u0103streaz\u0103 acolo.<\/li>\n<li>LifeStreet: 60 de servere, aproximativ 75 de miliarde de \u00eenregistr\u0103ri pe zi. Mai pu\u021bine servere, dar mai multe \u00eenregistr\u0103ri dec\u00e2t la Yandex. <\/li>\n<li>CloudFlare: 36 servere, 200 de miliarde de \u00eenregistr\u0103ri pe zi pe care le p\u0103streaz\u0103. Au \u0219i mai pu\u021bine servere \u0219i \u0219i mai multe date pe care le p\u0103streaz\u0103. <\/li>\n<li>Bloomberg: 102 <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/ro\/server\/dts-los-angeles\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3643\">server<\/a>, aproximativ un trilion de \u00eenregistr\u0103ri pe zi. Record la \u00eenregistr\u0103ri.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/49194030b6586221cb17029889ce33da.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Geografic, acesta este de asemenea mult. Aceast\u0103 hart\u0103 arat\u0103 heatmap-ul unde ClickHouse este folosit \u00een lume. Aici se eviden\u021biaz\u0103 Rusia, China, America. \u021a\u0103rile europene sunt pu\u021bine. \u0218i se pot distinge 4 clustere.<\/p>\n<p><\/p>\n<p>Acesta este un analiz comparativ, nu trebuie s\u0103 c\u0103ut\u0103m cifre absolute. Aceasta este o analiz\u0103 a vizitatorilor care citesc materiale \u00een englez\u0103 pe site-ul Altinity, deoarece nu sunt vorbitori de rus\u0103. Iar Rusia, Ucraina, Belarus, adic\u0103 partea rusofon\u0103 a comunit\u0103\u021bii, sunt cei mai numerosi utilizatori. Apoi urmeaz\u0103 SUA \u0219i Canada. China \u00ee\u0219i accelereaz\u0103 foarte mult ritmul. Acum \u0219ase luni, China aproape c\u0103 nu era, iar acum China a dep\u0103\u0219it deja Europa \u0219i continu\u0103 s\u0103 creasc\u0103. B\u0103tr\u00e2na Europ\u0103 nu \u00eent\u00e2rzie, iar liderul utiliz\u0103rii ClickHouse \u2013 surprinz\u0103tor, este Fran\u021ba. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3a8305c51b1bd62f3467b795402df4ed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>De ce v\u0103 povestesc toate acestea? Pentru a ar\u0103ta c\u0103 ClickHouse devine solu\u021bia standard pentru analiza datelor mari \u0219i este deja folosit\u0103 pe foarte multe fronturi.<\/strong> Dac\u0103 \u00eel folosi\u021bi, sunte\u021bi pe drumul cel bun. Dac\u0103 nu l-a\u021bi folosit \u00eenc\u0103, nu trebuie s\u0103 v\u0103 teme\u021bi c\u0103 ve\u021bi r\u0103m\u00e2ne singuri \u0219i c\u0103 nimeni nu v\u0103 va ajuta, deoarece deja mul\u021bi se ocup\u0103 cu aceasta.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6aa635f3a35034d3af837c78b2c8fe60.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acestea sunt exemple reale de utilizare a ClickHouse \u00een c\u00e2teva companii. <\/p>\n<p><\/p>\n<ul>\n<li>Primul exemplu \u2013 este o re\u021bea de publicitate: migrarea de la Vertica la ClickHouse. \u0218tiu c\u00e2teva companii care au trecut de la Vertica sau sunt \u00een proces de migrare. <\/li>\n<li>Al doilea exemplu \u2013 un stocare tranzac\u021bional\u0103 pe ClickHouse. Acesta este un exemplu construit pe antipattern-uri. Tot ce nu trebuie f\u0103cut \u00een ClickHouse conform sfaturilor dezvoltatorilor este aici realizat. \u0218i, \u00een plus, este realizat at\u00e2t de eficient \u00eenc\u00e2t func\u021bioneaz\u0103. \u0218i func\u021bioneaz\u0103 mult mai bine dec\u00e2t o solu\u021bie tranzac\u021bional\u0103 tipic\u0103. <\/li>\n<li>Al treilea exemplu \u2013 este calculul distribuit pe ClickHouse. A fost o \u00eentrebare despre cum poate fi integrat ClickHouse \u00een ecosistemul Hadoop. Voi ar\u0103ta un exemplu despre cum o companie a realizat pe ClickHouse ceva asem\u0103n\u0103tor containerului map reduce, urm\u0103rind localizarea datelor etc., pentru a rezolva o problem\u0103 foarte complex\u0103. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (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 Este o companie de Ad Tech care are toate tehnologiile aferente re\u021belei de publicitate. <\/li>\n<li>Se ocup\u0103 cu optimizarea anun\u021burilor, programmatic bidding. <\/li>\n<li>Multe date: aproximativ 10 miliarde de evenimente pe zi. \u00cen plus, aceste evenimente pot fi \u00eemp\u0103r\u021bite \u00een mai multe subevenimente.<\/li>\n<li>Multe clien\u021bi au nevoie de aceste date, iar ace\u0219tia nu sunt doar oameni, ci \u0219i diverse algoritmi care se ocup\u0103 de programmatic bidding. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2da99b53eb25f675a2431027f86db934.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Compania a trecut printr-un drum lung \u0219i sinuos. Am vorbit despre el la HighLoad. La \u00eenceput, LifeStreet a migrat de la MySQL (cu o scurt\u0103 oprire pe Oracle) la Vertica. Pute\u021bi g\u0103si o poveste despre asta. <\/p>\n<p><\/p>\n<p>\u0218i totul mergea foarte bine, dar destul de repede a devenit clar c\u0103 datele cresc \u0219i Vertica este costisitor. Astfel, am c\u0103utat diverse alternative. Unele dintre ele sunt enumerate aici. De fapt, am realizat un proof of concept sau uneori test\u0103ri de performan\u021b\u0103 pentru aproape toate bazele de date disponibile pe pia\u021b\u0103 \u00een perioada 2013-2016 care se potriveau func\u021bionalit\u0103\u021bii. Despre o parte dintre ele am vorbit \u0219i la HighLoad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/4bebd2f43892cbef9249ddded1b8a70a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Obiectivul era \u2013 a migra de la Vertica, \u00een primul r\u00e2nd, deoarece datele cre\u0219teau. \u0218i au crescut exponen\u021bial timp de c\u00e2\u021biva ani. Apoi au ajuns pe o platform\u0103 stabil\u0103, dar cu toate acestea, prognoz\u00e2nd aceast\u0103 cre\u0219tere, cerin\u021bele de afaceri pentru volumul de date necesar pentru realizarea unei analize au ar\u0103tat c\u0103 \u00een cur\u00e2nd se va vorbi despre petaby\u021bi. Iar pentru petaby\u021bi pl\u0103\u021bile sunt deja foarte scumpe, a\u0219a c\u0103 am c\u0103utat o alternativ\u0103 unde s\u0103 ne \u00eendrept\u0103m. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f170a4307168e8560122966eab85c24e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Unde s\u0103 ne \u00eendrept\u0103m? O perioad\u0103 lung\u0103 de timp a fost complet neclar \u00een ce direc\u021bie s\u0103 ne \u00eendrept\u0103m, deoarece, pe de o parte, exist\u0103 baze de date comerciale, care par s\u0103 func\u021bioneze bine. Unele func\u021bioneaz\u0103 aproape la fel de bine ca Vertica, iar altele mai pu\u021bin bine. Dar toate sunt costisitoare, nu am reu\u0219it s\u0103 g\u0103sim nimic mai ieftin \u0219i mai bun. <\/p>\n<p><\/p>\n<p>Pe de alt\u0103 parte, exist\u0103 solu\u021bii open source, dar nu foarte multe, adic\u0103 pentru analize acestea pot fi num\u0103rate pe degete. \u0218i sunt gratuite sau ieftine, dar func\u021bioneaz\u0103 lent. \u0218i de multe ori le lipsesc func\u021bionalit\u0103\u021bile necesare \u0219i utile.<\/p>\n<p><\/p>\n<p>A\u0219adar, nu existau solu\u021bii care s\u0103 combine avantajele bazelor de date comerciale \u0219i tot ceea ce este gratuit \u00een open source. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/abbefbf0d9578b554f81579b87213a50.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nu existau solu\u021bii p\u00e2n\u0103 c\u00e2nd, \u00een mod surprinz\u0103tor, Yandex nu a scos ClickHouse, ca un magician scoate un iepure din p\u0103l\u0103rie. \u0218i aceasta a fost o solu\u021bie nea\u0219teptat\u0103, iar \u00eentrebarea r\u0103m\u00e2ne: \u201eDe ce?\u201d, dar, cu toate acestea. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c88981aace9d5925396ca5171241b7d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i imediat \u00een vara anului 2016 am \u00eenceput s\u0103 ne uit\u0103m ce este ClickHouse. \u0218i s-a dovedit c\u0103 uneori poate fi mai rapid dec\u00e2t Vertica. Am testat diferite scenarii pe diverse interog\u0103ri. \u0218i dac\u0103 interogarea folosea doar un singur tabel, adic\u0103 f\u0103r\u0103 tipuri de join, ClickHouse era de dou\u0103 ori mai rapid dec\u00e2t Vertica. <\/p>\n<p><\/p>\n<p>Nu am ezitat \u0219i am verificat \u0219i teste recente ale Yandex. Acolo este acela\u0219i lucru: ClickHouse este de dou\u0103 ori mai rapid dec\u00e2t Vertica, motiv pentru care vorbesc frecvent despre asta. <\/p>\n<p><\/p>\n<p>Dar dac\u0103 interog\u0103rile au join-uri, atunci situa\u021bia devine mai ambigu\u0103. \u0218i ClickHouse poate fi de dou\u0103 ori mai lent dec\u00e2t Vertica. Dar dac\u0103 ajustezi pu\u021bin interogarea \u0219i o rescrii, devin aproximativ egale. Nu e r\u0103u. \u0218i gratuit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/188bf56b72123175a18d2cb97d989a47.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dup\u0103 ce am ob\u021binut rezultatele testelor \u0219i le-am privit din diferite perspective, LifeStreet a trecut la ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1183b9b7681916686c52786fc95ccb45.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Este anul 2016, reamintesc. A fost ca \u00een gluma cu \u0219oarecii care pl\u00e2ngeau \u0219i se \u00een\u021bepau, dar continuau s\u0103 m\u0103n\u00e2nce cactusul. Despre asta s-a discutat \u00een detaliu, exist\u0103 un videoclip pe aceast\u0103 tem\u0103 \u0219i a\u0219a mai departe. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/993052ed83dc295c3777e614c7703456.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De aceea nu voi detalia mult despre asta, ci voi vorbi doar despre rezultate \u0219i c\u00e2teva lucruri interesante despre care nu am vorbit atunci. <\/p>\n<p><\/p>\n<p>Rezultatele sunt acestea:<\/p>\n<p><\/p>\n<ul>\n<li>Migrarea a fost un succes \u0219i sistemul func\u021bioneaz\u0103 deja \u00een produc\u021bie de mai bine de un an. <\/li>\n<li>Performan\u021ba \u0219i flexibilitatea au crescut. Din cele 10 miliarde de \u00eenregistr\u0103ri pe care le-am putut stoca pe zi, \u0219i acelea pentru scurt timp, acum LifeStreet stocheaz\u0103 75 de miliarde de \u00eenregistr\u0103ri pe zi \u0219i poate face asta timp de 3 luni sau mai mult. Dac\u0103 calcul\u0103m la v\u00e2rf, se salveaz\u0103 p\u00e2n\u0103 la un milion de evenimente pe secund\u0103. Peste un milion de interog\u0103ri SQL pe zi ajung \u00een acest sistem, \u00een principal de la diferite robo\u021bi. <\/li>\n<li>\u00cen ciuda faptului c\u0103 pentru ClickHouse au fost folosite mai multe servere dec\u00e2t pentru Vertica, economiile \u0219i la hardware s-au realizat, deoarece \u00een Vertica se utilizau discuri SAS destul de scumpe. \u00cen ClickHouse s-au folosit SATA. \u0218i de ce? Pentru c\u0103 \u00een Vertica inserarea este sincron\u0103. \u0218i sincronizarea necesit\u0103 ca discurile s\u0103 nu fie foarte lente, iar re\u021beaua s\u0103 nu fie foarte lent\u0103, adic\u0103 o opera\u021biune destul de costisitoare. \u00cen schimb, \u00een ClickHouse inserarea este asincron\u0103. Mai mult, po\u021bi scrie \u00eentotdeauna local, f\u0103r\u0103 costuri suplimentare, astfel c\u0103 datele \u00een ClickHouse pot fi inserate mult mai repede dec\u00e2t \u00een Vertica, chiar \u0219i pe discuri care nu sunt cele mai rapide. Iar la citire este aproape egal. Citirea pe SATA, dac\u0103 sunt \u00eentr-un RAID, este destul de rapid\u0103. <\/li>\n<li>F\u0103r\u0103 restric\u021bii de licen\u021b\u0103, adic\u0103 3 petabytes de date pe 60 de servere (20 de servere reprezint\u0103 o replic\u0103) \u0219i 6 trilioane de \u00eenregistr\u0103ri \u00een fapte \u0219i agregate. Nimic similar nu \u0219i-ar fi putut permite Vertica. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f461cdc12917ee655655dd7eb9c32bb2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acum voi trece la aspectele practice \u00een acest exemplu.<\/p>\n<p><\/p>\n<ul>\n<li>Primul - este schema eficient\u0103. De schema depinde foarte mult. <\/li>\n<li>Al doilea - este generarea de SQL eficient.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e7dc2a217e77c8794ff6e8a754e78c85.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O interogare OLAP tipic\u0103 este un select. O parte din coloane merge \u00een group by, o parte din coloane merge \u00een func\u021bii de agregare. Exist\u0103 un where, care poate fi v\u0103zut ca o fereastr\u0103 a cubului. \u00centregul group by poate fi v\u0103zut ca o proiec\u021bie. De aceea se nume\u0219te analiz\u0103 multidimensional\u0103 a datelor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a03a2d7fd28905ae83183346f0c673e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i adesea este modelat sub form\u0103 de schem\u0103 stea, c\u00e2nd exist\u0103 un fapt central \u0219i caracteristicile acestui fapt de-a lungul razelor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d9671af4b39cc83e1ae49e6fd75d0e02.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i din perspectiva designului fizic, a modului \u00een care se a\u0219az\u0103 pe tabel\u0103, de obicei se face o reprezentare normalizat\u0103. Pute\u021bi denormaliza, dar este costisitor \u00een ceea ce prive\u0219te discurile \u0219i nu foarte eficient pentru interog\u0103ri. De aceea, de obicei, se face o reprezentare normalizat\u0103, adic\u0103 o tabel\u0103 de fapte \u0219i multe tabele de dimensiuni. <\/p>\n<p><\/p>\n<p>Dar \u00een ClickHouse, aceasta func\u021bioneaz\u0103 prost. Exist\u0103 dou\u0103 motive: <\/p>\n<p><\/p>\n<ul>\n<li>Primul - este pentru c\u0103 \u00een ClickHouse join-urile (join) nu sunt foarte bune, adic\u0103 exist\u0103 join-uri (join), dar sunt slabe. Deocamdat\u0103 slabe. <\/li>\n<li>Al doilea - este c\u0103 tabelele nu sunt actualizate. De obicei, \u00een aceste tabele, care sunt \u00een jurul schemei de stea, trebuie s\u0103 schimbi ceva. De exemplu, numele clientului, numele companiei \u0219i altele. \u0218i asta nu func\u021bioneaz\u0103. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u0218i exist\u0103 o solu\u021bie \u00een ClickHouse. Chiar dou\u0103: <\/p>\n<p><\/p>\n<ul>\n<li>Primul - este utilizarea dic\u021bionarelor. Dic\u021bionarele externe sunt ceea ce ajut\u0103 la rezolvarea cu 99% a problemei cu schema de stea, cu actualiz\u0103rile \u0219i altele. <\/li>\n<li>Al doilea - este utilizarea masivelor. Masivele ajut\u0103, de asemenea, s\u0103 scapi de join-uri (join) \u0219i de problemele cu normalizarea. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/775972cc412651600799173407384492.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Nu este nevoie de join-uri (join). <\/li>\n<li>Actualizabile. Din martie 2018, a ap\u0103rut o func\u021bionalitate nedocumentat\u0103 (nu o ve\u021bi g\u0103si \u00een documenta\u021bie) de a actualiza par\u021bial dic\u021bionarele, adic\u0103 acele \u00eenregistr\u0103ri care s-au schimbat. Practic - este ca o tabel\u0103.<\/li>\n<li>\u00centotdeauna \u00een memorie, de aceea join-urile (join) cu dic\u021bionarul func\u021bioneaz\u0103 mai repede dec\u00e2t dac\u0103 ar fi fost o tabel\u0103 care st\u0103 pe disc \u0219i nici m\u0103car nu este sigur c\u0103 se afl\u0103 \u00een cache, cel mai probabil nu. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f73176a650b6d885011e3265c2af2fc3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>De asemenea, nu este nevoie de join-uri (join).<\/li>\n<li>Aceasta este o reprezentare compact\u0103 1 la mul\u021bi. <\/li>\n<li>\u0218i, \u00een opinia mea, masivele sunt realizate pentru geek-i. Acestea sunt func\u021bii lambda \u0219i altele. <\/li>\n<\/ul>\n<p><\/p>\n<p>Aceasta nu este o simpl\u0103 afirma\u021bie. Este o func\u021bionalitate extrem de puternic\u0103, care permite realizarea multor lucruri foarte simplu \u0219i elegant. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5d813952ca8f3da7a74c6f2a15d80a9b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Exemple tipice care ajut\u0103 la gestionarea array-urilor. Aceste exemple sunt simple \u0219i suficient de illustrative:<\/p>\n<p><\/p>\n<ul>\n<li>C\u0103utare dup\u0103 etichete. Dac\u0103 ave\u021bi hashtag-uri \u0219i dori\u021bi s\u0103 g\u0103si\u021bi anumite \u00eenregistr\u0103ri dup\u0103 hashtag. <\/li>\n<li>C\u0103utare dup\u0103 perechi key-value. Exist\u0103, de asemenea, anumite atribute cu valori. <\/li>\n<li>Stocarea listelor de chei pe care trebuie s\u0103 le traduce\u021bi \u00een altceva.<\/li>\n<\/ul>\n<p><\/p>\n<p>Toate aceste sarcini pot fi rezolvate f\u0103r\u0103 array-uri. Etichetele pot fi puse \u00eentr-un \u0219ir \u0219i selectate cu ajutorul expresiilor regulate sau \u00eentr-un tabel separat, dar atunci va trebui s\u0103 face\u021bi join-uri.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/dbbf90eee098c4564206532f24156823.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen ClickHouse nu trebuie s\u0103 face\u021bi nimic, este suficient s\u0103 descrie\u021bi un array de string-uri pentru hashtag-uri sau s\u0103 realiza\u021bi o structur\u0103 \u00eenf\u0103\u0219urat\u0103 pentru sisteme de tip key-value.<\/p>\n<p><\/p>\n<p>Structura \u00eenf\u0103\u0219urat\u0103 \u2013 poate nu este cel mai fericit nume. Acesta este compus din dou\u0103 array-uri care au o parte comun\u0103 \u00een nume \u0219i c\u00e2teva caracteristici asociate. <\/p>\n<p><\/p>\n<p>\u0218i c\u0103utarea dup\u0103 etichete este foarte simpl\u0103. Exist\u0103 o func\u021bie <code>has<\/code>, care verific\u0103 dac\u0103 un element exist\u0103 \u00een array. Asta este, am g\u0103sit toate \u00eenregistr\u0103rile care apar\u021bin conferin\u021bei noastre.<\/p>\n<p><\/p>\n<p>C\u0103utarea dup\u0103 subid este pu\u021bin mai complicat\u0103. Trebuie mai \u00eent\u00e2i s\u0103 g\u0103sim indexul cheii, iar apoi s\u0103 lu\u0103m elementul cu acel index \u0219i s\u0103 verific\u0103m dac\u0103 valoarea este cea pe care o c\u0103ut\u0103m. Dar, cu toate acestea, este foarte simplu \u0219i compact.<\/p>\n<p><\/p>\n<p>Expresia regulat\u0103 pe care a\u021bi dori s\u0103 o scrie\u021bi, dac\u0103 a\u021bi stoca totul \u00eentr-un singur \u0219ir, ar fi, pe de o parte, ciudat\u0103. Iar, pe de alt\u0103 parte, ar func\u021biona mult mai lent dec\u00e2t cele dou\u0103 array-uri. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/17664c3121b2b0d33188adbfaa653d4e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un alt exemplu. Ave\u021bi un array \u00een care stoca\u021bi ID-urile. \u0218i le pute\u021bi traduce \u00een nume. Func\u021bia <code>arrayMap<\/code>. Aceasta este o func\u021bie lambda tipic\u0103. Transmite\u021bi expresii lambda. \u0218i ea extrage valoarea numelui pentru fiecare ID din dic\u021bionar.<\/p>\n<p><\/p>\n<p>\u00cen mod similar, se poate face \u0219i c\u0103utarea. Se transmite o func\u021bie predicat care verific\u0103 cu ce se potrivesc elementele. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/146917b71a35d38a550cd9accf6ab2f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aceste lucruri simplific\u0103 mult schema \u0219i rezolv\u0103 o mul\u021bime de probleme. <\/p>\n<p><\/p>\n<p>Dar urm\u0103toarea problem\u0103 cu care ne-am confruntat \u0219i despre care a\u0219 dori s\u0103 men\u021bionez, este cererile eficiente. <\/p>\n<p><\/p>\n<ul>\n<li>\u00cen ClickHouse nu exist\u0103 un planificator de cereri. Deloc. <\/li>\n<li>Dar, cu toate acestea, cererile complexe trebuie s\u0103 fie planificate. \u00cen ce cazuri? <\/li>\n<li>Dac\u0103 exist\u0103 mai multe joinuri \u00een interogare, pe care le \u00eenf\u0103\u0219ura\u021bi \u00een subinterog\u0103ri. \u0218i ordinea \u00een care sunt executate este important\u0103. <\/li>\n<li>\u0218i al doilea \u2013 dac\u0103 interogarea este distribuit\u0103. Pentru c\u0103 \u00een interog\u0103rile distribuite, doar cea mai interioar\u0103 subinterogare se execut\u0103 distribuit, iar restul este trimis pe un singur server, la care v-a\u021bi conectat \u0219i se execut\u0103 acolo. A\u0219adar, dac\u0103 ave\u021bi interog\u0103ri distribuite cu multe joinuri, trebuie s\u0103 selecta\u021bi ordinea. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u0218i chiar \u0219i \u00een cazuri mai simple, uneori este necesar s\u0103 face\u021bi treaba planificatorului \u0219i s\u0103 rescrie\u021bi pu\u021bin interog\u0103rile. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/217d422b429e8b4bc13abbf0efdf6be1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iat\u0103 un exemplu. Pe partea st\u00e2ng\u0103, o interogare care arat\u0103 primele 5 \u021b\u0103ri. \u0218i aceasta se execut\u0103 \u00een 2,5 secunde, cred. Iar pe partea dreapt\u0103, aceea\u0219i interogare, dar pu\u021bin rescris\u0103. \u00cen loc s\u0103 grup\u0103m dup\u0103 \u0219iruri, am \u00eenceput s\u0103 grup\u0103m dup\u0103 cheie (int). \u0218i asta este mai rapid. Apoi, am conectat un dic\u021bionar la rezultat. \u00cen loc de 2,5 secunde, interogarea se execut\u0103 \u00een 1,5 secunde. Asta e bine. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f19fb7d7f0397a3b38b2a3bd179c156b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un exemplu similar cu rescrierea filtrelor. Aici este o interogare pentru Rusia. Aceasta se execut\u0103 \u00een 5 secunde. Dac\u0103 o rescriem astfel \u00eenc\u00e2t s\u0103 compar\u0103m din nou nu \u0219iruri, ci numere cu un set de chei care se refer\u0103 la Rusia, atunci va fi mult mai rapid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0c1dd1f317133d1d106ffef85f337079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Exist\u0103 multe astfel de trucuri. \u0218i acestea permit o accelerare semnificativ\u0103 a interog\u0103rilor, care vi se par c\u0103 deja func\u021bioneaz\u0103 rapid sau, dimpotriv\u0103, func\u021bioneaz\u0103 lent. Le pute\u021bi face \u0219i mai rapide.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/25b132790b03f239e38237af5e92ab63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Maximum de munc\u0103 \u00een modul distribuit. <\/li>\n<li>Sortarea dup\u0103 tipuri minime, a\u0219a cum am f\u0103cut eu cu int. <\/li>\n<li>Dac\u0103 exist\u0103 unele joinuri, dic\u021bionare, este mai bine s\u0103 le face\u021bi \u00een ultima etap\u0103, c\u00e2nd ave\u021bi deja datele cel pu\u021bin par\u021bial grupate, atunci opera\u021bia de join sau apelul dic\u021bionarului va fi apelat de mai pu\u021bine ori \u0219i va fi mai rapid. <\/li>\n<li>\u00cenlocuirea filtrelor. <\/li>\n<\/ul>\n<p><\/p>\n<p>Exist\u0103 \u0219i alte tehnici, nu doar cele pe care le-am demonstrat. \u0218i toate acestea permit uneori accelerarea semnificativ\u0103 a execu\u021biei interog\u0103rilor.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/175832796bee525909d8875bd723a881.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Trecem la urm\u0103torul exemplu. Compania X din SUA. Ce face aceasta? <\/p>\n<p><\/p>\n<p>A fost o sarcin\u0103: <\/p>\n<p><\/p>\n<ul>\n<li>Legarea offline a tranzac\u021biilor publicitare. <\/li>\n<li>Modelarea diferitelor modele de legare. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0136b71a1205512d86f13e86761146f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen ce const\u0103 scenariul?<\/p>\n<p><\/p>\n<p>Un vizitator obi\u0219nuit acceseaz\u0103 site-ul, de exemplu, de 20 de ori pe lun\u0103 din diferite reclame sau vine pur \u0219i simplu uneori f\u0103r\u0103 nicio reclam\u0103, pentru c\u0103 \u00ee\u0219i amine c\u0103 a fost pe acest site. Se uit\u0103 la diverse produse, le adaug\u0103 \u00een co\u0219, le scoate din co\u0219. \u0218i, \u00een cele din urm\u0103, cump\u0103r\u0103 ceva. <\/p>\n<p><\/p>\n<p>\u00centreb\u0103ri rezonabile: \u201eCui trebuie s\u0103 pl\u0103tim pentru publicitate, dac\u0103 este necesar?\u201d \u0219i \u201eCe reclam\u0103 a influen\u021bat-o, dac\u0103 a influen\u021bat-o?\u201d. Adic\u0103, de ce a cump\u0103rat \u0219i cum s\u0103 facem ca oamenii asem\u0103n\u0103tori cu acesta s\u0103 cumpere de asemenea?<\/p>\n<p><\/p>\n<p>Pentru a rezolva aceast\u0103 sarcin\u0103, este necesar s\u0103 corel\u0103m evenimentele care au loc pe site-ul web \u00eentr-un mod corect, adic\u0103 s\u0103 construim o leg\u0103tur\u0103 \u00eentre ele. Apoi, s\u0103 le trimitem pentru analiz\u0103 \u00een DWH. Pe baza acestei analize, s\u0103 construim modele pentru a ar\u0103ta cui \u0219i ce reclam\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e53ec81ce89150697d0eca4d72886638.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O tranzac\u021bie publicitar\u0103 este un set de evenimente corelate ale utilizatorului, care \u00eencep de la afi\u0219area reclamei, apoi se \u00eent\u00e2mpl\u0103 ceva, poate o cump\u0103rare, \u0219i apoi pot exista achizi\u021bii \u00een cadrul achizi\u021biei. De exemplu, dac\u0103 este o aplica\u021bie mobil\u0103 sau un joc mobil, de obicei instalarea aplica\u021biei este gratuit\u0103, iar dac\u0103 se face ceva ulterior, este posibil s\u0103 fie necesari bani. \u0218i cu c\u00e2t o persoan\u0103 cheltuie mai mult \u00een aplica\u021bie, cu at\u00e2t este mai valoroas\u0103. Dar pentru asta trebuie s\u0103 le corel\u0103m pe toate. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a2213613f1ef660409124ef8bcdd4fe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Exist\u0103 multe modele de corelare. <\/p>\n<p><\/p>\n<p>Cele mai populare sunt:<\/p>\n<p><\/p>\n<ul>\n<li>Ultima interac\u021biune, unde interac\u021biunea este fie un clic, fie o afi\u0219are.<\/li>\n<li>Prima interac\u021biune, adic\u0103 prima care a adus persoana pe site.<\/li>\n<li>Combinatie liniar\u0103 \u2013 toate sunt tratate la fel. <\/li>\n<li>Dezintegrare.<\/li>\n<li>\u0218i altele. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/9523307d557e094d981da5b525ed0b59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i cum a func\u021bionat totul ini\u021bial? A existat Runtime \u0219i Cassandra. Cassandra a fost utilizat\u0103 ca stocare de tranzac\u021bii, adic\u0103 \u00een ea erau stocate toate tranzac\u021biile corelate. \u0218i c\u00e2nd ap\u0103rea un eveniment \u00een Runtime, de exemplu, vizualizarea unei pagini sau altceva, se f\u0103cea o cerere \u00een Cassandra \u2013 exist\u0103 aceast\u0103 persoan\u0103 sau nu. Apoi erau preluate tranzac\u021biile care \u00eei corespundeau. \u0218i se realiza corelarea.<\/p>\n<p><\/p>\n<p>\u0218i dac\u0103 a fost norocul ca \u00een cerere s\u0103 fie un id de tranzac\u021bie, atunci este u\u0219or. Dar de obicei, nu este noroc. De aceea trebuia s\u0103 g\u0103sim ultima tranzac\u021bie sau tranzac\u021bia cu ultimul clic \u0219i a\u0219a mai departe. <\/p>\n<p><\/p>\n<p>\u0218i totul a func\u021bionat foarte bine, p\u00e2n\u0103 c\u00e2nd asocierea a fost legat\u0103 de ultimul clic. Pentru c\u0103 sunt, s\u0103 spunem, 10 milioane de clicuri pe zi, 300 de milioane pe lun\u0103, dac\u0103 stabilim o fereastr\u0103 de o lun\u0103. \u0218i deoarece \u00een Cassandra totul trebuie s\u0103 fie \u00een memorie pentru a func\u021biona rapid, deoarece runtime-ul trebuie s\u0103 r\u0103spund\u0103 rapid, erau necesari aproximativ 10-15 servere. <\/p>\n<p><\/p>\n<p>Dar c\u00e2nd am dorit s\u0103 leg\u0103m tranzac\u021bia de afi\u0219are, s-a dovedit imediat c\u0103 nu este at\u00e2t de simplu. De ce? Se vede c\u0103 trebuie s\u0103 stoc\u0103m cu 30 de ori mai multe evenimente. \u0218i, \u00een consecin\u021b\u0103, avem nevoie de 30 de ori mai multe servere. \u0218i rezultatul este c\u0103 aceasta este o cifr\u0103 astronomic\u0103. S\u0103 men\u021bii p\u00e2n\u0103 la 500 de servere pentru a face leg\u0103tura, av\u00e2nd \u00een vedere c\u0103 \u00een runtime sunt considerabil mai pu\u021bine servere, aceasta este o cifr\u0103 gre\u0219it\u0103. \u0218i am \u00eenceput s\u0103 ne g\u00e2ndim ce s\u0103 facem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/7af35f1ade680232cc83a6887891bc5c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i am ajuns la ClickHouse. Dar cum s\u0103 facem asta pe ClickHouse? La prima vedere, pare un set de antipattern-uri. <\/p>\n<p><\/p>\n<ul>\n<li>Tranzac\u021bia cre\u0219te, ne ata\u0219\u0103m tot mai multe evenimente noi la ea, adic\u0103 este mutabil\u0103, iar ClickHouse nu func\u021bioneaz\u0103 foarte bine cu obiectele mutabile. <\/li>\n<li>C\u00e2nd un vizitator vine la noi, trebuie s\u0103 extragem tranzac\u021biile lui dup\u0103 cheie, dup\u0103 visit id. Aceasta este, de asemenea, o interogare punctual\u0103, dar \u00een ClickHouse nu se fac astfel de lucruri. De obicei, \u00een ClickHouse se face scan\u0103ri mari, dar aici trebuie s\u0103 ob\u021binem c\u00e2teva \u00eenregistr\u0103ri. Este iar\u0103\u0219i un antipattern. <\/li>\n<li>\u00cen plus, tranzac\u021bia era \u00een json, dar nu voiam s\u0103 o rescriem, a\u0219a c\u0103 am dorit s\u0103 p\u0103str\u0103m json-ul neestructurat, iar dac\u0103 era necesar, s\u0103 extragem ceva din el. \u0218i aceasta este tot un antipattern. <\/li>\n<\/ul>\n<p><\/p>\n<p>Adic\u0103, un set de antipattern-uri. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2473129a5880ee3172b8ab7bf4afc376.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dar, cu toate acestea, am reu\u0219it s\u0103 realiz\u0103m un sistem care a func\u021bionat foarte bine. <\/p>\n<p><\/p>\n<p>Ce a fost f\u0103cut? A fost implementat ClickHouse, \u00een care erau \u00eenc\u0103rcate jurnalele, \u00eemp\u0103r\u021bite \u00een \u00eenregistr\u0103ri. A fost creat un serviciu de atribuire, care primea jurnalele din ClickHouse. Dup\u0103 aceea, pentru fiecare \u00eenregistrare dup\u0103 visit id ob\u021binea tranzac\u021biile, care puteau fi \u00eenc\u0103 neprelucrate, \u0219i plus instantanee, adic\u0103 tranzac\u021biile deja legate, \u0219i anume rezultatul muncii anterioare. Din acestea deja f\u0103cea logica, alegea tranzac\u021bia corect\u0103, conecta noi evenimente. \u00cenregistrarea a fost din nou scris\u0103 \u00een jurnal. Jurnalul se \u00eentorcea \u00een ClickHouse, adic\u0103 era un sistem ciclic constant. \u0218i, \u00een plus, se trimitea \u00een DWH pentru a fi analizat acolo. <\/p>\n<p><\/p>\n<p>\u00cen aceast\u0103 form\u0103, nu a func\u021bionat foarte bine. \u0218i pentru a simplifica ClickHouse, atunci c\u00e2nd s-a f\u0103cut o interogare dup\u0103 visit id, aceste interog\u0103ri au fost grupate \u00een blocuri de 1.000-2.000 de visit id-uri pentru a extrage toate tranzac\u021biile pentru 1.000-2.000 de persoane. Astfel, a func\u021bionat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d920ce231e6e4b5fd5b27ab28f848aed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dac\u0103 privim \u00een interiorul ClickHouse, exist\u0103 doar 3 tabele principale care se ocup\u0103 de toate acestea. <\/p>\n<p><\/p>\n<p>Primul tabel, \u00een care sunt \u00eenc\u0103rcate logurile, este practic \u00eenc\u0103rcat f\u0103r\u0103 prelucrare.<\/p>\n<p><\/p>\n<p>Al doilea tabel. Prin intermediul unei vizualiz\u0103ri materializate, din aceste loguri au fost extrase evenimentele care nu au fost atribuite, adic\u0103 cele necorelate. \u0218i printr-o vizualizare materializat\u0103 s-au extras tranzac\u021biile pentru construirea unei snapshot. Adic\u0103, o vizualizare materializat\u0103 special\u0103 a construit snapshot-ul, \u0219i anume ultima stare acumulat\u0103 a tranzac\u021biei. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/12b0adb691f483923a6c35bb6e4a5017.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aici este scris un text \u00een SQL. A\u0219 dori s\u0103 comentez c\u00e2teva aspecte importante \u00een el. <\/p>\n<p><\/p>\n<p>Primul aspect important este posibilitatea \u00een ClickHouse de a extrage coloane, c\u00e2mpuri din json. Adic\u0103, ClickHouse are anumite metode pentru a lucra cu json. Acestea sunt foarte, foarte primitive. <\/p>\n<p><\/p>\n<p>visitParamExtractInt permite extragerea atributelor din json, adic\u0103 prima apari\u021bie se activeaz\u0103. Astfel, se poate extrage id-ul tranzac\u021biei sau id-ul vizitei. Acesta este un aspect. <\/p>\n<p><\/p>\n<p>Al doilea \u2013 aici a fost utilizat un c\u00e2mp materializat ingenios. Ce \u00eenseamn\u0103 aceasta? \u00censeamn\u0103 c\u0103 nu \u00eel po\u021bi insera \u00een tabel, adic\u0103 nu se insereaz\u0103, ci se calculeaz\u0103 \u0219i se stocheaz\u0103 la inserare. La inserare, ClickHouse face munca pentru tine. \u0218i astfel se extrage din json ceea ce vei avea nevoie ulterior.<\/p>\n<p><\/p>\n<p>\u00cen acest caz, vizualizarea materializat\u0103 este pentru r\u00e2ndurile neprelucrate. \u0218i folose\u0219te primul tabel cu loguri practic brute. \u0218i ce face? \u00cen primul r\u00e2nd, schimb\u0103 ordinea, adic\u0103 acum ordonarea se face dup\u0103 visit id, pentru c\u0103 avem nevoie s\u0103 extragem rapid tranzac\u021bia specific\u0103 unei anumite persoane. <\/p>\n<p><\/p>\n<p>Al doilea aspect important este index_granularity. Dac\u0103 a\u021bi v\u0103zut MergeTree, de obicei, index_granularity este setat la 8.192. Ce este aceasta? Este parametrul de sparsitate a indexului. \u00cen ClickHouse, indexul este rar, el nu indexeaz\u0103 niciodat\u0103 fiecare \u00eenregistrare. Face acest lucru la fiecare 8.192. \u0218i este bine c\u00e2nd trebuie s\u0103 contabilizezi multe date, dar este r\u0103u c\u00e2nd este pu\u021bin, din cauza overhead-ului mare. \u0218i dac\u0103 reduci index granularity, reduci overhead-ul. Nu se poate reduce la unu, pentru c\u0103 ar putea s\u0103 nu fie suficient\u0103 memorie. Indexul este \u00eentotdeauna stocat \u00een memorie. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5fe303061977cad64e6c0333b125d595.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Snapshotul utilizeaz\u0103 \u0219i alte func\u021bii interesante ale ClickHouse.<\/p>\n<p><\/p>\n<p>\u00cen primul r\u00e2nd, exist\u0103 AggregatingMergeTree. \u00cen AggregatingMergeTree se stocheaz\u0103 argMax, adic\u0103 este starea tranzac\u021biei corespunz\u0103toare celei mai recente date. Tranzac\u021biile sunt generate constant pentru acest vizitator. \u0218i \u00een cea mai recent\u0103 stare a acelei tranzac\u021bii am ad\u0103ugat un eveniment \u0219i am ob\u021binut o nou\u0103 stare. A revenit din nou \u00een ClickHouse. \u0218i prin argMax, \u00een aceast\u0103 vedere materializat\u0103, putem ob\u021bine \u00eentotdeauna starea actual\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d1b87301ab5206a36bf035679f79d35a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Legarea este \"decuplat\u0103\" de Runtime. <\/li>\n<li>Se stocheaz\u0103 \u0219i se proceseaz\u0103 p\u00e2n\u0103 la 3 miliarde de tranzac\u021bii pe lun\u0103. Aceasta este cu mult mai mult dec\u00e2t era \u00een Cassandra, adic\u0103 \u00eentr-un sistem tranzac\u021bional tipic. <\/li>\n<li>Cluster de 2x5 servere ClickHouse. 5 servere, fiecare av\u00e2nd o replic\u0103. Acesta este chiar mai pu\u021bin dec\u00e2t era \u00een Cassandra, pentru a realiza atribuire bazat\u0103 pe click, iar aici avem atribuire bazat\u0103 pe impresii. Adic\u0103, \u00een loc s\u0103 cre\u0219tem num\u0103rul de servere de 30 de ori, am reu\u0219it s\u0103 le reducem. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/583779fe9e133df519411e2256401eb3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i ultimul exemplu este compania financiar\u0103 Y, care a analizat corela\u021biile modific\u0103rilor cotelor de ac\u021biuni. <\/p>\n<p><\/p>\n<p>\u0218i sarcina era urm\u0103toarea:<\/p>\n<p><\/p>\n<ul>\n<li>Exist\u0103 aproximativ 5.000 de ac\u021biuni. <\/li>\n<li>Cot\u021biile sunt cunoscute la fiecare 100 de milisecunde. <\/li>\n<li>Datele s-au acumulat \u00een 10 ani. Evident, pentru unele companii mai mult, pentru altele mai pu\u021bin. <\/li>\n<li>\u00cen total, aproximativ 100 de miliarde de r\u00e2nduri. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u0218i trebuia s\u0103 se calculeze corela\u021bia modific\u0103rilor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b02051e6cadec8c51e7f6e351ef903f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aici sunt dou\u0103 ac\u021biuni \u0219i cotele lor. Dac\u0103 una cre\u0219te, \u0219i cealalt\u0103 cre\u0219te, atunci este o corela\u021bie pozitiv\u0103, adic\u0103 una cre\u0219te, iar cealalt\u0103 cre\u0219te. Dac\u0103 una cre\u0219te, a\u0219a cum se vede la finalul graficului, iar cealalt\u0103 scade, atunci este o corela\u021bie negativ\u0103, adic\u0103 atunci c\u00e2nd una cre\u0219te, cealalt\u0103 scade. <\/p>\n<p><\/p>\n<p>Analiz\u00e2nd aceste varia\u021bii reciproce, se pot face predic\u021bii pe pia\u021ba financiar\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/31329cf7523eef6a167632d281a634ce.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dar sarcina este complicat\u0103. Ce se face pentru asta? Avem 100 de miliarde de \u00eenregistr\u0103ri, \u00een care sunt: timp, ac\u021biune \u0219i pre\u021b. Trebuie s\u0103 calcul\u0103m mai \u00eent\u00e2i 100 de miliarde de ori diferen\u021ba de rulare a algoritmului pre\u021bului. Diferen\u021ba de rulare este o func\u021bie \u00een ClickHouse care calculeaz\u0103 diferen\u021ba dintre dou\u0103 r\u00e2nduri \u00een mod secven\u021bial. <\/p>\n<p><\/p>\n<p>\u0218i dup\u0103 aceasta trebuie s\u0103 calcul\u0103m corela\u021bia, iar corela\u021bia trebuie calculat\u0103 pentru fiecare pereche. Pentru 5.000 de ac\u021biuni, exist\u0103 12,5 milioane de perechi. \u0218i aceasta este mult, adic\u0103 de 12,5 ori trebuie s\u0103 calcul\u0103m o astfel de func\u021bie de corela\u021bie. <\/p>\n<p><\/p>\n<p>\u0218i dac\u0103 cineva a uitat, atunci x \u0219i y sunt a\u0219tept\u0103rile matematice pe baza e\u0219antionului. Adic\u0103 nu este suficient s\u0103 calcul\u0103m doar r\u0103d\u0103cinile \u0219i sumele, ci trebuie s\u0103 calcul\u0103m \u0219i alte sume \u00een interiorul acestor sume. Trebuie s\u0103 efectuezi o mul\u021bime de calcule de 12,5 milioane de ori, iar apoi trebuie s\u0103 le grup\u0103m pe ore. \u0218i avem \u0219i multe ore. Trebuie s\u0103 ne \u00eencadr\u0103m \u00een 60 de secunde. Este o glum\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/567a07f586a824c91671820fe21ec305.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Trebuia s\u0103 ne descurc\u0103m cumva, pentru c\u0103 totul func\u021biona foarte, foarte lent, \u00eenainte de a veni ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3eca1af4c3f25ff4b23fce9b84e16659.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Au \u00eencercat s\u0103 calculeze asta pe Hadoop, pe Spark, pe Greenplum. \u0218i totul era foarte lent sau costisitor. Adic\u0103, se putea calcula cumva, dar era scump. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/37608c7e87ddb9a7d54854643044c369.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Apoi a venit ClickHouse \u0219i totul a devenit mult mai bine. <\/p>\n<p><\/p>\n<p>Aduc aminte, problema noastr\u0103 este legat\u0103 de localizarea datelor, pentru c\u0103 nu putem localiza corela\u021biile. Nu putem aduna o parte din date pe un server, o parte pe altul \u0219i s\u0103 calcul\u0103m; trebuie s\u0103 avem toate datele pretutindeni. <\/p>\n<p><\/p>\n<p>Ce au f\u0103cut? Ini\u021bial, datele sunt localizate. Pe fiecare dintre servere sunt stocate date despre pre\u021burile unui anumit set de ac\u021biuni. \u0218i ele nu se suprapun. De aceea, putem calcula logReturn \u00een paralel \u0219i independent, totul se desf\u0103\u0219oar\u0103 simultan \u0219i distribuit. <\/p>\n<p><\/p>\n<p>Apoi au decis s\u0103 diminueze aceste date, f\u0103r\u0103 a pierde expresivitatea. S\u0103 le diminueze folosind array-uri, adic\u0103 pentru fiecare interval de timp s\u0103 fac\u0103 un array de ac\u021biuni \u0219i un array de pre\u021buri. Astfel, datele ocup\u0103 mult mai pu\u021bin spa\u021biu. \u0218i este mai convenabil s\u0103 lucr\u0103m cu ele. Acestea sunt opera\u021biuni aproape paralele, adic\u0103 calcul\u0103m par\u021bial \u00een paralel \u0219i apoi scriem pe server. <\/p>\n<p><\/p>\n<p>Dup\u0103 aceasta, acestea pot fi replicat. Litera \u201er\u201d \u00eenseamn\u0103 c\u0103 aceste date au fost replicate. Adic\u0103, avem acelea\u0219i date pe toate cele trei servere \u2013 anume aceste array-uri. <\/p>\n<p><\/p>\n<p>Apoi, cu un script special din acest set de 12,5 milioane de corela\u021bii care trebuie calculate, putem forma pachete. Adic\u0103, 2.500 de sarcini cu 5.000 de perechi de corela\u021bii. \u0218i aceast\u0103 sarcin\u0103 este calculat\u0103 pe un anumit server ClickHouse. Are toate datele, pentru c\u0103 datele sunt identice \u0219i le poate calcula secven\u021bial. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/587c6d587a48f2407dd2687f5423d44a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cenc\u0103 o dat\u0103, cum arat\u0103 asta. Mai \u00eent\u00e2i, avem toate datele \u00eentr-o structur\u0103 de acest tip: timp, ac\u021biuni, pre\u021b. Apoi am calculat logReturn, adic\u0103 datele acelea\u0219i structuri, doar c\u0103 \u00een loc de pre\u021b avem deja logReturn. Apoi le-am reorganizat, adic\u0103 am ob\u021binut timp \u0219i groupArray pe ac\u021biuni \u0219i pe pre\u021buri. Am replicat. \u0218i dup\u0103 asta am generat o gr\u0103mad\u0103 de sarcini \u0219i le-am trimis c\u0103tre ClickHouse pentru a le calcula. \u0218i asta func\u021bioneaz\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/434e7385aebcffcc03d1bd1a2020c8bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La proof of concept, sarcina a fost o sub-sarcin\u0103, adic\u0103 am luat mai pu\u021bine date. \u0218i doar pe trei servere.<\/p>\n<p><\/p>\n<p>Primele dou\u0103 etape: calcularea Log_return \u0219i ambalarea \u00een tablouri au durat aproximativ o or\u0103 fiecare. <\/p>\n<p><\/p>\n<p>Dar calcularea corela\u021biei a durat cam 50 de ore. \u00cens\u0103 50 de ore este pu\u021bin, pentru c\u0103 \u00eenainte la ei aceast\u0103 opera\u021biune dura s\u0103pt\u0103m\u00e2ni. A fost un mare succes. \u0218i, dac\u0103 ne g\u00e2ndim, totul a fost calculat de 70 de ori pe secund\u0103 \u00een acest cluster.<\/p>\n<p><\/p>\n<p>Dar cel mai important este c\u0103 acest sistem este practic f\u0103r\u0103 g\u00e2tleie, adic\u0103 se scaleaz\u0103 aproape liniar. \u0218i au verificat asta. Au reu\u0219it s\u0103-l scaleze cu succes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5a595a84897e492b49dccfb0f058b1b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Schema corect\u0103 este jum\u0103tate din succes. \u0218i schema corect\u0103 este utilizarea tuturor tehnologiilor necesare ClickHouse. <\/li>\n<li>Summing\/AggregatingMergeTrees sunt tehnologiile care permit agregarea sau calcularea st\u0103rii snapshot ca un caz particular. \u0218i aceasta simplific\u0103 considerabil multe lucruri. <\/li>\n<li>Materialized Views permit ocolirea limit\u0103rii la un singur index. Poate c\u0103 nu am exprimat asta foarte clar, dar c\u00e2nd \u00eencarc\u0103m jurnalele, jurnalele brute erau \u00een tabel cu un singur index, iar jurnalele de atribut erau \u00een tabel, adic\u0103 acelea\u0219i date, doar filtrate, dar indexul era complet diferit. Se pare c\u0103 sunt acelea\u0219i date, dar cu o sortare diferit\u0103. \u0218i Materialized Views permite, dac\u0103 ave\u021bi nevoie, ocolirea unei astfel de limit\u0103ri ClickHouse. <\/li>\n<li>Reduce\u021bi granularitatea indexului pentru interog\u0103ri punctuale. <\/li>\n<li>\u0218i distribui\u021bi datele inteligent, \u00eencerc\u00e2nd s\u0103 localiza\u021bi datele c\u00e2t mai mult posibil \u00een interiorul serverului. \u0218i \u00eencerca\u021bi ca interog\u0103rile s\u0103 utilizeze de asemenea localizarea acolo unde este maxim posibil. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c0fc1737986e3f18ed1d3c53df9f0252.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen concluzie, putem spune c\u0103 ClickHouse \u0219i-a consolidat acum pozi\u021bia at\u00e2t \u00een domeniul bazelor de date comerciale, c\u00e2t \u0219i \u00een cel al bazelor de date open source, \u0219i anume pentru analiz\u0103. S-a integrat perfect \u00een acest peisaj. Mai mult dec\u00e2t at\u00e2t, \u00eencepe treptat s\u0103 \u00eenlocuiasc\u0103 alte solu\u021bii, deoarece, c\u00e2nd ai ClickHouse, nu mai ai nevoie de InfiniDB. Poate c\u0103 Vertica nu va mai fi necesar\u0103 cur\u00e2nd, dac\u0103 vor oferi o sus\u021binere SQL adecvat\u0103. Folosi\u021bi-l!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexandr Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6e9a65d32eb6de7f9f139a30e7ab0d25.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u2014<em>V\u0103 mul\u021bumesc pentru prezentare! Foarte interesant! Au fost realizate vreo compara\u021bii cu Apache Phoenix?<\/em><\/p>\n<p><\/p>\n<p>- Nu, nu am auzit pe nimeni s\u0103 fac\u0103 o compara\u021bie. Noi \u0219i Yandex \u00eencerc\u0103m s\u0103 monitoriz\u0103m toate compara\u021biile ClickHouse cu diferite baze de date. Pentru c\u0103, dac\u0103 se dovede\u0219te c\u0103 ceva este mai rapid dec\u00e2t ClickHouse, Alexei Milovidov nu poate dormi noaptea \u0219i \u00eencepe rapid s\u0103-l optimizeze. Nu am auzit de o astfel de compara\u021bie. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>(Alexei Milovidov) Apache Phoenix este un motor SQL pe Hbase. Hbase este destinat \u00een principal scenariilor de tip key-value. Fiecare r\u00e2nd poate avea un num\u0103r arbitrar de coloane cu nume arbitrare. Acest lucru se poate spune \u0219i despre sisteme precum Hbase, Cassandra. \u0218i pentru acestea, interog\u0103rile analitice complexe nu vor func\u021biona corespunz\u0103tor. Sau s-ar putea s\u0103 crede\u021bi c\u0103 func\u021bioneaz\u0103 bine, dac\u0103 nu a\u021bi avut experien\u021b\u0103 cu ClickHouse.<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Mul\u021bumesc<\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>Bun\u0103 ziua! M\u0103 intereseaz\u0103 destul de mult acest subiect, deoarece lucrez cu un sistem analitic. Dar, c\u00e2nd m\u0103 uit la ClickHouse, am impresia c\u0103 este foarte potrivit pentru analiza evenimentelor, mutabile. Dac\u0103 trebuie s\u0103 analizez multe date de afaceri cu o mul\u021bime de tabele mari, ClickHouse, din c\u00e2te \u00een\u021beleg, nu este foarte potrivit pentru mine? \u00cen special, dac\u0103 acestea se schimb\u0103. Este corect sau exist\u0103 exemple care pot infirma acest lucru?<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Asta este corect. \u0218i este adev\u0103rat pentru majoritatea bazelor de date analitice specializate. Ele sunt concepute pentru a lucra cu una sau mai multe tabele mari, care sunt mutable, \u0219i cu multe mici, care se schimb\u0103 lent. Adic\u0103, ClickHouse nu este ca Oracle, unde po\u021bi stoca totul \u0219i construi interog\u0103ri foarte complexe. Pentru a utiliza eficient ClickHouse, trebuie s\u0103 construie\u0219ti schema \u00een modul care func\u021bioneaz\u0103 bine \u00een ClickHouse. Adic\u0103, s\u0103 evi\u021bi normalizarea excesiv\u0103, s\u0103 folose\u0219ti dic\u021bionare, s\u0103 \u00eencerci s\u0103 faci mai pu\u021bine rela\u021bii lungi. Dac\u0103 schema este construit\u0103 \u00een acest mod, atunci sarcini de afaceri similare pe ClickHouse pot fi rezolvate mult mai eficient dec\u00e2t \u00eentr-o baz\u0103 de date rela\u021bional\u0103 tradi\u021bional\u0103. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Mul\u021bumesc pentru prezentare! Am o \u00eentrebare referitoare la ultimul caz financiar. Au avut o analiz\u0103. Trebuia s\u0103 compare cum evolueaz\u0103 \u00een sus \u0219i \u00een jos. \u0218i \u00een\u021beleg c\u0103 a\u021bi construit sistemul exact pentru aceast\u0103 analiz\u0103? Dac\u0103 m\u00e2ine, s\u0103 zicem, le-ar trebui un alt raport pe aceste date, trebuie s\u0103 reconstruiasc\u0103 schema \u0219i s\u0103 \u00eencarce datele din nou? Adic\u0103, s\u0103 fac\u0103 o oarecare preprocesare pentru a ob\u021bine interogarea?<\/em><\/p>\n<p><\/p>\n<p>Sigur, aceasta este utilizarea ClickHouse pentru o sarcin\u0103 foarte specific\u0103. Aceasta ar putea fi rezolvat\u0103 \u00een mod tradi\u021bional \u00een cadrul Hadoop. Este o sarcin\u0103 perfect\u0103 pentru Hadoop. Dar pe Hadoop este foarte lent. Scopul meu este s\u0103 demonstrez c\u0103 \u00een ClickHouse se pot rezolva sarcini care de obicei sunt gestionate prin alte mijloace, dar \u00eentr-un mod mult mai eficient. Este adaptat pentru o sarcin\u0103 specific\u0103. Este clar c\u0103, dac\u0103 exist\u0103 o sarcin\u0103 similar\u0103, aceasta poate fi rezolvat\u0103 \u00eentr-un mod similar. <\/p>\n<p><\/p>\n<p><em>\u00cen\u021beleg. A\u021bi spus c\u0103 a fost procesat timp de 50 de ore. Este vorba de la \u00eenceput, c\u00e2nd au fost \u00eenc\u0103rcate datele sau c\u00e2nd au fost ob\u021binute rezultatele?<\/em><\/p>\n<p><\/p>\n<p>Da-da.<\/p>\n<p><\/p>\n<p><em>Bine, v\u0103 mul\u021bumesc foarte mult.<\/em><\/p>\n<p><\/p>\n<p>Este pe un cluster de 3 servere. <\/p>\n<p><\/p>\n<p><em>Bun\u0103! Mul\u021bumesc pentru prezentare! Totul este foarte interesant. Nu \u00eentreb despre func\u021bionalitate, ci despre utilizarea ClickHouse din perspectiva stabilit\u0103\u021bii. Au avut loc vreo problem\u0103, a fost nevoie s\u0103 restaura\u021bi? Cum se comport\u0103 ClickHouse \u00een aceast\u0103 situa\u021bie? \u0218i s-a \u00eent\u00e2mplat vreodat\u0103 s\u0103 ave\u021bi o c\u0103dere \u0219i replica, de asemenea? De exemplu, noi am \u00eent\u00e2lnit probleme cu ClickHouse, c\u00e2nd a dep\u0103\u0219it limita \u0219i a c\u0103zut.<\/em><\/p>\n<p><\/p>\n<p>Sigur, nu exist\u0103 sisteme perfecte. \u0218i ClickHouse are, de asemenea, problemele sale. Dar a\u021bi auzit vreodat\u0103 c\u0103 Yandex.Metrica nu a func\u021bionat o perioad\u0103 lung\u0103? Probabil c\u0103 nu. Func\u021bioneaz\u0103 fiabil undeva din 2012-2013 pe ClickHouse. Pot de asemenea s\u0103 vorbesc despre experien\u021ba mea. Nu am avut niciodat\u0103 \u00eentreruperi complete. Au putut ap\u0103rea unele probleme par\u021biale, dar niciodat\u0103 nu au fost at\u00e2t de critice \u00eenc\u00e2t s\u0103 afecteze serios afacerea. Acest lucru nu s-a \u00eent\u00e2mplat niciodat\u0103. ClickHouse este destul de fiabil \u0219i nu pic\u0103 \u00een mod aleator. Nu trebuie s\u0103 v\u0103 face\u021bi griji \u00een leg\u0103tur\u0103 cu asta. Nu este un lucru precar. Acest lucru a fost dovedit de multe companii. <\/p>\n<p><\/p>\n<p><em>Bun\u0103 ziua! A\u021bi spus c\u0103 trebuie s\u0103 g\u00e2ndi\u021bi foarte bine schema de date de la \u00eenceput. Dar ce se \u00eent\u00e2mpl\u0103 dac\u0103 acest lucru nu a fost realizat? Datele mele continu\u0103 s\u0103 curg\u0103. Trec \u0219ase luni \u0219i \u00eemi dau seama c\u0103 nu pot continua a\u0219a, trebuie s\u0103 re\u00eenc\u0103rc datele \u0219i s\u0103 fac ceva cu ele.<\/em> <\/p>\n<p><\/p>\n<p>Acest lucru depinde, desigur, de sistemul dumneavoastr\u0103. Exist\u0103 c\u00e2teva metode de a face acest lucru practic f\u0103r\u0103 \u00eentrerupere. De exemplu, pute\u021bi crea o Materialized View, \u00een care s\u0103 ave\u021bi o alt\u0103 structur\u0103 a datelor, dac\u0103 aceasta poate fi mapat\u0103 \u00een mod clar. Adic\u0103, dac\u0103 permite maparea prin ClickHouse, adic\u0103 extragerea unor elemente, schimbarea cheii primare, schimbarea parti\u021bion\u0103rii, atunci se poate crea o Materialized View. Acolo, vechile date pot fi scrise, iar noile vor fi scrise automat. Apoi, doar schimba\u021bi utilizarea Materialized View, apoi schimba\u021bi scrierea \u0219i \u0219terge\u021bi tabelul vechi. Acesta este un mod de a face asta f\u0103r\u0103 oprire. <\/p>\n<p><\/p>\n<p><em>Mul\u021bumim.<\/em><\/p>\n<p>Sursa: <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.2.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\/ro\/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.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Teoria \u0219i practica utiliz\u0103rii ClickHouse \u00een aplica\u021bii reale. Alexander Zaitsev (2018) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/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":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/89878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=89878"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/89878\/revisions"}],"predecessor-version":[{"id":162171,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/89878\/revisions\/162171"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/89879"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=89878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=89878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=89878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}