{"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 Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 heutzutage fast \u00fcberall viele Daten gibt, sind analytische Datenbanken nach wie vor ziemlich exotisch. Sie sind wenig bekannt und noch schlechter im effektiven Einsatz. Viele verwenden weiterhin &quot;essen den Kaktus&quot; mit 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 die Einstiegsh\u00fcrde in die Welt der analytischen DBMS erheblich.<\/p>\n<p><\/p>\n<p>Der Vortrag von der BackEnd Conf 2018 ist ver\u00f6ffentlicht worden mit Genehmigung des Referenten.<\/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 Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6c55b639d9703f460d99e0b0b1194507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWer bin ich und warum spreche ich \u00fcber ClickHouse? Ich bin der Entwicklungsleiter bei LifeStreet, einem Unternehmen, das ClickHouse einsetzt. Au\u00dferdem bin ich der Gr\u00fcnder von Altinity. Das ist ein Partner von Yandex, der ClickHouse f\u00f6rdert und hilft, ClickHouse erfolgreicher zu machen. Ich freue mich auch, mein Wissen \u00fcber ClickHouse zu teilen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 der Bruder von Petja Zajtsev. Das wird mich oft gefragt. Nein, wir sind keine Br\u00fcder.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6ca605f97619a1373bb8a92f88d480d5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u201eJeder wei\u00df\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>Etwas weniger bekannt ist, in welchen Unternehmen und wie es eingesetzt wird. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 neben Yandex verwendet wird. <\/p>\n<p><\/p>\n<p>Ich werde erkl\u00e4ren, wie spezifische Aufgaben bei verschiedenen Unternehmen mit ClickHouse gel\u00f6st werden, welche Werkzeuge ClickHouse Sie f\u00fcr Ihre Anforderungen nutzen k\u00f6nnen und wie sie in unterschiedlichen 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 Nutzung von ClickHouse in echten 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 lautet: \u201eWarum ben\u00f6tigen Sie ClickHouse?\u201c. Es scheint eine recht offensichtliche Frage zu sein, aber die Antworten darauf sind zahlreich. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 ist \u2013 aufgrund der Leistung. ClickHouse ist sehr schnell. Analysen mit ClickHouse sind ebenfalls sehr z\u00fcgig. Oft kann es dort eingesetzt werden, wo andere L\u00f6sungen sehr langsam oder ineffizient arbeiten. <\/li>\n<li>Die zweite Antwort betrifft die Kosten. Insbesondere die Kosten f\u00fcr das Skalieren. Zum Beispiel ist Vertica eine ausgezeichnete Datenbank. Sie funktioniert sehr gut, wenn Sie nicht allzu viele Terabyte Daten haben. Doch wenn es um Hunderte von Terabyte oder sogar Petabyte geht, steigen die Lizenz- und Supportkosten erheblich. Das kann teuer werden. ClickHouse hingegen ist kostenlos. <\/li>\n<li>Die dritte Antwort betrifft die Betriebskosten. Dies ist ein etwas anderer Ansatz. RedShift ist eine hervorragende Alternative. Mit RedShift lassen sich sehr schnell L\u00f6sungen erstellen. Diese werden gut funktionieren, jedoch m\u00fcssen Sie st\u00fcndlich, t\u00e4glich und monatlich erhebliche Geb\u00fchren an Amazon zahlen, da dieser Service recht kostspielig ist. Das gilt auch f\u00fcr Google BigQuery. Wer es genutzt hat, wei\u00df, dass man dort mehrere Abfragen starten und pl\u00f6tzlich Rechnungen in H\u00f6he von mehreren Hundert Dollar erhalten kann. <\/li>\n<\/ul>\n<p><\/p>\n<p>Diese Probleme gibt es bei ClickHouse nicht. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 aktuell eingesetzt? Neben Yandex wird ClickHouse in vielen verschiedenen Unternehmen eingesetzt. <\/p>\n<p><\/p>\n<ul>\n<li>In erster Linie geht es um die Analyse von Webanwendungen, d. h. um einen 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 nutzen, d. h. allm\u00e4hlich wenden sich auch gr\u00f6\u00dfere Unternehmen ClickHouse zu. <\/li>\n<li>CloudFlare. Wer ClickHouse verfolgt, hat sicherlich den Namen dieses Unternehmens geh\u00f6rt. Es ist einer der bedeutendsten Mitwirkenden aus der Community. Zudem haben sie eine sehr umfangreiche ClickHouse-Installation. Zum Beispiel haben sie die Kafka-Engine f\u00fcr ClickHouse entwickelt. <\/li>\n<li>Telekommunikationsunternehmen haben begonnen, ClickHouse zu nutzen. Einige Firmen verwenden ClickHouse entweder als Proof of Concept oder bereits in der Produktionsumgebung.<\/li>\n<li>Ein Unternehmen nutzt ClickHouse zur \u00dcberwachung von Produktionsprozessen. Sie testen Chips, erfassen zahlreiche Parameter, insgesamt etwa 2.000 Merkmale. Anschlie\u00dfend analysieren sie, ob es sich um eine gute oder schlechte Charge handelt.<\/li>\n<li>Blockchain-Analytik. Es gibt ein russisches Unternehmen namens Bloxy.info, das die Ethereum-Blockchain analysiert. Auch das haben sie mit ClickHouse realisiert. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/8a0c1924a20ed2d15cd0f959e9b3e499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dabei spielt die Gr\u00f6\u00dfe keine Rolle. Viele Unternehmen nutzen lediglich einen kleinen Server, der ihnen hilft, ihre Probleme zu l\u00f6sen. Und noch mehr Unternehmen verwenden 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 sogar Dutzenden von Servern. <\/p>\n<p><\/p>\n<p>Und wenn wir uns die Rekorde ansehen:<\/p>\n<p><\/p>\n<ul>\n<li>Yandex: \u00fcber 500 Server, die t\u00e4glich 25 Milliarden Datens\u00e4tze speichern.<\/li>\n<li>LifeStreet: 60 Server, etwa 75 Milliarden Datens\u00e4tze pro Tag. Weniger Server, aber mehr Datens\u00e4tze als bei Yandex. <\/li>\n<li>CloudFlare: 36 Server, sie speichern 200 Milliarden Datens\u00e4tze pro Tag. Sie haben 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 Datens\u00e4tze pro Tag. Rekordhalter in der Datenspeicherung.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 ist das ebenfalls viel. Diese Karte zeigt die Heatmap, wo ClickHouse weltweit genutzt wird. Russland, China und Amerika heben sich deutlich hervor. Wenige europ\u00e4ische L\u00e4nder sind zu sehen. Es lassen sich vier Cluster identifizieren.<\/p>\n<p><\/p>\n<p>Dies ist eine vergleichende Analyse, hier m\u00fcssen keine absoluten Zahlen gesucht werden. Es handelt sich um die Analyse von Besuchern, die englischsprachige Inhalte auf der Altinity-Website lesen, da es dort keine russischsprachigen Inhalte gibt. Die russischsprachigen Nutzer aus Russland, der Ukraine und Wei\u00dfrussland geh\u00f6ren zu den zahlreichsten. Anschlie\u00dfend folgen die USA und Kanada. China holt sehr stark auf. Vor einem halben Jahr war China fast nicht vertreten, jetzt hat China Europa bereits \u00fcberholt und w\u00e4chst weiter. Auch das alte Europa bleibt nicht zur\u00fcck, wobei Frankreich \u00fcberraschenderweise der f\u00fchrende Nutzer von ClickHouse ist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 zu einer Standardl\u00f6sung f\u00fcr die Analyse gro\u00dfer Datenmengen wird und bereits an vielen Orten eingesetzt wird.<\/strong> Wenn Sie es verwenden, sind Sie auf dem richtigen Weg. Wenn Sie es noch nicht verwenden, brauchen Sie sich keine Sorgen machen, dass Sie allein bleiben und niemand Ihnen hilft, denn bereits viele Unternehmen nutzen es.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6aa635f3a35034d3af837c78b2c8fe60.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Das sind Beispiele f\u00fcr die tats\u00e4chliche Nutzung von ClickHouse in verschiedenen Unternehmen. <\/p>\n<p><\/p>\n<ul>\n<li>Das erste Beispiel ist ein Werbenetzwerk: Der Umstieg von Vertica auf ClickHouse. Ich kenne mehrere Unternehmen, die von Vertica gewechselt sind oder sich im Wechselprozess befinden. <\/li>\n<li>Das zweite Beispiel ist ein transaktionales Lager auf ClickHouse. Dieses Beispiel basiert auf Anti-Pattern. Alles, was man in ClickHouse laut den Entwicklern vermeiden sollte, wurde hier umgesetzt. Und trotzdem ist es so effektiv, dass es funktioniert \u2013 und zwar viel besser als eine typische transaktionale L\u00f6sung. <\/li>\n<li>Das dritte Beispiel sind verteilte Berechnungen auf ClickHouse. Es gab Fragen dazu, wie man ClickHouse in das Hadoop-\u00d6kosystem integrieren kann. Ich werde ein Beispiel zeigen, wie ein Unternehmen auf ClickHouse eine Art Map-Reduce-Container erstellt hat, wobei die Datenlokalisierung usw. beachtet wurde, um eine sehr komplexe Aufgabe zu l\u00f6sen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 Ein Ad-Tech-Unternehmen, das \u00fcber alle Technologien verf\u00fcgt, die f\u00fcr ein Werbenetzwerk erforderlich sind. <\/li>\n<li>Sie besch\u00e4ftigt sich mit der Optimierung von Anzeigen und programmatic Bidding. <\/li>\n<li>Es fallen viele Daten an: etwa 10 Milliarden Ereignisse pro Tag. Dabei k\u00f6nnen diese Ereignisse in mehrere Unterereignisse aufgeteilt werden.<\/li>\n<li>Es gibt viele Kunden f\u00fcr diese Daten, und es sind nicht nur Menschen, sondern in viel gr\u00f6\u00dferem Ma\u00dfe verschiedene Algorithmen, die mit programmatic Bidding arbeiten. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 m\u00fchsamen Weg hinter sich. Ich habe dar\u00fcber auf der HighLoad gesprochen. Zuerst wechselte LifeStreet von MySQL (mit einem kurzen Intermezzo bei Oracle) zu Vertica. Dazu gibt es auch einen Erfahrungsbericht. <\/p>\n<p><\/p>\n<p>Und alles lief sehr gut, doch schnell wurde klar, dass die Daten wachsen und Vertica teuer ist. Daher wurden verschiedene Alternativen gesucht. Einige davon sind hier aufgef\u00fchrt. Tats\u00e4chlich haben wir Proof of Concept oder manchmal Performance-Tests f\u00fcr fast alle Datenbanken durchgef\u00fchrt, die von 2013 bis 2016 auf dem Markt erh\u00e4ltlich waren und in etwa funktional passten. \u00dcber einen Teil von ihnen habe ich auch auf der HighLoad gesprochen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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, zun\u00e4chst von Vertica zu migrieren, da die Datenmengen stetig wuchsen. Sie wuchsen \u00fcber mehrere Jahre exponentiell. Danach kamen sie zwar ins Stocken, dennoch war das Wachstum klar abzusehen. Mit der Prognose dieses Wachstums und den gesch\u00e4ftlichen Anforderungen an die Datenmenge f\u00fcr Analysen war abzusehen, dass bald das Thema Petabytes zur Sprache kommen w\u00fcrde. F\u00fcr Petabytes zu zahlen ist jedoch sehr teuer, weshalb nach einer Alternative gesucht wurde. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 gehen? Lange Zeit war nicht klar, wohin die Reise gehen sollte, denn einerseits gibt es kommerzielle Datenbanken, die scheinbar gut funktionieren. Einige arbeiten fast so gut wie Vertica, andere weniger gut. Aber sie sind alle teuer, und etwas Besseres und G\u00fcnstigeres zu finden, war nicht m\u00f6glich. <\/p>\n<p><\/p>\n<p>Andererseits gibt es Open-Source-L\u00f6sungen, von denen es nicht viele gibt. F\u00fcr analytische Zwecke kann man sie an einer Hand abz\u00e4hlen. Sie sind kostenlos oder g\u00fcnstig, aber sie arbeiten langsam. Oft fehlt es ihnen an der notwendigen und n\u00fctzlichen Funktionalit\u00e4t.<\/p>\n<p><\/p>\n<p>Um die guten Eigenschaften kommerzieller Datenbanken mit den kostenlosen Funktionen von Open Source zu kombinieren, gab es bisher keine Option. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/abbefbf0d9578b554f81579b87213a50.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bis zu diesem Moment war alles ruhig, bis Yandex pl\u00f6tzlich ClickHouse wie ein Zauberer aus dem Hut zauberte. Es war eine \u00fcberraschende L\u00f6sung, und man fragt sich bis heute: \u201eWarum?\u201c Dennoch. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c88981aace9d5925396ca5171241b7d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Im Sommer 2016 begannen wir sofort zu erkunden, was ClickHouse eigentlich ist. Dabei stellte sich heraus, dass es manchmal schneller ist als Vertica. Wir testeten verschiedene Szenarien mit unterschiedlichen Anfragen. Wenn die Anfrage nur eine Tabelle verwendete, also ohne Joins, war ClickHouse zweimal schneller als Vertica. <\/p>\n<p><\/p>\n<p>Ich habe nicht gescheut und mir k\u00fcrzlich auch die Tests von Yandex angeschaut. Das gleiche Ergebnis: ClickHouse ist doppelt so schnell wie Vertica, weshalb sie oft dar\u00fcber sprechen. <\/p>\n<p><\/p>\n<p>Wenn jedoch Joins in den Anfragen verwendet werden, ist die Situation nicht ganz klar. Dann kann ClickHouse bis zu zweimal langsamer als Vertica sein. Wenn man die Anfrage leicht anpasst und umschreibt, sind die Ergebnisse etwa gleich. Ganz ordentlich. Und kostenlos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 aus verschiedenen Perspektiven darauf geschaut hatten, hat LifeStreet auf ClickHouse umgestellt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 war 2016, ich erinnere daran. Es war wie der Witz \u00fcber die M\u00e4use, die weinten und sich stachen, aber trotzdem den Kaktus weiter a\u00dfen. Dar\u00fcber wurde ausf\u00fchrlich berichtet, es gibt ein Video dazu usw. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/993052ed83dc295c3777e614c7703456.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Daher werde ich nicht ins Detail gehen, sondern nur die Ergebnisse und einige interessante Aspekte vorstellen, die ich damals nicht erw\u00e4hnt habe. <\/p>\n<p><\/p>\n<p>Die Ergebnisse sind:<\/p>\n<p><\/p>\n<ul>\n<li>Erfolgreiche Migration und das System l\u00e4uft nun seit \u00fcber einem Jahr produktiv. <\/li>\n<li>Die Leistung und Flexibilit\u00e4t haben zugenommen. W\u00e4hrend wir anfangs 10 Milliarden Datens\u00e4tze pro Tag speichern konnten, verwaltet LifeStreet jetzt 75 Milliarden Datens\u00e4tze pro Tag und kann dies \u00fcber einen Zeitraum von 3 Monaten und mehr tun. In Spitzenzeiten werden bis zu eine Million Ereignisse pro Sekunde aufgezeichnet. T\u00e4glich erreichen mehr als eine Million SQL-Anfragen dieses System, haupts\u00e4chlich von verschiedenen Bots. <\/li>\n<li>Obwohl ClickHouse mehr Server verwendet als Vertica, ergaben sich Kosteneinsparungen bei der Hardware, da Vertica teure SAS-Festplatten nutzte. Bei ClickHouse wurden SATA-Festplatten verwendet. Warum? Weil der Insert in Vertica synchron ist. Die Synchronisierung erfordert, dass die Festplatten nicht zu langsam sind und das Netzwerk ebenfalls, was zu hohen Betriebskosten f\u00fchrt. Bei ClickHouse hingegen ist der Insert asynchron. Dar\u00fcber hinaus k\u00f6nnen die Daten lokal ohne zus\u00e4tzliche Kosten geschrieben werden, weshalb Daten in ClickHouse viel schneller eingef\u00fcgt werden k\u00f6nnen als in Vertica, selbst auf weniger schnellen Festplatten. Bei der Lesegeschwindigkeit sind sie ungef\u00e4hr gleich. Das Lesen von SATA-Festplatten, wenn sie im RAID betrieben werden, erfolgt ebenfalls recht schnell. <\/li>\n<li>Keine Lizenzbeschr\u00e4nkungen, d. h. bis zu 3 Petabyte Daten auf 60 Servern (20 Server sind eine Replik). 6 Billionen Datens\u00e4tze in Fakten und Aggregaten sind ebenfalls m\u00f6glich. So etwas konnten wir uns bei Vertica nicht leisten. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 praktischen Aspekten in diesem Beispiel.<\/p>\n<p><\/p>\n<ul>\n<li>Erstens \u2013 das effiziente Schema. Von dem Schema h\u00e4ngt sehr viel ab. <\/li>\n<li>Zweitens \u2013 die Generierung effizienter SQL-Abfragen.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e7dc2a217e77c8794ff6e8a754e78c85.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein typischer OLAP-Abfrage ist ein SELECT. Einige Spalten kommen in die GROUP BY-Klausel, andere in aggregierte Funktionen. Es gibt eine WHERE-Klausel, die man sich als einen Ausschnitt des W\u00fcrfels vorstellen kann. Die gesamte GROUP BY-Klausel kann als Projektion angesehen werden. Das wird als multidimensionale Datenanalyse bezeichnet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a03a2d7fd28905ae83183346f0c673e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4ufig wird dies in Form eines Star-Schemas modelliert, wobei ein zentraler Fakt und die Merkmale dieses Faktors an den Seiten, entlang der Strahlen, dargestellt werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d9671af4b39cc83e1ae49e6fd75d0e02.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In Bezug auf das physische Design, wie es auf eine Tabelle angewendet wird, wird normalerweise eine normalisierte Darstellung verwendet. Man kann sie denormalisieren, aber das ist diskplatzintensiv und nicht besonders effizient in Bezug auf Abfragen. Daher wird in der Regel eine normalisierte Darstellung erstellt, d. h. eine Faktentabelle und 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 \u2013 weil ClickHouse nicht besonders gute Joins bietet, d. h. Joins sind vorhanden, aber sie sind schlecht. Bisher schlecht. <\/li>\n<li>Zweitens \u2013 weil die Tabellen nicht aktualisiert werden. In der Regel m\u00fcssen in diesen Tabellen, die um das Star-Schema herum angeordnet sind, \u00c4nderungen vorgenommen werden. Zum Beispiel der Name des Kunden, der Name des Unternehmens usw. Und das funktioniert nicht. <\/li>\n<\/ul>\n<p><\/p>\n<p>Es gibt jedoch einen Ausweg in ClickHouse, sogar gleich zwei: <\/p>\n<p><\/p>\n<ul>\n<li>Der erste Punkt ist die Verwendung von W\u00f6rterb\u00fcchern. Externe W\u00f6rterb\u00fccher helfen zu 99 %, das Problem mit der Star-Schema, Updates und anderem zu l\u00f6sen. <\/li>\n<li>Der zweite Punkt ist die Nutzung von Arrays. Arrays helfen ebenfalls, Joins zu vermeiden und Probleme mit der Normalisierung zu beseitigen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 werden nicht ben\u00f6tigt. <\/li>\n<li>Aktualisierbar. Seit M\u00e4rz 2018 gibt es eine undocumented M\u00f6glichkeit (die Sie in der Dokumentation nicht finden werden), um W\u00f6rterb\u00fccher teilweise zu aktualisieren, d. h. die Eintr\u00e4ge, die sich ge\u00e4ndert haben. Praktisch betrachtet ist es wie bei einer Tabelle.<\/li>\n<li>Immer im Speicher, sodass Joins mit dem W\u00f6rterbuch schneller arbeiten als bei einer Tabelle, die auf der Festplatte liegt und m\u00f6glicherweise nicht im Cache ist, was h\u00f6chstwahrscheinlich der Fall ist. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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>Auch Joins sind nicht n\u00f6tig.<\/li>\n<li>Dies ist eine kompakte Darstellung von Eins zu Viele. <\/li>\n<li>Meiner Meinung nach sind Arrays f\u00fcr Geeks gemacht. Es handelt sich um Lambda-Funktionen und \u00c4hnliches. <\/li>\n<\/ul>\n<p><\/p>\n<p>Das ist nicht nur Geschw\u00e4tz. Es handelt sich um eine sehr leistungsstarke Funktionalit\u00e4t, die es erm\u00f6glicht, viele Dinge sehr einfach und elegant zu tun. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 durch Arrays gel\u00f6st werden k\u00f6nnen. Diese Beispiele sind einfach und sehr anschaulich:<\/p>\n<p><\/p>\n<ul>\n<li>Suche nach Tags. Wenn Sie dort Hashtags haben und Sie m\u00f6chten Eintr\u00e4ge nach einem Hashtag finden. <\/li>\n<li>Suche nach key-value-Paaren. Es gibt auch einige Attribute mit Werten. <\/li>\n<li>Speicherung von Schl\u00fcssellisten, die Sie in etwas anderes \u00fcbersetzen m\u00fcssen.<\/li>\n<\/ul>\n<p><\/p>\n<p>All diese Aufgaben k\u00f6nnen ohne Arrays gel\u00f6st werden. Tags k\u00f6nnen in eine Zeile gepackt und mit regul\u00e4ren Ausdr\u00fccken ausgew\u00e4hlt oder in eine separate Tabelle eingef\u00fcgt werden, aber dann m\u00fcssen Joins durchgef\u00fchrt werden.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 ist das nicht n\u00f6tig, man muss lediglich ein String-Array f\u00fcr Hashtags beschreiben oder eine verschachtelte Struktur f\u00fcr key-value-\u00e4hnliche Systeme erstellen.<\/p>\n<p><\/p>\n<p>Verschachtelte Struktur ist vielleicht nicht der beste Begriff. Es handelt sich um zwei Arrays, die einen gemeinsamen Teil im Namen haben und einige verwandte Eigenschaften. <\/p>\n<p><\/p>\n<p>Die Suche nach Tags ist sehr einfach. Es gibt eine Funktion <code>has<\/code>, die \u00fcberpr\u00fcft, ob ein Element im Array vorhanden ist. Damit finden wir alle Eintr\u00e4ge, die zu unserer Konferenz geh\u00f6ren.<\/p>\n<p><\/p>\n<p>Die Suche nach subid ist etwas komplizierter. Zuerst m\u00fcssen wir den Index des Schl\u00fcssels finden und dann das Element mit diesem Index abrufen und \u00fcberpr\u00fcfen, ob der Wert dem entspricht, was wir brauchen. Aber dennoch ist es sehr einfach und kompakt.<\/p>\n<p><\/p>\n<p>Ein regul\u00e4rer Ausdruck, den Sie schreiben w\u00fcrden, wenn Sie alles in einer Zeile speichern w\u00fcrden, w\u00e4re erstens ungeschickt und zweitens w\u00fcrde er viel l\u00e4nger dauern als zwei Arrays. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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>. Dies ist eine typische Lambda-Funktion. Sie \u00fcbergeben Lambda-Ausdr\u00fccke. Und sie extrahiert den Namen aus dem W\u00f6rterbuch f\u00fcr jede ID.<\/p>\n<p><\/p>\n<p>\u00c4hnlich kann die Suche durchgef\u00fchrt werden. Eine Pr\u00e4dikatfunktion wird \u00fcbergeben, die \u00fcberpr\u00fcft, wonach die Elemente passen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 vereinfachen das Schema erheblich und l\u00f6sen viele Probleme. <\/p>\n<p><\/p>\n<p>Aber das n\u00e4chste Problem, dem wir begegnet sind und \u00fcber das ich sprechen m\u00f6chte, sind effiziente Abfragen. <\/p>\n<p><\/p>\n<ul>\n<li>In ClickHouse gibt es keinen Abfrageplaner. \u00dcberhaupt nicht. <\/li>\n<li>Dennoch m\u00fcssen komplexe Abfragen trotzdem geplant werden. In welchen F\u00e4llen? <\/li>\n<li>Wenn in der Abfrage mehrere Joins (join) vorhanden sind, die Sie in Unterabfragen verpacken. Und die Reihenfolge, in der sie ausgef\u00fchrt werden, ist wichtig. <\/li>\n<li>Und zweitens \u2013 wenn die Abfrage verteilt ist. Denn bei einer verteilten Abfrage wird nur der innerste Subquery verteilt ausgef\u00fchrt, w\u00e4hrend alles andere an einen Server \u00fcbergeben wird, mit dem Sie verbunden sind, und dort ausgef\u00fchrt wird. Daher ist es wichtig, die Reihenfolge zu w\u00e4hlen, wenn Sie verteilte Abfragen mit vielen Joins (join) haben. <\/li>\n<\/ul>\n<p><\/p>\n<p>Selbst in einfachen F\u00e4llen sollte der Abfrageplaner manchmal die Arbeit leisten und die Abfragen leicht umschreiben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 ein Beispiel. Auf der linken Seite eine Abfrage, die die Top 5 L\u00e4nder zeigt. Sie dauert etwa 2,5 Sekunden. Auf der rechten Seite dieselbe Abfrage, jedoch leicht umformuliert. Anstatt nach Zeilen zu gruppieren, haben wir nach Schl\u00fcssel (int) gruppiert. Und das ist schneller. Danach haben wir das Ergebnis mit einem Dictionary verbunden. Statt 2,5 Sekunden ben\u00f6tigt die Abfrage jetzt nur noch 1,5 Sekunden. Das ist gut. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 f\u00fcr das Umschreiben von Filtern. Hier eine Abfrage f\u00fcr Russland. Sie dauert 5 Sekunden. Wenn wir sie so umschreiben, dass wir nicht wieder mit Zeichenfolgen, sondern mit Zahlen aus einem Set von Schl\u00fcsseln, die zu Russland geh\u00f6ren, vergleichen, wird es viel schneller. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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. Sie erm\u00f6glichen es, Anfragen, die bereits schnell erscheinen, noch weiter zu beschleunigen oder umgekehrt, solche, die langsam erscheinen, schneller zu machen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 Arbeitseinsatz im verteilten Modus. <\/li>\n<li>Sortierung nach minimalen Typen, so wie ich es mit den Intents gemacht habe. <\/li>\n<li>Wenn es irgendwelche Joins oder Dictionaries gibt, ist es besser, diese erst ganz am Ende zu implementieren, wenn die Daten wenigstens teilweise gruppiert sind. Dann werden die Join-Operationen oder Dictionary-Abfragen seltener ben\u00f6tigt, was die Geschwindigkeit erh\u00f6ht. <\/li>\n<li>Austausch von Filtern. <\/li>\n<\/ul>\n<p><\/p>\n<p>Es gibt noch weitere Techniken, nicht nur die, die ich demonstriert habe. Alles zusammen kann manchmal die Ausf\u00fchrung von Anfragen erheblich beschleunigen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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>Die Aufgabe lautete: <\/p>\n<p><\/p>\n<ul>\n<li>Offline-Verkn\u00fcpfung von Werbetransaktionen. <\/li>\n<li>Modellierung unterschiedlicher Verkn\u00fcpfungsmodelle. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 etwa 20 Mal im Monat, sei es durch verschiedene Anzeigen oder einfach nur so, weil er sich an die Seite erinnert. Er schaut sich Produkte an, legt sie in den Warenkorb und nimmt sie wieder heraus. Schlie\u00dflich kauft er etwas. <\/p>\n<p><\/p>\n<p>Wichtige Fragen sind: \"Wer muss f\u00fcr die Werbung bezahlen, wenn es n\u00f6tig ist?\" und \"Welche Werbung hat ihn beeinflusst, falls es eine gab?\" Das hei\u00dft, warum hat er gekauft und wie k\u00f6nnen wir daf\u00fcr sorgen, dass auch andere \u00e4hnliche Personen kaufen?<\/p>\n<p><\/p>\n<p>Um dieses Ziel zu erreichen, m\u00fcssen die Ereignisse auf der Website auf die richtige Weise miteinander verkn\u00fcpft werden, das hei\u00dft, es sollte eine Verbindung zwischen ihnen hergestellt werden. Diese Informationen werden dann zur Analyse an ein DWH \u00fcbermittelt. Basierend auf dieser Analyse werden Modelle entwickelt, um zu entscheiden, welche Werbung wem gezeigt werden sollte.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 miteinander verbundener Benutzerereignisse, die mit der Anzeige einer Werbung beginnt, gefolgt von weiteren Aktionen, eventuell einem Kauf, und m\u00f6glicherweise weiteren K\u00e4ufen. Zum Beispiel, wenn es sich um eine mobile Anwendung oder ein mobiles Spiel handelt, erfolgt in der Regel die Installation der Anwendung kostenlos; wenn im Anschluss jedoch weitere Aktionen durchgef\u00fchrt werden, k\u00f6nnen daf\u00fcr Kosten anfallen. Je mehr eine Person in der Anwendung ausgibt, desto wertvoller wird sie. Aber daf\u00fcr m\u00fcssen alle Aktionen miteinander verkn\u00fcpft werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 Ereignis, das den Benutzer auf die Webseite f\u00fchrte.<\/li>\n<li>Lineare Kombination \u2013 alle gleich. <\/li>\n<li>Abschw\u00e4chung.<\/li>\n<li>Und weitere. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 urspr\u00fcnglich funktioniert? Es gab Runtime und Cassandra. Cassandra wurde als Transaktionsspeicher verwendet, d. h. alle verbundenen Transaktionen wurden dort gespeichert. Wenn ein Ereignis in Runtime eintritt, wie z. B. die Anzeige einer bestimmten Seite oder \u00e4hnliches, wird eine Anfrage an Cassandra gestellt \u2013 gibt es diesen Benutzer oder nicht. Dann werden die Transaktionen abgerufen, die ihm zugeordnet sind, und die Verkn\u00fcpfung wird durchgef\u00fchrt.<\/p>\n<p><\/p>\n<p>Wenn es Gl\u00fcck gibt und die Anfrage eine Transaktions-ID enth\u00e4lt, ist das kein Problem. Aber normalerweise hat man nicht so viel Gl\u00fcck. Daher musste man die letzte Transaktion oder die Transaktion mit dem letzten Klick finden, und so weiter. <\/p>\n<p><\/p>\n<p>Das hat gut funktioniert, solange die Bindung an den letzten Klick gekn\u00fcpft war. Denn sagen wir, es gab 10 Millionen Klicks pro Tag, also 300 Millionen pro Monat, wenn man das Monat als Zeitraum betrachtet. Und da in Cassandra alles im Speicher sein muss, damit es schnell funktioniert und die Runtime schnell antworten kann, ben\u00f6tigte man etwa 10-15 Server. <\/p>\n<p><\/p>\n<p>Doch als man begann, die Transaktion an die Anzeigen zu binden, wurde es sofort komplizierter. Warum? Man musste nun 30 Mal mehr Ereignisse speichern. Das bedeutet, man braucht auch 30 Mal mehr Server. Und das ergibt eine astronomische Zahl. Bis zu 500 Server zu halten, nur um eine Bindung herzustellen, w\u00e4hrend es in der Runtime deutlich weniger Server gibt, ist einfach nicht nachhaltig. Also \u00fcberlegten wir, was zu tun ist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/7af35f1ade680232cc83a6887891bc5c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Schlie\u00dflich entschieden wir uns f\u00fcr ClickHouse. Aber wie geht man das mit ClickHouse an? Auf den ersten Blick scheint es, als handele es sich um eine Sammlung von Anti-Patterns. <\/p>\n<p><\/p>\n<ul>\n<li>Die Transaktion w\u00e4chst, wir binden immer neue Events ein, das hei\u00dft, sie ist ver\u00e4nderbar, und ClickHouse funktioniert nicht besonders gut mit ver\u00e4nderbaren Objekten. <\/li>\n<li>Wenn ein Besucher zu uns kommt, m\u00fcssen wir seine Transaktionen \u00fcber den Schl\u00fcssel, also seine Besuchs-ID, abrufen. Auch dies ist eine Punktabfrage, die in ClickHouse nicht \u00fcblich ist. Normalerweise gibt es in ClickHouse gro\u00dfe \u2026 Scans, doch hier m\u00fcssen wir nur einige Datens\u00e4tze abrufen. Auch das ist ein Antipattern. <\/li>\n<li>Dar\u00fcber hinaus war die Transaktion im JSON-Format, aber wir wollten sie nicht umschreiben, daher wollten wir das JSON unstrukturiert speichern und bei Bedarf etwas daraus extrahieren. Auch das ist ein Antipattern. <\/li>\n<\/ul>\n<p><\/p>\n<p>Das hei\u00dft, eine Menge von Antipatterns. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 erstellen, das sehr gut funktionierte. <\/p>\n<p><\/p>\n<p>Was wurde getan? ClickHouse wurde implementiert, in den Logs, die nach Eintr\u00e4gen unterteilt sind, werden Daten eingepflegt. Es wurde ein Attributed-Service eingef\u00fchrt, der die Logs aus ClickHouse bezieht. Anschlie\u00dfend wurden f\u00fcr jede Aufzeichnung anhand der Visit-ID die Transaktionen abgerufen, die eventuell noch nicht verarbeitet waren, sowie Snapshots, d.h. bereits verbundene Transaktionen, die das Ergebnis der vorherigen Arbeit darstellten. Daraus wurde die Logik erstellt, die korrekte Transaktion ausgew\u00e4hlt und neue Ereignisse angebunden. Diese Informationen wurden erneut in das Log geschrieben. Das Log wurde zur\u00fcck an ClickHouse gesendet, sodass es sich um ein kontinuierliches, kreisf\u00f6rmiges System handelt. Dar\u00fcber hinaus wurde es ins DWH gesendet, um dort analysiert zu werden. <\/p>\n<p><\/p>\n<p>In dieser Form funktionierte es nicht allzu gut. Um es ClickHouse zu erleichtern, wurden die Abfragen nach Visit-ID in Bl\u00f6cke von 1.000 bis 2.000 Visit-IDs gruppiert, und alle Transaktionen f\u00fcr 1.000 bis 2.000 Personen wurden abgerufen. Danach lief alles reibungslos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 reinschaut, gibt es nur drei Haupttabellen, die alles verwalten. <\/p>\n<p><\/p>\n<p>Die erste Tabelle, in die die Logs geladen werden, empf\u00e4ngt die Daten praktisch ohne Verarbeitung.<\/p>\n<p><\/p>\n<p>Die zweite Tabelle. \u00dcber die materialisierte Sicht wurden aus diesen Logs nicht attribuierte Events herausgefiltert, die nicht miteinander verkn\u00fcpft waren. Und \u00fcber die materialisierte Sicht wurden Transaktionen zum Erstellen eines Snapshots extrahiert. Das hei\u00dft, eine spezielle materialisierte Sicht hat den Snapshot erstellt, n\u00e4mlich den letzten akkumulierten Zustand der Transaktion. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 steht ein Text in SQL. Ich m\u00f6chte einige wichtige Punkte dazu kommentieren. <\/p>\n<p><\/p>\n<p>Der erste wichtige Punkt ist die M\u00f6glichkeit, in ClickHouse Spalten und Felder aus JSON zu extrahieren. Das hei\u00dft, ClickHouse bietet einige Methoden zur Arbeit mit JSON. Diese sind sehr, sehr primitiv. <\/p>\n<p><\/p>\n<p>visitParamExtractInt erm\u00f6glicht es, Attribute aus JSON zu extrahieren, das hei\u00dft, die erste \u00dcbereinstimmung wird aktiviert. So kann man die Transaction-ID oder die Visit-ID herausziehen. Das ist Punkt eins. <\/p>\n<p><\/p>\n<p>Zweitens \u2013 hier wird ein raffiniertes materialisiertes Feld verwendet. Was bedeutet das? Das bedeutet, dass Sie es nicht in die Tabelle einf\u00fcgen k\u00f6nnen, das hei\u00dft, es wird nicht eingetragen, sondern berechnet und bei der Einf\u00fcgung gespeichert. Bei der Einf\u00fcgung erledigt ClickHouse die Arbeit f\u00fcr Sie. Und das, was Sie sp\u00e4ter ben\u00f6tigen, wird bereits aus dem JSON extrahiert.<\/p>\n<p><\/p>\n<p>In diesem Fall ist die materialisierte Sicht f\u00fcr unverarbeitete Zeilen gedacht. Dabei wird die erste Tabelle mit nahezu Roh-Logs verwendet. Was bewirkt sie? Zun\u00e4chst einmal \u00e4ndert sie die Sortierung, d. h. die Sortierung erfolgt jetzt nach der Visit-ID, weil wir schnell die Transaktionen einer bestimmten Person abrufen m\u00fcssen. <\/p>\n<p><\/p>\n<p>Eine weitere wichtige Sache ist die index_granularity. Wenn Sie MergeTree gesehen haben, betr\u00e4gt die index_granularity standardm\u00e4\u00dfig normalerweise 8.192. Was bedeutet das? Es handelt sich um einen Parameter f\u00fcr die Indexpersistenz. In ClickHouse ist der Index sp\u00e4rlich, das hei\u00dft, er indiziert niemals jeden einzelnen Datensatz. Er macht das alle 8.192 Eintr\u00e4ge. Das ist vorteilhaft, wenn viele Daten berechnet werden m\u00fcssen, aber nachteilig, wenn es nur wenige sind, weil es einen hohen Overhead schafft. Wenn wir die index_granularity verringern, reduzieren wir den Overhead. Eine Reduzierung auf eins ist nicht m\u00f6glich, da es m\u00f6glicherweise nicht gen\u00fcgend Speicher gibt. Der Index wird immer im Speicher gehalten. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5fe303061977cad64e6c0333b125d595.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Snapshots nutzen zudem einige interessante Funktionen von ClickHouse.<\/p>\n<p><\/p>\n<p>Zun\u00e4chst haben wir den AggregatingMergeTree. In diesem AggregatingMergeTree wird argMax gespeichert, was dem Zustand der Transaktion entspricht, der mit dem letzten Zeitstempel verbunden ist. F\u00fcr jeden Besucher werden kontinuierlich neue Transaktionen generiert. Und in den letzten Zustand dieser Transaktion haben wir ein Ereignis hinzugef\u00fcgt, wodurch ein neuer Zustand entstand. Dieser wurde erneut in ClickHouse gespeichert. \u00dcber argMax in dieser materialisierten Sicht k\u00f6nnen wir immer den aktuellen Zustand abrufen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 von Runtime \u201egel\u00f6st\u201c. <\/li>\n<li>Es werden bis zu 3 Milliarden Transaktionen pro Monat gespeichert und verarbeitet. Das ist um ein Vielfaches mehr als in Cassandra, das hei\u00dft 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 in Cassandra, um eine klickbasierte Attribution zu erm\u00f6glichen, w\u00e4hrend wir hier eine impressionsbasierte haben. Das hei\u00dft, anstatt die Anzahl der Server um das 30-Fache zu erh\u00f6hen, konnten wir diese Anzahl reduzieren. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/583779fe9e133df519411e2256401eb3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ein letztes Beispiel ist das Finanzunternehmen Y, das die Korrelationen von Aktienkurs\u00e4nderungen analysierte. <\/p>\n<p><\/p>\n<p>Die Aufgabe lautete:<\/p>\n<p><\/p>\n<ul>\n<li>Es gibt etwa 5.000 Aktien. <\/li>\n<li>Die Kurse sind 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 Datens\u00e4tze. <\/li>\n<\/ul>\n<p><\/p>\n<p>Und es war notwendig, die Korrelation der Ver\u00e4nderungen zu berechnen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 deren Kursentwicklungen. Wenn eine steigt und die andere ebenfalls, dann ist das eine positive Korrelation, d.h. beide wachsen. Wenn eine am Ende des Diagramms steigt und die andere f\u00e4llt, dann ist das eine negative Korrelation, d.h. wenn eine w\u00e4chst, sinkt die andere. <\/p>\n<p><\/p>\n<p>Durch die Analyse dieser gegenseitigen \u00c4nderungen k\u00f6nnen Vorhersagen f\u00fcr den Finanzmarkt getroffen werden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 daf\u00fcr gemacht? Wir haben 100 Milliarden Datens\u00e4tze, die Folgendes enthalten: Zeit, Aktie und Preis. Zuerst m\u00fcssen wir 100 Milliarden Mal die runningDifference der Preisalgorithmen berechnen. RunningDifference ist eine Funktion in ClickHouse, die die Differenz zwischen zwei aufeinanderfolgenden Zeilen berechnet. <\/p>\n<p><\/p>\n<p>Und danach muss die Korrelation berechnet werden, wobei die Korrelation f\u00fcr jedes Paar ermittelt werden muss. Bei 5.000 Aktien ergeben sich 12,5 Millionen Paare. Das ist viel, d.h. diese Korrelation muss 12,5 Mal berechnet werden. <\/p>\n<p><\/p>\n<p>Und falls jemand es vergessen hat, x und y sind das mathematische Erwartungswert einer Stichprobe. Das bedeutet, dass wir nicht nur die Wurzeln und Summen berechnen m\u00fcssen, sondern dass innerhalb dieser Summen auch wieder Summen berechnet werden m\u00fcssen. Eine Menge von Berechnungen muss 12,5 Millionen Mal durchgef\u00fchrt und nach Stunden gruppiert werden. Und wir haben auch nicht gerade wenig Stunden. Das alles muss in 60 Sekunden geschehen. Das ist ein Scherz. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/567a07f586a824c91671820fe21ec305.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir mussten irgendwie einen Weg finden, denn alles lief sehr, sehr langsam, bevor ClickHouse kam.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 haben es mit Hadoop, mit Spark und mit Greenplum versucht. Und all das war sehr langsam oder teuer. Man konnte es irgendwie berechnen, aber es war dann teuer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/37608c7e87ddb9a7d54854643044c369.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Doch dann kam ClickHouse und alles wurde viel besser. <\/p>\n<p><\/p>\n<p>Ich erinnere daran, dass wir das Problem mit der Lokalisierung der Daten haben, denn Korrelationen k\u00f6nnen nicht lokalisiert werden. Wir k\u00f6nnen nicht einen Teil der Daten auf einem Server und einen Teil auf einem anderen zusammenfassen; wir m\u00fcssen alle Daten \u00fcberall haben. <\/p>\n<p><\/p>\n<p>Was haben sie gemacht? Urspr\u00fcnglich waren die Daten lokalisiert. Auf jedem der Server befinden sich Daten zur Preisgestaltung eines bestimmten Satzes von Aktien. Diese \u00fcberlappen sich nicht. Daher kann logReturn parallel und unabh\u00e4ngig berechnet werden, alles geschieht parallel und verteilt. <\/p>\n<p><\/p>\n<p>Wir haben entschieden, diese Daten zu komprimieren, ohne ihre Ausdruckskraft zu verlieren. Dazu verwenden wir Arrays, d.h. f\u00fcr jeden Zeitabschnitt erstellen wir ein Array von Aktien und ein Array von Preisen. So beanspruchen die Daten viel weniger Speicherplatz und lassen sich einfacher bearbeiten. Diese Vorg\u00e4nge laufen nahezu parallel ab, das hei\u00dft, wir berechnen teilweise gleichzeitig und schreiben dann auf den Server. <\/p>\n<p><\/p>\n<p>Danach k\u00f6nnen wir diese replizieren. Der Buchstabe \u201er\u201c bedeutet, dass wir diese Daten repliziert haben. Das hei\u00dft, dass wir auf allen drei Servern identische Daten haben \u2013 n\u00e4mlich diese Arrays. <\/p>\n<p><\/p>\n<p>Mit einem speziellen Skript k\u00f6nnen wir aus diesem Satz von 12,5 Millionen Korrelationen, die berechnet werden m\u00fcssen, Pakete erstellen. Das bedeutet 2.500 Aufgaben mit 5.000 Paaren von Korrelationen. Diese Aufgabe wird auf einem bestimmten ClickHouse-Server ausgef\u00fchrt. Alle Daten sind dort 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 Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/587c6d587a48f2407dd2687f5423d44a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So sieht es aus. Zun\u00e4chst haben wir alle Daten in folgender Struktur: Zeit, Aktien, Preis. Danach haben wir den logReturn berechnet, das hei\u00dft, die gleiche Struktur, nur dass wir anstelle des Preises den logReturn haben. Anschlie\u00dfend haben wir die Daten umformatiert, sodass wir Zeit und eine Gruppierung nach Aktien und Preisen erhalten haben. Danach haben wir sie zusammengef\u00fchrt. Schlie\u00dflich haben wir viele Aufgaben generiert und ClickHouse gef\u00fcttert, damit es diese berechnen kann. Und das funktioniert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/434e7385aebcffcc03d1bd1a2020c8bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bei dem Proof of Concept war die Aufgabe eine Teilaufgabe, d.h. es wurden weniger Daten verwendet. Und das Ganze lief auf drei Servern.<\/p>\n<p><\/p>\n<p>Die ersten beiden Schritte: Berechnung des Log_Return und Umwandlung in Arrays haben jeweils etwa eine Stunde gedauert. <\/p>\n<p><\/p>\n<p>Die Berechnung der Korrelation hat etwa 50 Stunden in Anspruch genommen. Aber 50 Stunden sind wenig, denn vorher hat es Wochen gedauert. Das war ein gro\u00dfer Erfolg. Wenn man es genau betrachtet, wurden 70 Berechnungen pro Sekunde in diesem Cluster durchgef\u00fchrt.<\/p>\n<p><\/p>\n<p>Am wichtigsten ist jedoch, dass dieses System praktisch ohne Engp\u00e4sse funktioniert, d.h. es l\u00e4sst sich nahezu linear skalieren. Und das haben sie \u00fcberpr\u00fcft. Erfolgreich haben sie es skaliert. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 bedeutet, alle notwendigen Technologien von ClickHouse zu nutzen. <\/li>\n<li>Summing\/Aggregating Merge Trees sind Technologien, die es erm\u00f6glichen, Snapshots der Zust\u00e4nde als Ausnahme zu aggregieren oder zu z\u00e4hlen. Das vereinfacht viele Dinge erheblich. <\/li>\n<li>Materialisierte Ansichten erm\u00f6glichen es, die Einschr\u00e4nkung auf einen Index zu umgehen. Vielleicht habe ich das nicht sehr klar ausgedr\u00fcckt, aber als wir die Protokolle geladen haben, lagen die Rohprotokolle in einer Tabelle mit einem einzigen Index, w\u00e4hrend die Attributlogdaten in einer anderen Tabelle gespeichert waren. Es handelt sich also um dieselben Daten, nur gefiltert, aber der Index war v\u00f6llig unterschiedlich. Es scheinen zwar die gleichen Daten zu sein, jedoch mit unterschiedlicher Sortierung. Materialisierte Ansichten erm\u00f6glichen es, diese Einschr\u00e4nkung von ClickHouse zu umgehen, wenn dies erforderlich ist. <\/li>\n<li>Reduzieren Sie die Granularit\u00e4t des Index f\u00fcr punktuelle Abfragen. <\/li>\n<li>Verteilen Sie die Daten intelligent, versuchen Sie, die Daten innerhalb des Servers so lokal wie m\u00f6glich zu halten. Achten Sie darauf, dass auch die Abfragen, wo immer m\u00f6glich, diese Lokalisierung nutzen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Theorie und Praxis der Nutzung von ClickHouse in echten 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 kann man sagen, dass ClickHouse derzeit sowohl im Bereich der kommerziellen als auch der Open-Source-Datenbanken, insbesondere f\u00fcr analytische Zwecke, fest etabliert ist. Es f\u00fcgt sich hervorragend in dieses Umfeld ein. Dar\u00fcber hinaus beginnt es allm\u00e4hlich, andere zu verdr\u00e4ngen, denn wenn Sie ClickHouse haben, ben\u00f6tigen Sie InfiniDB nicht. Vertica k\u00f6nnte bald obsolet sein, 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 Nutzung von ClickHouse in echten Anwendungen. Alexander Zaitsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6e9a65d32eb6de7f9f139a30e7ab0d25.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>&#8212;<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 vergleicht. Wir bei Yandex bem\u00fchen uns, alle Vergleiche von ClickHouse mit verschiedenen Datenbanken zu verfolgen. Denn wenn pl\u00f6tzlich etwas schneller als ClickHouse ist, kann Alexey Milovidov nachts nicht schlafen und beginnt, es schnell zu optimieren. Ich habe von einem solchen Vergleich nichts geh\u00f6rt. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>(\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041c\u0438\u043b\u043e\u0432\u0438\u0434\u043e\u0432) Apache Phoenix \u2013 ist eine SQL-Engine auf Hbase. Hbase ist haupts\u00e4chlich f\u00fcr key-value-basierte Arbeitsabl\u00e4ufe konzipiert. In jeder Zeile kann es eine beliebige Anzahl von Spalten mit beliebigen Namen geben. Das gilt auch f\u00fcr Systeme wie Hbase und Cassandra. Auf diesen Systemen werden jedoch komplexe analytische Abfragen nicht gut funktionieren. Oder Sie k\u00f6nnten annehmen, dass sie gut funktionieren, wenn Sie keine Erfahrung mit ClickHouse haben.<\/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 besch\u00e4ftige mich bereits ziemlich lange mit diesem Thema, da ich ein analytisches Subsystem habe. Aber wenn ich mir ClickHouse ansehe, habe ich das Gef\u00fchl, dass ClickHouse sehr gut f\u00fcr die Analyse von Events und ver\u00e4nderlichen Daten geeignet ist. Wenn ich jedoch viele Gesch\u00e4ftsdaten mit einer Vielzahl gro\u00dfer Tabellen analysieren muss, ist ClickHouse, soweit ich das verstehe, nicht die beste Wahl f\u00fcr mich. Besonders wenn sich diese Daten \u00e4ndern. Ist das richtig, oder gibt es Beispiele, die das widerlegen k\u00f6nnen?<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Das ist richtig. Das gilt f\u00fcr die meisten spezialisierten analytischen Datenbanken. Sie sind darauf ausgelegt, 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, muss man das Schema auf eine Weise gestalten, die gut mit ClickHouse funktioniert. Das bedeutet, \u00fcberm\u00e4\u00dfige Normalisierung zu vermeiden, Nachschlagetabellen zu verwenden und weniger lange Beziehungen zu schaffen. Wenn das Schema so gestaltet ist, k\u00f6nnen \u00e4hnliche Gesch\u00e4ftsaufgaben 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 zum letzten finanziellen Fall. Es gab Analysen. Man musste vergleichen, wie es aufw\u00e4rts und abw\u00e4rts geht. Ich verstehe, dass Sie das System genau f\u00fcr diese Analysen aufgebaut haben? Wenn sie morgen zum Beispiel einen anderen Bericht \u00fcber diese Daten ben\u00f6tigen, m\u00fcssen sie das Schema neu erstellen und die Daten erneut laden? Das hei\u00dft, es ist eine Art Vorverarbeitung erforderlich, um die Abfrage zu erhalten?<\/em><\/p>\n<p><\/p>\n<p>Nat\u00fcrlich wird ClickHouse f\u00fcr eine ganz bestimmte Aufgabe verwendet. Diese h\u00e4tte traditionell auch mit Hadoop gel\u00f6st werden k\u00f6nnen. F\u00fcr Hadoop ist das eine ideale Aufgabe, aber die Bearbeitung erfolgt dort sehr langsam. Mein Ziel ist es zu demonstrieren, dass mit ClickHouse Aufgaben gel\u00f6st werden k\u00f6nnen, die normalerweise mit ganz anderen Mitteln angegangen werden, und dabei deutlich effizienter sind. Es ist speziell auf diese Aufgabe zugeschnitten. Nat\u00fcrlich kann eine \u00e4hnliche Aufgabe auch auf \u00e4hnliche Weise gel\u00f6st werden. <\/p>\n<p><\/p>\n<p><em>Verstanden. Sie sagten, dass die Verarbeitung 50 Stunden gedauert hat. Bezieht sich das auf den gesamten Zeitraum, vom ersten Laden der Daten bis zum Erhalt 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 ist auf einem 3-Server-Cluster. <\/p>\n<p><\/p>\n<p><em>Hallo! Vielen Dank f\u00fcr den Vortrag! Alles sehr interessant. Ich m\u00f6chte nicht so sehr nach der Funktionalit\u00e4t fragen, sondern nach der Verwendung von ClickHouse in Bezug auf Stabilit\u00e4t. Gab es bei Ihnen Ausf\u00e4lle, musste etwas wiederhergestellt werden? Wie verh\u00e4lt sich ClickHouse in solchen F\u00e4llen? Und kam es vor, dass auch die Replikation ausgefallen ist? Wir haben beispielsweise mit ClickHouse das Problem erfahren, dass es doch \u00fcber seine Grenzen hinausgeht und abst\u00fcrzt.<\/em><\/p>\n<p><\/p>\n<p>Nat\u00fcrlich gibt es keine perfekten Systeme, und auch ClickHouse hat seine Herausforderungen. Aber haben Sie jemals geh\u00f6rt, dass Yandex.Metrica l\u00e4ngere Zeit nicht funktioniert hat? Wahrscheinlich nicht. Seit 2012-2013 arbeitet es zuverl\u00e4ssig auf ClickHouse. Auch aus meiner Erfahrung kann ich sagen, dass wir nie vollst\u00e4ndige Ausf\u00e4lle hatten. Irgendwelche partiellen Probleme konnten auftreten, aber diese waren nie so kritisch, dass sie ernsthafte Auswirkungen auf das Gesch\u00e4ft hatten. So etwas gab es nie. ClickHouse ist ziemlich zuverl\u00e4ssig und f\u00e4llt nicht willk\u00fcrlich aus. Dar\u00fcber kann man sich keine Sorgen machen. Es ist kein ungetestetes Produkt. Das haben viele Unternehmen bewiesen. <\/p>\n<p><\/p>\n<p><em>Hallo! Sie haben gesagt, dass man von Anfang an gut \u00fcber das Datenmodell nachdenken muss. Was ist, wenn das nicht passiert ist? Bei mir flie\u00dfen die Daten und flie\u00dfen. Nach sechs Monaten merke ich, dass das nicht so weitergehen kann, ich muss die Daten neu hochladen und etwas damit machen.<\/em> <\/p>\n<p><\/p>\n<p>Das h\u00e4ngt nat\u00fcrlich von Ihrer Systemarchitektur ab. Es gibt mehrere M\u00f6glichkeiten, dies nahezu ohne Unterbrechung zu erreichen. Sie k\u00f6nnten zum Beispiel ein Materialized View erstellen, das eine andere Datenstruktur hat, wenn sie eindeutig zuordnungsf\u00e4hig ist. Das bedeutet, wenn eine Zuordnung mittels ClickHouse m\u00f6glich ist, also bestimmte Dinge extrahiert werden k\u00f6nnen, der Primary Key ge\u00e4ndert wird und die Partitionierung angepasst wird, dann kann man ein Materialized View erstellen. Ihre alten Daten k\u00f6nnen dort \u00fcbertragen werden, w\u00e4hrend neue automatisch geschrieben werden. Danach wechseln Sie einfach zur Verwendung des Materialized View, schalten die Schreibvorg\u00e4nge um, und l\u00f6schen die alte Tabelle. Das ist ein Ansatz, der v\u00f6llig ohne Unterbrechung funktioniert. <\/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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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:description\" content=\"\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\" \/>\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 Zaytsev (2018) | ProHoster","description":"Obwohl es heutzutage fast \u00fcberall viele Daten gibt, sind analytische Datenbanken immer noch recht exotisch. Sie sind wenig bekannt und noch schlechter werden sie effektiv genutzt. Viele setzen weiterhin auf MySQL oder PostgreSQL, die f\u00fcr andere Szenarien konzipiert sind, k\u00e4mpfen mit NoSQL oder zahlen \u00fcberteuerte Preise f\u00fcr kommerzielle L\u00f6sungen. ClickHouse ver\u00e4ndert die Spielregeln und senkt erheblich die Einstiegsh\u00fcrden.","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:description":"\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","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"},"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}]}}