{"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\/de\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","title":{"rendered":"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b46b964324a3311157d5df737526b1d1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Obwohl es heute fast \u00fcberall viele Daten gibt, sind analytische Datenbanken immer noch ziemlich exotisch. Sie sind nur schwer bekannt und noch schwerer effektiv zu nutzen. Viele setzen weiterhin auf MySQL oder PostgreSQL, die f\u00fcr andere Szenarien konzipiert sind, k\u00e4mpfen mit NoSQL oder zahlen zu viel f\u00fcr kommerzielle L\u00f6sungen. ClickHouse ver\u00e4ndert die Spielregeln und senkt den Einstiegspreis in die Welt der analytischen DBMS erheblich.<\/p>\n<p><\/p>\n<p>Der Bericht von der BackEnd Conf 2018 und er wurde mit Erlaubnis des Referenten ver\u00f6ffentlicht.<\/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=\"Video abspielen\" 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=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6c55b639d9703f460d99e0b0b1194507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWer bin ich und warum erz\u00e4hle ich von ClickHouse? Ich bin Direktor f\u00fcr Entwicklung bei LifeStreet, einem Unternehmen, das ClickHouse verwendet. Au\u00dferdem bin ich Gr\u00fcnder von Altinity. Das ist ein Partner von Yandex, der ClickHouse f\u00f6rdert und Yandex hilft, ClickHouse erfolgreicher zu machen. Ich bin auch bereit, Wissen \u00fcber ClickHouse zu teilen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/36af6acba62271f7aa19dda2eb470870.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und ich bin nicht Petja Zaitsev's Bruder. Oft werde ich danach gefragt. Nein, wir sind keine Br\u00fcder.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6ca605f97619a1373bb8a92f88d480d5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u201eEs ist allgemein bekannt\u201c, dass ClickHouse:<\/p>\n<p><\/p>\n<ul>\n<li>Sehr schnell ist,<\/li>\n<li>Sehr benutzerfreundlich ist, <\/li>\n<li>In Yandex verwendet wird. <\/li>\n<\/ul>\n<p><\/p>\n<p>Es ist weniger bekannt, in welchen Unternehmen und wie es verwendet wird. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c097b003bf8ea13b8a3bb765270e99c8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ich werde Ihnen erz\u00e4hlen, wof\u00fcr, wo und wie ClickHouse verwendet wird, abgesehen von Yandex. <\/p>\n<p><\/p>\n<p>Ich werde erl\u00e4utern, wie spezifische Aufgaben mit ClickHouse in verschiedenen Unternehmen gel\u00f6st werden, welche M\u00f6glichkeiten ClickHouse f\u00fcr Ihre Aufgaben bietet und wie sie in verschiedenen Unternehmen eingesetzt wurden.<\/p>\n<p><\/p>\n<p>Ich habe drei Beispiele ausgew\u00e4hlt, die ClickHouse aus verschiedenen Perspektiven zeigen. Ich denke, das wird interessant sein.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d3cab92ceccd6c7d01ca1f28b028803f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die erste Frage: \u201eWarum ist ClickHouse n\u00f6tig?\u201c. Es scheint, die Frage sei offensichtlich, aber es gibt mehr als eine Antwort darauf. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1a4e14cc041a3c01ad0fd2a305aeeab0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Die erste Antwort \u2013 wegen der Leistung. ClickHouse ist sehr schnell. Analysen mit ClickHouse sind ebenfalls sehr schnell. Es kann oft dort verwendet werden, wo etwas anderes sehr langsam oder sehr schlecht funktioniert. <\/li>\n<li>Die zweite Antwort \u2013 es sind die Kosten. Und vor allem die Kosten f\u00fcr die Skalierung. Zum Beispiel ist Vertica eine v\u00f6llig andere Datenbank. Sie funktioniert sehr gut, wenn Sie nicht sehr viele Terabyte Daten haben. Aber wenn es um Hundert Terabyte oder Petabyte geht, werden die Kosten f\u00fcr Lizenzen und Support ziemlich erheblich. Und das ist teuer. ClickHouse ist hingegen kostenlos. <\/li>\n<li>Die dritte Antwort sind die Betriebskosten. Dies ist ein Ansatz aus einer etwas anderen Perspektive. RedShift ist ein hervorragendes Pendant. Mit RedShift kann man sehr schnell eine L\u00f6sung erstellen. Sie wird gut funktionieren, aber jeden Stunde, jeden Tag und jeden Monat werden Sie ziemlich viel an Amazon zahlen, da es ein deutlich teurerer Service ist. Google BigQuery ebenfalls. Wer es genutzt hat, wei\u00df, dass man dort mehrere Abfragen starten kann und pl\u00f6tzlich eine Rechnung in H\u00f6he von Hunderten Dollar erh\u00e4lt. <\/li>\n<\/ul>\n<p><\/p>\n<p>In ClickHouse gibt es diese Probleme nicht. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3084a8bd9271f14726d73989946816c5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wo wird ClickHouse derzeit verwendet? Neben Yandex wird ClickHouse in einer Vielzahl von verschiedenen Unternehmen eingesetzt. <\/p>\n<p><\/p>\n<ul>\n<li>In erster Linie handelt es sich um die Analyse von Webanwendungen, d. h. es ist ein Anwendungsfall, der von Yandex stammt.<\/li>\n<li>Viele AdTech-Unternehmen nutzen ClickHouse. <\/li>\n<li>Zahlreiche Unternehmen, die betriebliche Protokolle aus verschiedenen Quellen analysieren m\u00fcssen.<\/li>\n<li>Einige Unternehmen verwenden ClickHouse zur \u00dcberwachung von Sicherheitsprotokollen. Sie laden diese in ClickHouse hoch, erstellen Berichte und erhalten die ben\u00f6tigten Ergebnisse.<\/li>\n<li>Unternehmen beginnen, es in der Finanzanalyse zu verwenden, d. h. schrittweise wird auch der gro\u00dfe Business-Sektor auf ClickHouse aufmerksam. <\/li>\n<li>CloudFlare. Wer ClickHouse verfolgt, hat sicherlich den Namen dieses Unternehmens geh\u00f6rt. Es ist einer der bedeutenden Mitwirkenden aus der Community. Und sie haben eine sehr ernsthafte ClickHouse-Installation. Zum Beispiel haben sie einen Kafka Engine f\u00fcr ClickHouse entwickelt. <\/li>\n<li>Telekommunikationsunternehmen haben begonnen, es zu verwenden. Mehrere Unternehmen nutzen ClickHouse entweder als Proof of Concept oder bereits in der Produktion.<\/li>\n<li>Ein Unternehmen verwendet ClickHouse zur \u00dcberwachung von Produktionsprozessen. Sie testen Chips, erfassen viele Parameter, etwa 2000 Eigenschaften, und analysieren dann \u2013 ob es sich um eine gute oder eine schlechte Charge handelt.<\/li>\n<li>Blockchain-Analyse. Es gibt ein russisches Unternehmen wie Bloxy.info. Das ist die Analyse des Ethereum-Netzes. Auch das haben sie mit ClickHouse umgesetzt. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/8a0c1924a20ed2d15cd0f959e9b3e499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und die Gr\u00f6\u00dfe spielt keine Rolle. Es gibt viele Unternehmen, die einen kleinen Server nutzen. Und dieser erm\u00f6glicht es ihnen, ihre Probleme zu l\u00f6sen. Und noch mehr Unternehmen nutzen gro\u00dfe Cluster aus vielen <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/de\/server\/\"   title=\"Server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1513\">Server<\/a> oder Dutzenden von Servern. <\/p>\n<p><\/p>\n<p>Und wenn man sich die Rekorde anschaut, dann:<\/p>\n<p><\/p>\n<ul>\n<li>Yandex: \u00dcber 500 Server, 25 Milliarden Eintr\u00e4ge pro Tag werden dort gespeichert.<\/li>\n<li>LifeStreet: 60 Server, etwa 75 Milliarden Eintr\u00e4ge pro Tag. Weniger Server, mehr Eintr\u00e4ge als bei Yandex. <\/li>\n<li>CloudFlare: 36 Server, sie speichern 200 Milliarden Eintr\u00e4ge pro Tag. Sie haben sogar noch weniger Server und speichern noch mehr Daten. <\/li>\n<li>Bloomberg: 102 <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/de\/server\/dts-los-angeles\/\"   title=\"Server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3643\">Server<\/a>, etwa eine Billion Eintr\u00e4ge pro Tag. Rekordhalter bei den Eintr\u00e4gen.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/49194030b6586221cb17029889ce33da.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Geografisch gesehen ist das auch viel. Diese Karte zeigt die Heatmap, wo ClickHouse weltweit verwendet wird. Hier stechen Russland, China und Amerika hervor. Es gibt nur wenige europ\u00e4ische L\u00e4nder. Man kann 4 Cluster herausstellen.<\/p>\n<p><\/p>\n<p>Dies ist eine vergleichende Analyse, hier braucht man keine absoluten Zahlen zu suchen. Es handelt sich um die Analyse von Besuchern, die englischsprachige Inhalte auf der Altinity-Website lesen, da es dort keine russischsprachigen Inhalte gibt. Russland, die Ukraine und Wei\u00dfrussland, d.h. der russischsprachige Teil der Community, sind die zahlreichsten Nutzer. Danach folgen die USA und Kanada. China holt stark auf. Vor einem halben Jahr war China fast nicht vertreten, jetzt hat China bereits Europa \u00fcberholt und w\u00e4chst weiter. Auch die alte Dame Europa bleibt nicht zur\u00fcck, und zwar ist Frankreich, erstaunlicherweise, der f\u00fchrende Nutzer von ClickHouse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3a8305c51b1bd62f3467b795402df4ed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Warum erz\u00e4hle ich das alles? Um zu zeigen, dass ClickHouse eine Standardl\u00f6sung f\u00fcr die Analyse gro\u00dfer Datenmengen wird und bereits in vielen Bereichen eingesetzt wird.<\/strong> Wenn Sie es verwenden, sind Sie im richtigen Trend. Wenn Sie es noch nicht verwenden, brauchen Sie keine Angst haben, dass Sie allein dastehen und Ihnen niemand hilft, denn viele sind bereits dabei.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6aa635f3a35034d3af837c78b2c8fe60.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dies sind Beispiele f\u00fcr die reale Nutzung von ClickHouse in mehreren Unternehmen. <\/p>\n<p><\/p>\n<ul>\n<li>Das erste Beispiel ist ein Werbenetzwerk: Migration von Vertica zu ClickHouse. Ich kenne mehrere Unternehmen, die von Vertica gewechselt sind oder sich im Prozess des Wechsels befinden. <\/li>\n<li>Das zweite Beispiel ist ein transaktionales Data Warehouse auf ClickHouse. Dies ist ein Beispiel, das auf Anti-Pattern aufgebaut ist. Alles, was man laut den Entwicklern in ClickHouse nicht tun sollte, ist hier gemacht worden. Und dennoch wurde es so effektiv umgesetzt, dass es funktioniert. Und es funktioniert viel besser als eine typische transaktionale L\u00f6sung. <\/li>\n<li>Das dritte Beispiel sind verteilte Berechnungen auf ClickHouse. Es gab die Frage, wie ClickHouse in das Hadoop-\u00d6kosystem integriert werden kann. Ich werde ein Beispiel zeigen, wie ein Unternehmen mit ClickHouse etwas \u00c4hnliches wie einen Map-Reduce-Container erstellt hat, wobei die Lokalisierung der Daten usw. ber\u00fccksichtigt wurde, um eine sehr nicht triviale Aufgabe zu berechnen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander 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 Das ist ein Ad-Tech-Unternehmen, das alle Technologien hat, die mit einem Werbenetzwerk verbunden sind. <\/li>\n<li>Es besch\u00e4ftigt sich mit der Optimierung von Anzeigen und programmatischem Bietverfahren. <\/li>\n<li>Viele Daten: etwa 10 Milliarden Ereignisse pro Tag. Dabei k\u00f6nnen Events in mehrere Unterereignisse unterteilt werden.<\/li>\n<li>Viele Kunden dieser Daten, und das sind nicht nur Menschen, sondern viel mehr \u2013 verschiedene Algorithmen, die sich mit programmatic bidding besch\u00e4ftigen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2da99b53eb25f675a2431027f86db934.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das Unternehmen hat einen langen und steinigen Weg hinter sich. Und ich habe dar\u00fcber auf HighLoad gesprochen. Zun\u00e4chst wechselte LifeStreet von MySQL (mit einem kurzen Halt bei Oracle) zu Vertica. Dar\u00fcber kann man Berichte finden. <\/p>\n<p><\/p>\n<p>Und alles lief sehr gut, aber es wurde ziemlich schnell klar, dass die Daten wachsen und dass Vertica teuer ist. Daher wurden verschiedene Alternativen gesucht. Einige von ihnen sind hier aufgelistet. Tats\u00e4chlich haben wir fast alle Datenbanken, die von 2013 bis 2016 auf dem Markt verf\u00fcgbar waren und in etwa die richtige Funktionalit\u00e4t hatten, in einem Proof of Concept oder manchmal Performance-Tests gepr\u00fcft. \u00dcber einige davon habe ich auch auf HighLoad gesprochen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/4bebd2f43892cbef9249ddded1b8a70a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Die Aufgabe bestand darin, zuerst von Vertica zu migrieren, weil die Daten wuchsen. Und sie wuchsen \u00fcber mehrere Jahre exponentiell. Sp\u00e4ter stagnierte das Wachstum, aber trotzdem. Und mit Blick auf dieses Wachstum war es klar, dass die Anforderungen des Unternehmens bez\u00fcglich des Datenvolumens, f\u00fcr das eine Analyse erforderlich war, bald zu Gespr\u00e4chen \u00fcber Petabytes f\u00fchren w\u00fcrden. Und f\u00fcr Petabytes zu zahlen, ist schon sehr teuer, daher suchten wir nach Alternativen, wohin man wechseln k\u00f6nnte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f170a4307168e8560122966eab85c24e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wohin wechseln? Lange Zeit war v\u00f6llig unklar, wohin man wechseln k\u00f6nnte, denn auf der einen Seite gibt es kommerzielle Datenbanken, die anscheinend gut funktionieren. Einige funktionieren fast so gut wie Vertica, andere schlechter. Aber sie sind alle teuer, nichts Besseres und G\u00fcnstigeres lie\u00df sich finden. <\/p>\n<p><\/p>\n<p>Auf der anderen Seite gibt es Open-Source-L\u00f6sungen, von denen es nicht viele gibt, d. h. f\u00fcr Analytik kann man sie an einer Hand abz\u00e4hlen. Und sie sind kostenlos oder g\u00fcnstig, aber sie arbeiten langsam. Oft fehlt es ihnen an der ben\u00f6tigten und n\u00fctzlichen Funktionalit\u00e4t.<\/p>\n<p><\/p>\n<p>Es gab nichts, was das Gute aus kommerziellen Datenbanken mit all dem Kostenlosen aus Open Source kombinierte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/abbefbf0d9578b554f81579b87213a50.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gab nichts, bis pl\u00f6tzlich Yandex ClickHouse wie ein Kaninchen aus dem Hut eines Zauberers zog. Und das war eine unerwartete L\u00f6sung, und bis heute wird die Frage gestellt: \"Warum?\", aber dennoch. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c88981aace9d5925396ca5171241b7d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und sofort im Sommer 2016 begannen wir zu schauen, was ClickHouse ist. Und es stellte sich heraus, dass es manchmal schneller als Vertica sein kann. Wir testeten verschiedene Szenarien mit unterschiedlichen Abfragen. Und wenn die Abfrage nur eine Tabelle verwendete, d. h. ohne irgendwelche Joins, war ClickHouse doppelt so schnell wie Vertica. <\/p>\n<p><\/p>\n<p>Ich habe mich nicht gescheut und mir die Tests von Yandex in den letzten Tagen angesehen. Dort dasselbe: ClickHouse ist doppelt so schnell wie Vertica, daher reden sie oft dar\u00fcber. <\/p>\n<p><\/p>\n<p>Aber wenn in den Abfragen Joins enthalten sind, wird alles nicht so eindeutig. Und ClickHouse kann langsamer als Vertica sein, und zwar um das Doppelte. Wenn die Abfrage etwas angepasst und umgeschrieben wird, ist es ungef\u00e4hr gleich. Nicht schlecht. Und kostenlos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/188bf56b72123175a18d2cb97d989a47.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nachdem wir die Testergebnisse erhalten und die Situation aus verschiedenen Blickwinkeln betrachtet hatten, entschied sich LifeStreet f\u00fcr ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1183b9b7681916686c52786fc95ccb45.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das ist das Jahr 2016, ich erinnere daran. Es war wie in dem Witz \u00fcber die M\u00e4use, die weinten und sich stachen, aber weiter Kaktus a\u00dfen. Und dar\u00fcber wurde ausf\u00fchrlich berichtet, es gibt ein Video dar\u00fcber usw. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/993052ed83dc295c3777e614c7703456.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ich werde also nicht ausf\u00fchrlich dar\u00fcber berichten, sondern nur die Ergebnisse und einige interessante Dinge erz\u00e4hlen, \u00fcber die ich damals nicht gesprochen habe. <\/p>\n<p><\/p>\n<p>Die Ergebnisse sind:<\/p>\n<p><\/p>\n<ul>\n<li>Erfolgreiche Migration und seit \u00fcber einem Jahr l\u00e4uft das System bereits in der Produktion. <\/li>\n<li>Die Leistung und Flexibilit\u00e4t haben zugenommen. Von 10 Milliarden Datens\u00e4tzen, die wir uns fr\u00fcher erlauben konnten, wurden nun t\u00e4glich 75 Milliarden Datens\u00e4tze f\u00fcr LifeStreet gespeichert und dies kann \u00fcber 3 Monate und mehr erfolgen. In Spitzenzeiten werden bis zu einer Million Ereignisse pro Sekunde gespeichert. Mehr als eine Million SQL-Abfragen pro Tag gelangen in dieses System, haupts\u00e4chlich von verschiedenen Bots. <\/li>\n<li>Obwohl f\u00fcr ClickHouse mehr Server als f\u00fcr Vertica verwendet werden, gab es auch eine Einsparung bei der Hardware, da in Vertica ziemlich teure SAS-Festplatten verwendet wurden. In ClickHouse wurden SATA verwendet. Warum? Weil in Vertica Inserts synchron sind. Und die Synchronisation erfordert, dass die Festplatten nicht zu stark ausgebremst werden, ebenso wie das Netzwerk, d. h. es ist eine ziemlich teure Operation. In ClickHouse sind die Inserts asynchron. Dar\u00fcber hinaus kann immer alles lokal geschrieben werden, es fallen keine zus\u00e4tzlichen Kosten daf\u00fcr an, weshalb die Daten in ClickHouse viel schneller als in Vertica selbst auf nicht den schnellsten Festplatten eingef\u00fcgt werden k\u00f6nnen. Beim Lesen ist es ungef\u00e4hr gleich. Das Lesen auf SATA, wenn sie in RAID sind, erfolgt ziemlich schnell. <\/li>\n<li>Nicht durch Lizenzen eingeschr\u00e4nkt, d. h. 3 Petabyte Daten in 60 Servern (20 Server sind ein Replikat) und 6 Billionen Datens\u00e4tze in Fakten und Aggregaten. So etwas konnte man sich bei Vertica nicht leisten. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f461cdc12917ee655655dd7eb9c32bb2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt komme ich zu den praktischen Dingen in diesem Beispiel.<\/p>\n<p><\/p>\n<ul>\n<li>Das Erste ist ein effektives Schema. Vom Schema h\u00e4ngt sehr viel ab. <\/li>\n<li>Das Zweite ist die Generierung von effektivem SQL.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e7dc2a217e77c8794ff6e8a754e78c85.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eine typische OLAP-Abfrage ist ein Select. Ein Teil der Spalten geht in die Group By-Klausel, ein Teil der Spalten in die Aggregatfunktionen. Es gibt eine Where-Klausel, die man sich als Schnitt aus dem W\u00fcrfel vorstellen kann. Die gesamte Group By-Klausel kann als Projektion betrachtet werden. Daher wird das auch als multidimensionale Datenanalyse bezeichnet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a03a2d7fd28905ae83183346f0c673e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und oft wird das in Form eines Star-Schemas modelliert, bei dem es eine zentrale Tatsache und Charakteristika dieser Tatsache an den Seiten, an den Strahlen gibt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d9671af4b39cc83e1ae49e6fd75d0e02.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und aus Sicht des physischen Designs, wie das auf die Tabelle f\u00e4llt, wird normalerweise eine normalisierte Darstellung erstellt. Man kann es denormalisieren, aber das ist auf der Festplatte teuer und nicht sehr effizient bei Abfragen. Daher wird normalerweise eine normalisierte Darstellung gemacht, d. h. eine Faktentabelle und viele, viele Dimensionstabellen. <\/p>\n<p><\/p>\n<p>Aber in ClickHouse funktioniert das schlecht. Es gibt zwei Gr\u00fcnde daf\u00fcr: <\/p>\n<p><\/p>\n<ul>\n<li>Erstens liegt es daran, dass ClickHouse keine besonders guten Joins hat, d. h. es gibt Joins, aber sie sind schlecht. Bis jetzt schlecht. <\/li>\n<li>Der zweite Grund ist, dass die Tabellen nicht aktualisiert werden. Normalerweise muss man in diesen Tabellen, die um das Star-Schema herum angeordnet sind, etwas \u00e4ndern. Zum Beispiel den Namen des Kunden, den Namen des Unternehmens usw. Und das funktioniert nicht. <\/li>\n<\/ul>\n<p><\/p>\n<p>Und es gibt einen Ausweg aus diesem Dilemma in ClickHouse. Sogar gleich zwei: <\/p>\n<p><\/p>\n<ul>\n<li>Erstens ist die Verwendung von Dictionaries. External Dictionaries helfen zu 99 %, das Problem mit dem Star-Schema, mit Updates und anderem zu l\u00f6sen. <\/li>\n<li>Zweitens die Verwendung von Arrays. Arrays helfen auch, die Joins zu vermeiden und die Probleme mit der Normalisierung zu beseitigen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/775972cc412651600799173407384492.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Joins sind nicht n\u00f6tig. <\/li>\n<li>Aktualisierbar. Seit M\u00e4rz 2018 gibt es eine undocumented M\u00f6glichkeit (Sie finden es nicht in der Dokumentation), Dictionaries teilweise zu aktualisieren, d. h. die Datens\u00e4tze, die sich ge\u00e4ndert haben. Praktisch ist es wie eine Tabelle.<\/li>\n<li>Immer im Speicher, deshalb funktionieren Joins mit dem Dictionary schneller, als wenn es sich um eine Tabelle handelt, die auf der Festplatte liegt und wahrscheinlich nicht im Cache ist. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f73176a650b6d885011e3265c2af2fc3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Joins sind auch nicht n\u00f6tig.<\/li>\n<li>Das ist eine kompakte Darstellung von 1 zu vielen. <\/li>\n<li>Und meiner Meinung nach sind Arrays f\u00fcr Nerds gemacht. Das sind Lambda-Funktionen und \u00c4hnliches. <\/li>\n<\/ul>\n<p><\/p>\n<p>Das ist nicht nur leeres Geschw\u00e4tz. Es handelt sich um eine sehr leistungsf\u00e4hige Funktionalit\u00e4t, die es erm\u00f6glicht, viele Dinge sehr einfach und elegant zu erledigen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5d813952ca8f3da7a74c6f2a15d80a9b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Typische Beispiele, die helfen, Arrays zu l\u00f6sen. Diese Beispiele sind einfach und sehr anschaulich:<\/p>\n<p><\/p>\n<ul>\n<li>Suche nach Tags. Wenn Sie dort Hashtags haben und einige Eintr\u00e4ge nach einem Hashtag finden m\u00f6chten. <\/li>\n<li>Suche nach Key-Value-Paaren. Auch dort gibt es bestimmte Attribute mit Werten. <\/li>\n<li>Speicherung von Schl\u00fcssellisten, die Sie in etwas anderes umwandeln m\u00f6chten.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle diese Aufgaben k\u00f6nnen ohne Arrays gel\u00f6st werden. Tags k\u00f6nnen in eine bestimmte Zeile eingef\u00fcgt und mit regul\u00e4ren Ausdr\u00fccken ausgew\u00e4hlt oder in eine separate Tabelle gelegt werden, aber dann m\u00fcssen Sie Joins machen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/dbbf90eee098c4564206532f24156823.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In ClickHouse muss man jedoch gar nichts tun, es reicht aus, ein Array von Strings f\u00fcr Hashtags zu beschreiben oder eine geschachtelte Struktur f\u00fcr Systeme wie Key-Value zu erstellen.<\/p>\n<p><\/p>\n<p>Eine geschachtelte Struktur ist vielleicht nicht der beste Begriff. Es sind zwei Arrays, die einen gemeinsamen Teil im Namen haben und einige verbundene Eigenschaften. <\/p>\n<p><\/p>\n<p>Und die Suche nach Tags ist sehr einfach. Es gibt eine Funktion <code>has<\/code>, die \u00fcberpr\u00fcft, ob ein Element im Array vorhanden ist. Das ist alles, wir haben alle Eintr\u00e4ge gefunden, die zu unserer Konferenz geh\u00f6ren.<\/p>\n<p><\/p>\n<p>Die Suche nach subid ist etwas komplizierter. Wir m\u00fcssen zuerst den Index des Schl\u00fcssels finden und dann das Element mit diesem Index nehmen und \u00fcberpr\u00fcfen, ob der Wert den erforderlichen Kriterien entspricht. Dennoch ist es sehr einfach und kompakt.<\/p>\n<p><\/p>\n<p>Das regul\u00e4re Ausdruck, das Sie geschrieben h\u00e4tten, wenn Sie all dies in einer Zeile gespeichert h\u00e4tten, w\u00e4re erstens unsch\u00f6n und zweitens w\u00fcrde es viel l\u00e4nger dauern als zwei Arrays. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/17664c3121b2b0d33188adbfaa653d4e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein weiteres Beispiel. Sie haben ein Array, in dem Sie IDs speichern. Und Sie k\u00f6nnen diese in Namen umwandeln. Die Funktion <code>arrayMap<\/code>. Das ist eine typische Lambda-Funktion. Sie \u00fcbergeben dort Lambda-Ausdr\u00fccke. Und sie zieht f\u00fcr jede ID aus dem W\u00f6rterbuch den entsprechenden Namen heraus.<\/p>\n<p><\/p>\n<p>Auf \u00e4hnliche Weise kann auch die Suche erfolgen. Es wird eine Pr\u00e4dikatsfunktion \u00fcbergeben, die \u00fcberpr\u00fcft, welchen Bedingungen die Elemente entsprechen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/146917b71a35d38a550cd9accf6ab2f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Diese Dinge erleichtern das Schema erheblich und l\u00f6sen viele Probleme. <\/p>\n<p><\/p>\n<p>Aber das n\u00e4chste Problem, mit dem wir konfrontiert sind und das ich erw\u00e4hnen wollte, sind effektive Anfragen. <\/p>\n<p><\/p>\n<ul>\n<li>In ClickHouse gibt es keinen Abfrageplaner. \u00dcberhaupt keinen. <\/li>\n<li>Dennoch m\u00fcssen komplexe Abfragen geplant werden. In welchen F\u00e4llen? <\/li>\n<li>Wenn es in der Anfrage mehrere Joins gibt, die Sie in Unterabfragen verpacken. Und die Reihenfolge, in der sie ausgef\u00fchrt werden, ist wichtig. <\/li>\n<li>Und zweitens \u2013 wenn die Anfrage verteilt ist. Denn in einer verteilten Anfrage wird nur die innerste Unterabfrage verteilt ausgef\u00fchrt, w\u00e4hrend alles andere an einen Server \u00fcbergeben wird, mit dem Sie verbunden sind, und dort ausgef\u00fchrt wird. Daher m\u00fcssen Sie die Reihenfolge w\u00e4hlen, wenn Sie verteilte Anfragen mit vielen Joins haben. <\/li>\n<\/ul>\n<p><\/p>\n<p>Und selbst in einfacheren F\u00e4llen ist es manchmal sinnvoll, die Arbeit des Planers auszuf\u00fchren und die Anfragen ein wenig umzuschreiben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/217d422b429e8b4bc13abbf0efdf6be1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier ist ein Beispiel. Auf der linken Seite die Anfrage, die die Top-5-L\u00e4nder zeigt. Und sie wird, glaube ich, in 2,5 Sekunden ausgef\u00fchrt. Auf der rechten Seite dieselbe Anfrage, aber ein wenig umgeschrieben. Anstatt nach dem String zu gruppieren, gruppieren wir nach dem Schl\u00fcssel (int). Und das ist schneller. Danach haben wir dem Ergebnis ein W\u00f6rterbuch hinzugef\u00fcgt. Anstatt 2,5 Sekunden dauert die Anfrage 1,5 Sekunden. Das ist gut. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f19fb7d7f0397a3b38b2a3bd179c156b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein \u00e4hnliches Beispiel mit dem Umschreiben von Filtern. Hier ist die Anfrage f\u00fcr Russland. Sie dauert 5 Sekunden. Wenn wir sie so umschreiben, dass wir wieder nicht den String, sondern Zahlen mit einem Set von Schl\u00fcsseln vergleichen, die zu Russland geh\u00f6ren, wird es viel schneller sein. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0c1dd1f317133d1d106ffef85f337079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt viele solcher Tricks. Und sie erm\u00f6glichen es, die Anfragen erheblich zu beschleunigen, von denen Sie denken, dass sie bereits schnell laufen, oder umgekehrt, langsam laufen. Man kann sie noch schneller machen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/25b132790b03f239e38237af5e92ab63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Maximaler Arbeitsaufwand im verteilten Modus. <\/li>\n<li>Sortierung nach minimalen Typen, wie ich es mit Integers gemacht habe. <\/li>\n<li>Wenn es Joins oder W\u00f6rterb\u00fccher gibt, ist es am besten, diese ganz zuletzt zu machen, wenn Sie die Daten zumindest teilweise gruppiert haben, dann wird die Join-Operation oder der W\u00f6rterbuchaufruf weniger oft aufgerufen und das wird schneller. <\/li>\n<li>Ersetzen von Filtern. <\/li>\n<\/ul>\n<p><\/p>\n<p>Es gibt auch andere Techniken, nicht nur die, die ich demonstriert habe. Und all dies erm\u00f6glicht es manchmal, die Ausf\u00fchrung von Anfragen erheblich zu beschleunigen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/175832796bee525909d8875bd723a881.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kommen wir zum n\u00e4chsten Beispiel. Unternehmen X aus den USA. Was macht es? <\/p>\n<p><\/p>\n<p>Es gab eine Aufgabe: <\/p>\n<p><\/p>\n<ul>\n<li>Offline-Verkn\u00fcpfung von Werbetransaktionen. <\/li>\n<li>Modellierung verschiedener Bindungsmodelle. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0136b71a1205512d86f13e86761146f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Worin besteht das Szenario?<\/p>\n<p><\/p>\n<p>Ein typischer Besucher besucht die Website zum Beispiel 20 Mal im Monat \u00fcber verschiedene Anzeigen oder kommt manchmal einfach so ohne jegliche Werbung, weil er sich an diese Website erinnert. Er schaut sich einige Produkte an, legt sie in den Warenkorb und nimmt sie wieder heraus. Und schlie\u00dflich kauft er etwas. <\/p>\n<p><\/p>\n<p>Vern\u00fcnftige Fragen sind: \u201eWem muss man f\u00fcr die Werbung bezahlen, wenn es n\u00f6tig ist?\u201c und \u201eWelche Werbung hat ihn beeinflusst, wenn sie ihn beeinflusst hat?\u201c. Das hei\u00dft, warum hat er gekauft und wie kann man es anstellen, dass auch \u00e4hnliche Leute wie dieser Mensch kaufen?<\/p>\n<p><\/p>\n<p>Um diese Aufgabe zu l\u00f6sen, m\u00fcssen die Ereignisse, die auf der Website stattfinden, auf die richtige Weise miteinander verkn\u00fcpft werden, das hei\u00dft, eine Verbindung zwischen ihnen hergestellt werden. Diese Daten m\u00fcssen dann zur Analyse in das DWH \u00fcbertragen werden. Auf der Grundlage dieser Analyse werden Modelle erstellt, um zu entscheiden, wem und welche Werbung gezeigt werden soll.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e53ec81ce89150697d0eca4d72886638.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eine Werbetransaktion ist eine Reihe von miteinander verbundenen Benutzerereignissen, die mit der Anzeige einer Werbung beginnen, dann geschieht etwas, dann kann es zu einem Kauf kommen, und anschlie\u00dfend zu weiteren K\u00e4ufen innerhalb des Kaufs. Zum Beispiel, wenn es sich um eine mobile App oder ein mobiles Spiel handelt, erfolgt die Installation der App normalerweise kostenlos, aber wenn dort etwas weiter gemacht wird, k\u00f6nnen daf\u00fcr Kosten anfallen. Je mehr eine Person in der App ausgibt, desto wertvoller ist sie. Aber daf\u00fcr muss alles miteinander verbunden werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a2213613f1ef660409124ef8bcdd4fe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es gibt viele Modelle zur Verkn\u00fcpfung. <\/p>\n<p><\/p>\n<p>Die beliebtesten sind:<\/p>\n<p><\/p>\n<ul>\n<li>Last Interaction, wobei Interaction entweder ein Klick oder eine Anzeige ist.<\/li>\n<li>First Interaction, d. h. das Erste, was den Menschen auf die Website gebracht hat.<\/li>\n<li>Lineare Kombination \u2013 allen gleich. <\/li>\n<li>Abklingen.<\/li>\n<li>Und anderes. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/9523307d557e094d981da5b525ed0b59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wie hat das alles urspr\u00fcnglich funktioniert? Es gab Runtime und Cassandra. Cassandra wurde als Transaktionsspeicher verwendet, d. h. darin wurden alle verbundenen Transaktionen gespeichert. Wenn ein Ereignis in der Runtime eintritt, beispielsweise die Anzeige einer bestimmten Seite oder etwas anderes, wurde eine Anfrage an Cassandra gestellt \u2013 gibt es diese Person oder nicht. Dann wurden die zugeh\u00f6rigen Transaktionen abgerufen. Und es erfolgte die Verkn\u00fcpfung.<\/p>\n<p><\/p>\n<p>Und wenn man Gl\u00fcck hat, dass die Anfrage eine transaction id enth\u00e4lt, ist das einfach. Aber normalerweise hat man kein Gl\u00fcck. Deshalb musste man die letzte Transaktion oder die Transaktion mit dem letzten Klick finden usw. <\/p>\n<p><\/p>\n<p>Und das hat alles sehr gut funktioniert, solange die Bindung an den letzten Klick gebunden war. Weil es zum Beispiel 10 Millionen Klicks pro Tag, 300 Millionen pro Monat gibt, wenn man das Monatsfenster betrachtet. Und da in Cassandra dies alles im Speicher sein muss, um schnell zu arbeiten, da es erfordert, dass die Laufzeit schnell antwortet, waren etwa 10-15 Server erforderlich. <\/p>\n<p><\/p>\n<p>Als man jedoch die Transaktion an die Anzeige binden wollte, wurde es sofort nicht mehr so lustig. Warum? Es ist offensichtlich, dass 30 Mal mehr Ereignisse gespeichert werden m\u00fcssen. Und entsprechend m\u00fcssen 30 Mal mehr Server vorhanden sein. Das ergibt eine astronomische Zahl. Bis zu 500 Server zu halten, um die Bindung durchzuf\u00fchren, w\u00e4hrend es in der Laufzeit erheblich weniger Server gibt, ist eine v\u00f6llig unrealistische Zahl. Also begann man zu \u00fcberlegen, was zu tun ist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/7af35f1ade680232cc83a6887891bc5c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und so sind wir auf ClickHouse gesto\u00dfen. Aber wie macht man das mit ClickHouse? Auf den ersten Blick scheint es, als w\u00e4re es eine Ansammlung von Antipatterns. <\/p>\n<p><\/p>\n<ul>\n<li>Die Transaktion w\u00e4chst, wir binden immer neue und neue Ereignisse daran, d.h. sie ist ver\u00e4nderlich, und ClickHouse arbeitet nicht besonders gut mit ver\u00e4nderlichen Objekten. <\/li>\n<li>Wenn ein Besucher zu uns kommt, m\u00fcssen wir seine Transaktionen anhand des Schl\u00fcssels, seines Besuchs-IDs, abrufen. Das ist ebenfalls eine Punktabfrage, so macht man das in ClickHouse nicht. Normalerweise gibt es in ClickHouse gro\u00dfe Scans, aber hier m\u00fcssen wir einige Aufzeichnungen abrufen. Auch ein Antipattern. <\/li>\n<li>Dar\u00fcber hinaus war die Transaktion im JSON-Format, aber wir wollten sie nicht umschreiben, daher wollten wir JSON unstrukturiert speichern, und wenn n\u00f6tig, etwas daraus extrahieren. Auch das ist ein Antipattern. <\/li>\n<\/ul>\n<p><\/p>\n<p>Das hei\u00dft, es handelt sich um eine Ansammlung von Antipatterns. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2473129a5880ee3172b8ab7bf4afc376.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Trotzdem gelang es uns, ein System zu schaffen, das sehr gut funktionierte. <\/p>\n<p><\/p>\n<p>Was wurde getan? ClickHouse wurde implementiert, in das die Protokolle, aufgespalten in Datens\u00e4tze, hineingepackt wurden. Es gab einen attribuierten Service, der die Protokolle aus ClickHouse abrief. Danach erhielt man f\u00fcr jeden Datensatz anhand der Besuchs-ID die Transaktionen, die m\u00f6glicherweise noch nicht verarbeitet waren, sowie Snapshots, also bereits verkn\u00fcpfte Transaktionen, also das Ergebnis der vorherigen Arbeit. Aus ihnen wurde die Logik erstellt, die richtige Transaktion ausgew\u00e4hlt und neue Ereignisse verbunden. Wieder in die Protokolle geschrieben. Die Protokolle gingen zur\u00fcck nach ClickHouse, das hei\u00dft, es ist ein st\u00e4ndig zyklisches System. Au\u00dferdem gingen sie in das DWH, um dort zu analysieren. <\/p>\n<p><\/p>\n<p>In dieser Form funktionierte es nicht besonders gut. Um es ClickHouse leichter zu machen, wenn eine Abfrage nach dem Besuchs-ID erfolgte, wurden diese Abfragen in Bl\u00f6cke von 1.000 bis 2.000 Besuchs-IDs gruppiert und f\u00fcr 1.000 bis 2.000 Personen wurden alle Transaktionen abgerufen. Und dann funktionierte das Ganze.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d920ce231e6e4b5fd5b27ab28f848aed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn man in ClickHouse hineinblickt, gibt es dort nur 3 Haupttabellen, die all dies verwalten. <\/p>\n<p><\/p>\n<p>Die erste Tabelle, in die die Logs geladen werden, wobei die Logs praktisch ohne Bearbeitung geladen werden.<\/p>\n<p><\/p>\n<p>Die zweite Tabelle. \u00dcber eine materialisierte Sicht wurden aus diesen Logs die noch nicht zugeordneten Events herausgefiltert, d. h. nicht miteinander verbundene. Und \u00fcber eine materialisierte Sicht wurden aus diesen Logs die Transaktionen abgerufen, um einen Snapshot zu erstellen. D. h. eine spezielle materialisierte Sicht stellt den Snapshot dar, genau genommen den letzten kumulierten Zustand der Transaktion. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/12b0adb691f483923a6c35bb6e4a5017.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier ist ein Text in SQL geschrieben. Ich m\u00f6chte darin einige wichtige Punkte kommentieren. <\/p>\n<p><\/p>\n<p>Der erste wichtige Punkt ist die M\u00f6glichkeit, in ClickHouse aus JSON Spalten, Felder herauszuziehen. D. h. ClickHouse hat einige Methoden zur Arbeit mit JSON. Diese sind sehr, sehr primitiv. <\/p>\n<p><\/p>\n<p>visitParamExtractInt erm\u00f6glicht es, Attribute aus JSON herauszuziehen, d. h. das erste Auftreten wird erfasst. So kann man die Transaktions-ID oder die Besuchs-ID herausziehen. Das ist Punkt eins. <\/p>\n<p><\/p>\n<p>Zweitens \u2013 hier wird ein cleveres materialisiertes Feld verwendet. Was bedeutet das? Das bedeutet, dass Sie es nicht in die Tabelle einf\u00fcgen k\u00f6nnen, d. h. es wird nicht eingef\u00fcgt, sondern berechnet und bei der Einf\u00fcgung gespeichert. Bei der Einf\u00fcgung \u00fcbernimmt ClickHouse die Arbeit f\u00fcr Sie. Und es wird aus JSON herausgezogen, was Sie sp\u00e4ter ben\u00f6tigen werden.<\/p>\n<p><\/p>\n<p>In diesem Fall ist die materialisierte Sicht f\u00fcr unbearbeitete Zeilen. Und es wird genau die erste Tabelle mit praktisch rohen Logs genutzt. Und was macht sie? Sie \u00e4ndert zuerst die Sortierung, d. h. die Sortierung erfolgt jetzt nach Besuchs-ID, da wir schnell die Transaktion einer bestimmten Person abfragen m\u00fcssen. <\/p>\n<p><\/p>\n<p>Der zweite wichtige Punkt ist die index_granularity. Wenn Sie MergeTree gesehen haben, steht die index_granularity normalerweise standardm\u00e4\u00dfig auf 8.192. Was ist das? Das ist ein Parameter der Indexpunktdichte. In ClickHouse ist der Index d\u00fcnn; er indiziert niemals jeden Datensatz. Das geschieht alle 8.192. Das ist gut, wenn viele Daten gez\u00e4hlt werden m\u00fcssen, aber schlecht, wenn nur wenige, weil es einen gro\u00dfen Overhead verursacht. Und wenn man die index granularity verringert, vermindert man den Overhead. Man kann sie jedoch nicht auf eins reduzieren, da es m\u00f6glicherweise an Speicher mangelt. Der Index wird immer im Speicher aufbewahrt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5fe303061977cad64e6c0333b125d595.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein Snapshot nutzt noch einige interessante Funktionen von ClickHouse.<\/p>\n<p><\/p>\n<p>Zuerst ist da der AggregatingMergeTree. Im AggregatingMergeTree wird argMax gespeichert, das hei\u00dft, es ist der Zustand der Transaktion, der dem letzten Zeitstempel entspricht. Transaktionen werden st\u00e4ndig neu generiert f\u00fcr diesen Besucher. Und in den allerneuesten Zustand dieser Transaktion haben wir ein Ereignis hinzugef\u00fcgt und haben einen neuen Zustand erhalten. Dieser geht wieder in ClickHouse. Und \u00fcber argMax in dieser materialisierten Ansicht k\u00f6nnen wir immer den aktuellen Zustand abrufen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d1b87301ab5206a36bf035679f79d35a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Die Bindung ist \"entkoppelt\" vom Runtime. <\/li>\n<li>Bis zu 3 Milliarden Transaktionen pro Monat werden gespeichert und verarbeitet. Das ist um ein Vielfaches mehr, als es bei Cassandra war, also in einem typischen Transaktionssystem. <\/li>\n<li>Cluster aus 2x5 ClickHouse-Servern. 5 Server, und jeder Server hat eine Replik. Das ist sogar weniger, als es bei Cassandra war, um eine Click-basierten Attribution zu machen, hier haben wir jedoch eine Impression-basierte. Das hei\u00dft, anstatt die Anzahl der Server um das 30-fache zu erh\u00f6hen, ist es gelungen, sie zu reduzieren. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/583779fe9e133df519411e2256401eb3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und das letzte Beispiel ist das Finanzunternehmen Y, das die Korrelationen der Ver\u00e4nderungen der Aktienkurse analysierte. <\/p>\n<p><\/p>\n<p>Die Aufgabe war folgende:<\/p>\n<p><\/p>\n<ul>\n<li>Es gibt etwa 5.000 Aktien. <\/li>\n<li>Die Kursdaten werden alle 100 Millisekunden bekannt. <\/li>\n<li>Die Daten haben sich \u00fcber 10 Jahre angesammelt. Offensichtlich haben einige Unternehmen mehr, andere weniger. <\/li>\n<li>Insgesamt etwa 100 Milliarden Zeilen. <\/li>\n<\/ul>\n<p><\/p>\n<p>Und es musste die Korrelation der \u00c4nderungen berechnet werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b02051e6cadec8c51e7f6e351ef903f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hier gibt es zwei Aktien und ihre Kurse. Wenn eine steigt und die andere auch steigt, dann ist das eine positive Korrelation, das hei\u00dft, wenn eine w\u00e4chst, w\u00e4chst die andere. Wenn eine steigt, wie am Ende des Diagramms, und die andere f\u00e4llt, dann ist das eine negative Korrelation, das hei\u00dft, wenn eine w\u00e4chst, sinkt die andere. <\/p>\n<p><\/p>\n<p>Durch die Analyse dieser wechselseitigen Ver\u00e4nderungen k\u00f6nnen Vorhersagen auf dem Finanzmarkt getroffen werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/31329cf7523eef6a167632d281a634ce.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aber die Aufgabe ist komplex. Was wird dazu gemacht? Wir haben 100 Milliarden Datens\u00e4tze, in denen Zeit, Aktie und Preis enthalten sind. Zuerst m\u00fcssen wir 100 Milliarden Mal den RunningDifference des Preisalgorithmus berechnen. Der RunningDifference ist eine Funktion in ClickHouse, die die Differenz zwischen zwei Zeilen sequenziell berechnet. <\/p>\n<p><\/p>\n<p>Nachdem das geschehen ist, muss die Korrelation berechnet werden, und zwar f\u00fcr jedes Paar. Bei 5.000 Aktien gibt es 12,5 Millionen Paare. Und das ist viel, das hei\u00dft, 12,5 Mal muss so eine Korrelationsfunktion berechnet werden. <\/p>\n<p><\/p>\n<p>Und falls jemand es vergessen hat, \u035ex und \u035ey sind die mathematischen Erwartungen der Stichprobe. Das hei\u00dft, man muss nicht nur die Wurzeln und Summen berechnen, sondern auch innerhalb dieser Summen weitere Summen. Eine Menge an Berechnungen muss 12,5 Millionen Mal durchgef\u00fchrt und zudem st\u00fcndlich gruppiert werden. Und die Stunden haben wir auch nicht gerade wenig. Und das alles muss in 60 Sekunden erledigt sein. Das ist ein Scherz. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/567a07f586a824c91671820fe21ec305.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es musste irgendwie schnell gehen, denn alles arbeitete sehr, sehr langsam, bevor ClickHouse kam.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3eca1af4c3f25ff4b23fce9b84e16659.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sie versuchten, das auf Hadoop, auf Spark, auf Greenplum zu berechnen. Und all das war sehr langsam oder teuer. Das hei\u00dft, man konnte es irgendwie berechnen, aber es war dann teuer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/37608c7e87ddb9a7d54854643044c369.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und dann kam ClickHouse und alles wurde viel besser. <\/p>\n<p><\/p>\n<p>Ich erinnere daran, dass wir ein Problem mit der Datenlokalit\u00e4t haben, daher k\u00f6nnen die Korrelationen nicht lokalisiert werden. Wir k\u00f6nnen einen Teil der Daten auf einen Server und einen anderen Teil auf einen anderen verschieben und nicht berechnen; wir m\u00fcssen alle Daten \u00fcberall haben. <\/p>\n<p><\/p>\n<p>Was haben sie gemacht? Zun\u00e4chst einmal sind die Daten lokalisiert. Auf jedem der Server werden die Daten zur Preisgestaltung eines bestimmten Aktiensets gespeichert. Und sie \u00fcberschneiden sich nicht. Daher kann logReturn parallel und unabh\u00e4ngig berechnet werden. Das geschieht alles parallel und verteilt. <\/p>\n<p><\/p>\n<p>Dann beschlossen sie, diese Daten zu reduzieren, ohne dabei Ausdruckskraft zu verlieren. Sie sollten durch Arrays reduziert werden, d.h. f\u00fcr jeden Zeitabschnitt ein Array von Aktien und ein Array von Preisen erstellen. Auf diese Weise nehmen die Daten viel weniger Platz ein. Und es ist etwas einfacher, mit ihnen zu arbeiten. Es sind fast parallele Operationen, d.h. wir berechnen teilweise parallel und schreiben dann auf den Server. <\/p>\n<p><\/p>\n<p>Danach k\u00f6nnen sie repliziert werden. Der Buchstabe \u201er\u201c bedeutet, dass diese Daten repliziert wurden. Das hei\u00dft, wir haben auf allen drei Servern dieselben Daten \u2013 diese Arrays. <\/p>\n<p><\/p>\n<p>Und dann kann man mit einem speziellen Skript aus diesem Satz von 12,5 Millionen Korrelationen, die berechnet werden m\u00fcssen, Pakete erstellen. Das hei\u00dft, 2.500 Aufgaben mit 5.000 Paar Korrelationen. Und diese Aufgaben k\u00f6nnen auf einem bestimmten ClickHouse-Server berechnet werden. Alle Daten sind vorhanden, da die Daten identisch sind und er sie nacheinander berechnen kann. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/587c6d587a48f2407dd2687f5423d44a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Noch einmal, wie das aussieht. Zun\u00e4chst haben wir alle Daten in dieser Struktur: Zeit, Aktien, Preis. Dann haben wir den logReturn berechnet, d. h. Daten in derselben Struktur, nur anstelle des Preises haben wir jetzt den logReturn. Danach haben wir sie umstrukturiert, d. h. wir haben Zeit und groupArray nach Aktien und Preisen erhalten. Wir haben sie repliziert. Und danach haben wir eine Menge Aufgaben generiert und ClickHouse verf\u00fcttert, damit er sie berechnet. Und das funktioniert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/434e7385aebcffcc03d1bd1a2020c8bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Beim Proof of Concept war die Aufgabe eine Unteraufgabe, d. h. wir haben weniger Daten verwendet. Und das auf drei Servern.<\/p>\n<p><\/p>\n<p>Die ersten beiden Phasen: Berechnung des Log_return und das Umwickeln in Arrays dauerte jeweils etwa eine Stunde. <\/p>\n<p><\/p>\n<p>Die Berechnung der Korrelation dauerte etwa 50 Stunden. Aber 50 Stunden sind wenig, denn fr\u00fcher hat das Wochen gebraucht. Das war ein gro\u00dfer Erfolg. Und wenn man es berechnet, wurde in diesem Cluster 70 Mal pro Sekunde alles gerechnet.<\/p>\n<p><\/p>\n<p>Aber das Wichtigste ist, dass dieses System praktisch ohne Engp\u00e4sse funktioniert, d. h. es ist nahezu linear skalierbar. Und das haben sie \u00fcberpr\u00fcft. Sie haben es erfolgreich skaliert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5a595a84897e492b49dccfb0f058b1b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Das richtige Schema ist die halbe Miete. Und das richtige Schema ist die Nutzung aller notwendigen Technologien von ClickHouse. <\/li>\n<li>Summing\/AggregatingMergeTrees sind Technologien, die es erm\u00f6glichen, zu aggregieren oder den Snapshots-Zustand als Sonderfall zu berechnen. Und das vereinfacht vieles erheblich. <\/li>\n<li>Materialisierte Ansichten erm\u00f6glichen es, die Einschr\u00e4nkung auf einen Index zu umgehen. Vielleicht habe ich das nicht ganz klar erkl\u00e4rt, aber als wir die Logs geladen haben, waren die Rohlogs in einer Tabelle mit einem Index, w\u00e4hrend die Attribut-Logs in einer anderen Tabelle waren, d. h. dieselben Daten, nur gefiltert, aber der Index war v\u00f6llig anders. Es sind zwar die gleichen Daten, aber eine andere Sortierung. Und materialisierte Ansichten erlauben es, wenn Sie das m\u00f6chten, eine solche Einschr\u00e4nkung von ClickHouse zu umgehen. <\/li>\n<li>Verringern Sie die Granularit\u00e4t des Index f\u00fcr punktuelle Abfragen. <\/li>\n<li>Und verteilen Sie die Daten intelligent, versuchen Sie, die Daten innerhalb des Servers maximal zu lokalisieren. Und streben Sie an, dass auch die Abfragen dort, wo es m\u00f6glich ist, eine maximale Lokalisierung nutzen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c0fc1737986e3f18ed1d3c53df9f0252.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zusammenfassend l\u00e4sst sich sagen, dass ClickHouse inzwischen sowohl im Bereich kommerzieller Datenbanken als auch bei Open-Source-Datenbanken, d. h. insbesondere f\u00fcr Analysen, fest etabliert ist. Er hat sich hervorragend in diese Landschaft integriert. Dar\u00fcber hinaus beginnt er schrittweise, andere abzudr\u00e4ngen, denn wenn Sie ClickHouse haben, ben\u00f6tigen Sie InfiniDB nicht mehr. Veritik k\u00f6nnte bald ebenfalls nicht mehr ben\u00f6tigt werden, wenn sie eine ordentliche SQL-Unterst\u00fctzung bieten. Nutzen Sie es!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6e9a65d32eb6de7f9f139a30e7ab0d25.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u2014<em>Vielen Dank f\u00fcr den Vortrag! Sehr interessant! Gab es Vergleiche mit Apache Phoenix?<\/em><\/p>\n<p><\/p>\n<p>-Nein, ich habe nicht geh\u00f6rt, dass jemand einen Vergleich gezogen hat. Wir und Yandex versuchen, alle Vergleiche von ClickHouse mit verschiedenen Datenbanken zu verfolgen. Denn wenn etwas schneller als ClickHouse ist, kann Alexey Milovidov nachts nicht schlafen und beginnt, es schnell zu beschleunigen. Ich habe von einem solchen Vergleich nichts geh\u00f6rt. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>(Alexey Milovidov) Apache Phoenix ist eine SQL-Engine auf HBase. HBase ist haupts\u00e4chlich f\u00fcr Szenarien mit key-value-Betrieb gedacht. In jeder Zeile kann es eine beliebige Anzahl von Spalten mit beliebigen Namen geben. Das kann man auch von Systemen wie HBase, Cassandra sagen. Und auf diesen wird es schwierig sein, mit schweren analytischen Abfragen normal zu arbeiten. Oder man k\u00f6nnte glauben, dass sie normal funktionieren, wenn man keine Erfahrung mit ClickHouse hat.<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Danke<\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>Guten Tag! Ich interessiere mich schon eine ganze Weile f\u00fcr dieses Thema, weil ich ein analytisches Teilsystem habe. Aber wenn ich auf ClickHouse schaue, habe ich das Gef\u00fchl, dass ClickHouse sehr gut f\u00fcr die Analyse von Events und Mutable geeignet ist. Und wenn ich viele Gesch\u00e4ftsdaten mit einer Menge gro\u00dfer Tabellen analysieren muss, dann ist ClickHouse, soweit ich verstehe, nicht wirklich geeignet f\u00fcr mich? Besonders, wenn sie sich ver\u00e4ndern. Ist das korrekt oder gibt es Beispiele, die das widerlegen k\u00f6nnen?<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Das ist richtig. Und es stimmt f\u00fcr die meisten spezialisierten analytischen Datenbanken. Sie sind darauf optimiert, dass es eine oder mehrere gro\u00dfe, ver\u00e4nderbare Tabellen gibt und viele kleine, die sich langsam \u00e4ndern. Das hei\u00dft, ClickHouse ist nicht wie Oracle, wo man alles ablegen und sehr komplexe Abfragen erstellen kann. Um ClickHouse effektiv zu nutzen, sollte man das Schema in einer Weise aufbauen, die in ClickHouse gut funktioniert. Das bedeutet, \u00fcberm\u00e4\u00dfige Normalisierung zu vermeiden, W\u00f6rterb\u00fccher zu verwenden und zu versuchen, weniger lange Verkn\u00fcpfungen zu machen. Wenn das Schema auf diese Weise aufgebaut wird, k\u00f6nnen \u00e4hnliche Gesch\u00e4ftsanforderungen in ClickHouse viel effizienter gel\u00f6st werden als in einer traditionellen relationalen Datenbank. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Vielen Dank f\u00fcr den Vortrag! Ich habe eine Frage zu dem letzten finanziellen Fall. Sie hatten eine Analyse. Es musste verglichen werden, wie es auf und ab geht. Und ich verstehe, dass Sie das System genau f\u00fcr diese Analyse eingerichtet haben? Wenn sie morgen beispielsweise einen anderen Bericht \u00fcber diese Daten ben\u00f6tigen, muss das Schema dann neu aufgebaut und die Daten erneut geladen werden? Das hei\u00dft, es muss eine Vorverarbeitung gemacht werden, um die Anfrage zu erhalten?<\/em><\/p>\n<p><\/p>\n<p>Nat\u00fcrlich ist das die Nutzung von ClickHouse f\u00fcr eine ganz konkrete Aufgabe. Diese k\u00f6nnte traditionell im Rahmen von Hadoop gel\u00f6st werden. F\u00fcr Hadoop ist das eine ideale Aufgabe. Aber bei Hadoop ist es sehr langsam. Mein Ziel ist es, zu demonstrieren, dass man mit ClickHouse Aufgaben l\u00f6sen kann, die normalerweise mit v\u00f6llig anderen Mitteln gel\u00f6st werden, wobei es dabei viel effizienter geht. Es ist f\u00fcr eine konkrete Aufgabe optimiert. Es ist klar, dass man eine \u00e4hnliche Aufgabenstellung auf \u00e4hnliche Weise l\u00f6sen kann. <\/p>\n<p><\/p>\n<p><em>Verstehe. Sie sagten, dass es 50 Stunden gedauert hat. F\u00e4ngt das von Anfang an an, wenn man die Daten geladen hat, oder geht es um die Erzielung der Ergebnisse?<\/em><\/p>\n<p><\/p>\n<p>Ja, ja.<\/p>\n<p><\/p>\n<p><em>Gut, vielen Dank.<\/em><\/p>\n<p><\/p>\n<p>Das l\u00e4uft auf einem 3-Server-Cluster. <\/p>\n<p><\/p>\n<p><em>Hallo! Vielen Dank f\u00fcr den Vortrag! Das ist alles sehr interessant. Ich m\u00f6chte nicht \u00fcber die Funktionalit\u00e4t fragen, sondern \u00fcber die Verwendung von ClickHouse in Bezug auf die Stabilit\u00e4t. Gab es bei Ihnen irgendwelche Vorf\u00e4lle, bei denen Sie wiederherstellen mussten? Wie verh\u00e4lt sich ClickHouse dabei? Und kam es vor, dass auch Ihre Replikation ausgefallen ist? Wir sind bei ClickHouse beispielsweise auf das Problem gesto\u00dfen, dass es letztendlich seine Grenze \u00fcberschreitet und abst\u00fcrzt.<\/em><\/p>\n<p><\/p>\n<p>Nat\u00fcrlich gibt es keine perfekten Systeme. Auch ClickHouse hat seine eigenen Probleme. Aber haben Sie jemals geh\u00f6rt, dass Yandex.Metrica l\u00e4nger nicht funktioniert hat? Vermutlich nicht. Sie funktioniert seit etwa 2012-2013 zuverl\u00e4ssig mit ClickHouse. Auch \u00fcber meine Erfahrungen kann ich sagen, dass wir nie vollst\u00e4ndige Ausf\u00e4lle hatten. Einige partielle Probleme konnten auftreten, aber sie waren nie kritisch genug, um das Gesch\u00e4ft ernsthaft zu beeintr\u00e4chtigen. So etwas gab es nie. ClickHouse ist ziemlich zuverl\u00e4ssig und st\u00fcrzt nicht willk\u00fcrlich ab. Dar\u00fcber kann man sich keine Gedanken machen. Es ist kein unausgerechtes Produkt. Viele Unternehmen haben dies bewiesen. <\/p>\n<p><\/p>\n<p><em>Hallo! Sie sagten, dass man das Datenschema gleich gut durchdenken muss. Und was passiert, wenn das nicht der Fall ist? Bei mir flie\u00dfen die Daten und flie\u00dfen. Nach sechs Monaten merke ich, dass ich so nicht weitermachen kann, ich muss die Daten neu hochladen und etwas damit machen.<\/em> <\/p>\n<p><\/p>\n<p>Das h\u00e4ngt nat\u00fcrlich von Ihrem System ab. Es gibt mehrere M\u00f6glichkeiten, dies praktisch ohne Unterbrechung zu tun. Zum Beispiel k\u00f6nnen Sie eine Materialisierte Sicht erstellen, in der Sie eine andere Datenstruktur machen, wenn diese eindeutig abgebildet werden kann. D. h. wenn sie mithilfe von ClickHouse abgebildet werden kann, also einige Dinge extrahiert, den Prim\u00e4rschl\u00fcssel ge\u00e4ndert und die Partitionierung ver\u00e4ndert werden kann, dann k\u00f6nnen Sie eine Materialisierte Sicht erstellen. Dort k\u00f6nnen Sie Ihre alten Daten umschreiben, neue werden automatisch geschrieben. Und dann einfach auf die Nutzung der Materialisierten Sicht umschalten, danach die Schreibweise umschalten und die alte Tabelle l\u00f6schen. Das ist eine M\u00f6glichkeit, das ganz ohne Unterbrechung zu tun. <\/p>\n<p><\/p>\n<p><em>Danke.<\/em><\/p>\n<p>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Theorie und Praxis der Verwendung von ClickHouse in realen Anwendungen. Alexander Zaitsev (2018) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/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":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/89878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=89878"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/89878\/revisions"}],"predecessor-version":[{"id":162171,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/89878\/revisions\/162171"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/89879"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=89878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=89878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=89878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}