Umzug zu ClickHouse: 3 Jahre später

Vor drei Jahren standen Viktor Tarnavsky und Alexey Milovidov von Yandex auf der Bühne HighLoad ++ erzählt, welches ClickHouse gut ist und wie es nicht langsamer wird. Und auf der nächsten Stufe war Alexander Zaitsev с Prüfbericht über den Umzug nach Clickhouse von einem anderen analytischen DBMS und mit der Schlussfolgerung, dass Clickhouse, natürlich gut, aber nicht sehr praktisch. Als im Jahr 2016 das Unternehmen Life, wo Alexander damals arbeitete, übersetzte das Multipetabyte-Analysesystem in Clickhouse, es war eine faszinierende „gelbe Backsteinstraße“, voller unbekannter Gefahren – Clickhouse Dann sah es aus wie ein Minenfeld.

Drei Jahre später Clickhouse wurde viel besser - in dieser Zeit gründete Alexander die Firma Altinity, die nicht nur beim Umzug hilft Clickhouse Dutzende Projekte, verbessert aber auch das Produkt selbst zusammen mit Kollegen von Yandex. Jetzt Clickhouse immer noch kein unbeschwerter Spaziergang, aber kein Minenfeld mehr.

Alexander beschäftigt sich seit 2003 mit verteilten Systemen und entwickelt große Projekte dazu MySQL, Orakel и Vertica. Endlich HighLoad ++ 2019 Alexander, einer der Pioniere des Einsatzes Clickhouse, erzählte, was dieses DBMS jetzt ist. Wir lernen die Hauptfunktionen kennen Clickhouse: Wie es sich von anderen Systemen unterscheidet und in welchen Fällen es effektiver eingesetzt werden kann. Anhand von Beispielen werden wir neue und projekterprobte Praktiken für den Aufbau von Systemen betrachten Clickhouse.


Rückblick: Was vor 3 Jahren geschah

Vor drei Jahren haben wir das Unternehmen übertragen Life auf Clickhouse aus einer anderen Analysedatenbank, und die Migration der Werbenetzwerkanalysen sah folgendermaßen aus:

  • Juni 2016. In Open Source erschienen Clickhouse und unser Projekt gestartet;
  • August. Konzeptioneller Beweiß: großes Werbenetzwerk, Infrastruktur und 200–300 Terabyte Daten;
  • Oktober. Erste Produktionsdaten;
  • Dezember. Volle Produktauslastung – 10–50 Milliarden Ereignisse pro Tag.
  • Juni 2017. Erfolgreiche Migration der Benutzer nach Clickhouse2,5 Petabyte Daten auf einem Cluster von 60 Servern.

Mit fortschreitender Migration wuchs das Verständnis dafür Clickhouse ist ein gutes System, mit dem man angenehm arbeiten kann, aber es ist ein internes Projekt von Yandex. Daher gibt es Nuancen: Yandex wird sich zunächst mit seinen eigenen internen Kunden befassen und erst dann mit der Community und den Bedürfnissen externer Benutzer, während ClickHouse damals in vielen Funktionsbereichen nicht das Unternehmensniveau erreichte. Deshalb haben wir im März 2017 Altinity to make gegründet Clickhouse noch schneller und bequemer, nicht nur für Yandex, sondern auch für andere Benutzer. Und jetzt:

  • Wir schulen und helfen bei der Entwicklung von Lösungen basierend auf Clickhouse damit die Kunden keine Unebenheiten füllen und die Lösung irgendwann funktioniert;
  • Wir bieten 24/7-Support Clickhouse- Installationen;
  • Wir entwickeln unsere eigenen Ökosystemprojekte;
  • Engagiere mich aktiv für mich selbst Clickhouse, um auf Anfragen von Benutzern zu reagieren, die bestimmte Funktionen sehen möchten.

Und natürlich helfen wir auch beim Umzug Clickhouse с MySQL, Vertica, Oracle, Grüne Pflaume, Redshift und andere Systeme. Wir waren an den unterschiedlichsten Umzügen beteiligt und alle waren erfolgreich.

Umzug zu ClickHouse: 3 Jahre später

Warum überhaupt umziehen? Clickhouse

Wird nicht langsamer! Dies ist der Hauptgrund. Clickhouse - sehr schnelle Datenbank für verschiedene Szenarien:

Umzug zu ClickHouse: 3 Jahre später

Zufällige Zitate von Leuten, die mit arbeiten Clickhouse.

Skalierbarkeit. Bei einer anderen Datenbank können Sie jedoch auf einer einzigen Hardware eine gute Leistung erzielen Clickhouse Sie können nicht nur vertikal, sondern auch horizontal skalieren, indem Sie einfach Server hinzufügen. Es läuft nicht alles so reibungslos, wie wir es gerne hätten, aber es funktioniert. Sie können das System mit dem Wachstum Ihres Unternehmens erweitern. Es ist wichtig, dass wir durch die Entscheidung jetzt nicht eingeschränkt werden und immer das Potenzial für Entwicklung besteht.

Portabilität. Es gibt keine Bindung an eine Sache. Zum Beispiel mit Amazon RedShift schwer, irgendwohin zu ziehen. A Clickhouse Sie können es auf Ihrem Laptop oder Server ablegen, in der Cloud bereitstellen und zu gehen Kubernetes - Es bestehen keine Einschränkungen für den Betrieb der Infrastruktur. Das ist für jeden praktisch und ein großer Vorteil, mit dem sich viele andere ähnliche Datenbanken nicht rühmen können.

Flexibilität. Clickhouse bleibt nicht bei einer Sache stehen, zum Beispiel Yandex.Metrica, sondern wird in immer mehr unterschiedlichen Projekten und Branchen entwickelt und eingesetzt. Es kann durch Hinzufügen neuer Funktionen erweitert werden, um neue Probleme zu lösen. Man glaubt beispielsweise, dass das Speichern von Protokollen in einer Datenbank unhöflich sei, und hat sich deshalb etwas ausgedacht Elasticsearch. Aber dank der Flexibilität Clickhouse, man kann auch Protokolle darin speichern, und oft ist es sogar besser als in Elasticsearch - in Clickhouse es benötigt 10-mal weniger Eisen.

Kostenlos Open Source. Sie müssen für nichts bezahlen. Sie müssen keine Genehmigung aushandeln, um das System auf Ihrem Laptop oder Server zu installieren. Es gibt keine versteckten Gebühren. Gleichzeitig kann keine andere Open-Source-Datenbanktechnologie mit der Geschwindigkeit mithalten Clickhouse. MySQL, MariaDB, Greenplum - Sie sind alle viel langsamer.

Gemeinschaft, Antrieb und Spaß. Ich Clickhouse Tolle Community: Meetups, Chats und Alexey Milovidov, der uns alle mit seiner Energie und seinem Optimismus anfeuert.

Wechsel zu ClickHouse

Zum Wechseln Clickhouse Für etwas braucht man nur drei Dinge:

  • Grenzen verstehen Clickhouse und wofür es nicht geeignet ist.
  • Nutzen Sie die Vorteile Technologie und ihre größten Stärken.
  • Experiment. Sogar zu wissen, wie es funktioniert ClickhouseAllerdings lässt sich nicht immer vorhersagen, wann es schneller, wann langsamer, wann besser und wann schlechter sein wird. Also versuche.

Das Problem des Umzugs

Es gibt nur ein „aber“: wenn du umziehst Clickhouse Bei etwas anderem geht normalerweise etwas schief. Wir sind an einige Praktiken und Dinge gewöhnt, die in unserer Lieblingsdatenbank funktionieren. Zum Beispiel jeder, der mit arbeitet SQL-Datenbanken betrachten die folgenden Funktionen als obligatorisch:

  • Transaktionen;
  • Einschränkungen;
  • Konsistenz;
  • Indizes;
  • AKTUALISIEREN · ENTFERNEN;
  • NULL-Werte;
  • Millisekunden;
  • automatische Typkonvertierungen;
  • mehrere Verknüpfungen;
  • beliebige Partitionen;
  • Cluster-Management-Tools.

Die Einstellung ist obligatorisch, aber vor drei Jahren Clickhouse Es gab keine dieser Funktionen! Jetzt bleibt weniger als die Hälfte der Unrealisierten übrig: Transaktionen, Einschränkungen, Konsistenz, Millisekunden und Typumwandlung.

Und die Hauptsache ist, dass in Clickhouse Einige Standardpraktiken und -ansätze funktionieren nicht oder nicht so, wie wir es gewohnt sind. Alles, was in erscheint Clickhouse, entspricht "Klicken Sie auf den Hausweg“, d.h. Die Funktionen unterscheiden sich von anderen DBs. Zum Beispiel:

  • Indizes werden nicht ausgewählt, sondern übersprungen.
  • AKTUALISIEREN · ENTFERNEN nicht synchron, sondern asynchron.
  • Es gibt mehrere Joins, aber keinen Abfrageplaner. Wie sie dann ausgeführt werden, ist für Menschen aus der Datenbankwelt im Allgemeinen nicht ganz klar.

ClickHouse-Szenarien

1960 ein amerikanischer Mathematiker ungarischer Herkunft WignerEP hat einen Artikel geschriebenDie unangemessene Wirksamkeit der Mathematik in den Naturwissenschaften„(„Die unverständliche Wirksamkeit der Mathematik in den Naturwissenschaften“), dass die Welt um uns herum aus irgendeinem Grund durch mathematische Gesetze gut beschrieben wird. Mathematik ist eine abstrakte Wissenschaft, und in mathematischer Form ausgedrückte physikalische Gesetze sind nicht trivial WignerEP betonte, dass dies sehr seltsam sei.

Aus meiner Sicht, Clickhouse - die gleiche Kuriosität. Um Wigner umzuformulieren, können wir Folgendes sagen: Erstaunlich ist die unvorstellbare Effizienz Clickhouse in einer Vielzahl analytischer Anwendungen!

Umzug zu ClickHouse: 3 Jahre später

Nehmen wir zum Beispiel Echtzeit-Data-Warehouse, in den nahezu kontinuierlich Daten geladen werden. Wir möchten mit einer zweiten Verzögerung Anfragen von ihm erhalten. Benutzen Sie bitte Clickhouseweil es für dieses Szenario konzipiert wurde. Clickhouse So wird es nicht nur im Web, sondern auch im Marketing und in der Finanzanalyse eingesetzt. AdTech, sowie in BetrugserkennungN. IN Echtzeit-Data Warehouse Es wird ein komplex strukturiertes Schema wie „Stern“ oder „Schneeflocke“ verwendet, viele Tabellen mit JOIN (manchmal mehrere) und die Daten werden normalerweise in einigen Systemen gespeichert und geändert.

Nehmen wir ein anderes Szenario – Zeitfolgen: Überwachungsgeräte, Netzwerke, Nutzungsstatistiken, Internet der Dinge. Hier treffen wir auf ziemlich einfache, zeitlich geordnete Ereignisse. Clickhouse wurde ursprünglich nicht dafür entwickelt, hat sich aber gut bewährt und wird daher von großen Unternehmen eingesetzt Clickhouse als Aufbewahrungsort für Überwachungsinformationen. Um zu sehen, ob es passt Clickhouse Für Zeitreihen haben wir einen Benchmark erstellt, der auf dem Ansatz und den Ergebnissen basiert InfluxDB и ZeitskalaDB – spezialisiert Zeitfolgen Datenbanken. Es stellte sich herausDass Clickhouse, auch ohne Optimierung für solche Aufgaben, gewinnt auch auf einem fremden Feld:

Umzug zu ClickHouse: 3 Jahre später

В Zeitfolgen Normalerweise wird eine schmale Tabelle verwendet - mehrere kleine Spalten. Aus der Überwachung können viele Daten stammen – Millionen von Datensätzen pro Sekunde – und sie kommen normalerweise in kleinen Einfügungen (Echtzeit Streaming). Daher benötigen wir ein anderes Einfügeskript und die Abfragen selbst – mit einigen eigenen Besonderheiten.

Log Management. Das Sammeln von Protokollen in der Datenbank ist normalerweise schlecht, aber in Clickhouse Dies kann mit einigen Kommentaren wie oben beschrieben erfolgen. Viele Unternehmen nutzen Clickhouse nur dafür. In diesem Fall wird eine flache, breite Tabelle verwendet, in der wir die gesamten Protokolle speichern (z. B. im Formular). JSON) oder in Stücke schneiden. Daten werden normalerweise in großen Stapeln (Dateien) geladen, und wir suchen nach einem Feld.

Für jede dieser Funktionen werden in der Regel spezielle Datenbanken verwendet. Clickhouse man kann alles und zwar so gut, dass es sie an Leistung übertrifft. Schauen wir uns das jetzt genauer an Zeitfolgen Skript und wie man „kocht“ Clickhouse unter diesem Szenario.

Zeitfolgen

Dies ist derzeit das Hauptszenario dafür Clickhouse als Standardlösung angesehen. Zeitfolgen ist eine Reihe zeitlich geordneter Ereignisse, die Änderungen in einem Prozess im Laufe der Zeit darstellen. Es kann sich beispielsweise um die Herzfrequenz pro Tag oder die Anzahl der Prozesse im System handeln. Alles, was Zeit gibt, tickt mit einigen Dimensionen Zeitfolgen:

Umzug zu ClickHouse: 3 Jahre später

Die meisten dieser Ereignisse stammen aus der Überwachung. Dabei kann es sich nicht nur um Webüberwachung handeln, sondern auch um reale Geräte: Autos, Industrieanlagen, IoT, Industrien oder unbemannte Taxis, in deren Kofferraum Yandex bereits steckt Clickhouse-Server.

Es gibt beispielsweise Unternehmen, die Daten von Schiffen sammeln. Alle paar Sekunden senden Sensoren von einem Containerschiff Hunderte verschiedene Messwerte. Ingenieure studieren sie, bauen Modelle und versuchen zu verstehen, wie effizient das Schiff genutzt wird, denn ein Containerschiff sollte keine Sekunde stillstehen. Jede Ausfallzeit ist Geldverschwendung, daher ist es wichtig, die Route so vorherzusagen, dass das Parken minimal ist.

Mittlerweile gibt es eine Zunahme spezialisierter Datenbanken, die messen Zeitfolgen. Auf der Seite DB-Motoren Irgendwie werden verschiedene Datenbanken geordnet und können nach Typ angezeigt werden:

Umzug zu ClickHouse: 3 Jahre später

Der am schnellsten wachsende Typ ZeitfolgenS. Graphdatenbanken nehmen ebenfalls zu, aber Zeitfolgens sind in den letzten Jahren schneller gewachsen. Typische Vertreter dieser Datenbankfamilie sind InfluxDB, Prometheus, KDB, ZeitskalaDB (gebaut auf PostgreSQL), Lösungen von Amazon. Clickhouse Auch hier kann man es nutzen, und es wird genutzt. Lassen Sie mich Ihnen ein paar öffentliche Beispiele nennen.

Einer der Pioniere ist das Unternehmen CloudFlare (CDNAnbieter). Sie überwachen ihre CDN durch Clickhouse (DNS-Anfragen, HTTP-Anfragen) mit einer enormen Auslastung - 6 Millionen Ereignisse pro Sekunde. Alles geht durch Kafkaeske Zustände, geht zu Clickhouse, das die Möglichkeit bietet, Echtzeit-Dashboards von Ereignissen im System anzuzeigen.

Comcast - einer der führenden Telekommunikationsanbieter in den Vereinigten Staaten: Internet, digitales Fernsehen, Telefonie. Sie schufen ein ähnliches Kontrollsystem CDN im Rahmen der Open Source Projekt Apache-Verkehrskontrolle mit ihren riesigen Datenmengen zu arbeiten. Clickhouse Wird als Backend für Analysen verwendet.

Percona eingebaut Clickhouse in deinem PMMum die Überwachung anders zu halten MySQL.

Spezifische Anforderungen

Zeitreihendatenbanken haben ihre eigenen spezifischen Anforderungen.

  • Schnelle Einfügung von vielen Agenten. Wir müssen sehr schnell Daten aus vielen Streams einfügen. Clickhouse macht es gut, weil es alle nicht blockierenden Einsätze hat. Beliebig einfügen ist eine neue Datei auf der Festplatte, und kleine Einfügungen können auf die eine oder andere Weise gepuffert werden. IN Clickhouse Es ist besser, Daten in großen Mengen einzufügen, statt jeweils eine Zeile.
  • Flexibler Stromkreis. In Zeitfolgen Normalerweise kennen wir die Struktur der Daten nicht vollständig. Es ist möglich, ein Überwachungssystem für eine bestimmte Anwendung aufzubauen, es ist dann jedoch schwierig, es für eine andere Anwendung zu verwenden. Dies erfordert ein flexibleres System. Clickhouseermöglicht Ihnen dies, auch wenn es sich um eine stark typisierte Basis handelt.
  • Effiziente Speicherung und „Vergessen“ von Daten. Normalerweise in Zeitfolgen Da es sich um große Datenmengen handelt, müssen diese so effizient wie möglich gespeichert werden. Zum Beispiel bei InfluxDB Gute Komprimierung ist sein Hauptmerkmal. Aber neben der Speicherung müssen Sie auch in der Lage sein, alte Daten zu „vergessen“ und einiges zu tun Downsampling — automatische Zählung der Aggregate.
  • Schnelle Abfragen zu aggregierten Daten. Manchmal ist es interessant, die letzten 5 Minuten mit einer Genauigkeit von Millisekunden zu betrachten, aber bei monatlichen Daten ist die Granularität von Minuten oder Sekunden möglicherweise nicht erforderlich – allgemeine Statistiken reichen aus. Eine solche Unterstützung ist notwendig, da sonst ein Antrag für 3 Monate auch in sehr langer Zeit ausgeführt wird Clickhouse.
  • Anfragen wie „letzter Punkt, ab». Diese sind typisch für Zeitfolgen Anfragen: Sehen Sie sich die letzte Messung oder den Zustand des Systems zu einem bestimmten Zeitpunkt an t. Für die Datenbank sind das keine sehr angenehmen Abfragen, die aber auch ausführbar sein müssen.
  • Zeitreihen „kleben“.. Zeitfolgen ist eine Zeitreihe. Wenn es zwei Zeitreihen gibt, müssen diese oft verbunden und korreliert werden. Dies ist nicht bei allen Datenbanken praktisch, insbesondere bei nicht ausgerichteten Zeitreihen: Hier gibt es einige Zeitmarken, es gibt andere. Sie können den Durchschnitt berücksichtigen, aber plötzlich wird es immer noch ein Loch geben, sodass es nicht klar ist.

Mal sehen, wie diese Anforderungen erfüllt werden Clickhouse.

Fahren

В Clickhouse Schema für Zeitfolgen kann je nach Grad der Datenregelmäßigkeit auf unterschiedliche Weise erfolgen. Es ist möglich, ein System auf der Grundlage regelmäßiger Daten aufzubauen, wenn wir alle Kennzahlen im Voraus kennen. Habe es zum Beispiel getan CloudFlare mit Überwachung CDN ist ein gut optimiertes System. Sie können ein allgemeineres System aufbauen, das die gesamte Infrastruktur und verschiedene Dienste überwacht. Bei unregelmäßigen Daten wissen wir im Voraus nicht, was wir überwachen – und das ist wohl der häufigste Fall.

reguläre Daten. Säulen. Das Schema ist einfach – Spalten mit den erforderlichen Typen:

CREATE TABLE cpu (
  created_date Date DEFAULT today(),  
  created_at DateTime DEFAULT now(),  
  time String,  
  tags_id UInt32,  /* join to dim_tag */
  usage_user Float64,  
  usage_system Float64,  
  usage_idle Float64,  
  usage_nice Float64,  
  usage_iowait Float64,  
  usage_irq Float64,  
  usage_softirq Float64,  
  usage_steal Float64,  
  usage_guest Float64,  
  usage_guest_nice Float64
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Dies ist eine reguläre Tabelle, die eine Art Systemstartaktivität überwacht (Benutzer, System, Leerlauf, schön). Einfach und bequem, aber nicht flexibel. Wenn wir ein flexibleres Schema wünschen, können wir Arrays verwenden.

Unregelmäßige Daten. Arrays:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  )
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Struktur Verschachtelte sind zwei Arrays: metrics.name и metrics.value. Hier können Sie beliebige Überwachungsdaten als Namensarray und Messwertarray für jedes Ereignis speichern. Zur weiteren Optimierung können statt einer mehrere solcher Strukturen erstellt werden. Zum Beispiel eine für schweben-Wert, ein anderer - für int-Bedeutung, weil int Ich möchte effizienter lagern.

Allerdings ist eine solche Struktur schwieriger zugänglich. Sie müssen eine spezielle Konstruktion verwenden und spezielle Funktionen verwenden, um zuerst die Werte des Index und dann des Arrays abzurufen:

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Aber es funktioniert immer noch schnell genug. Eine andere Möglichkeit, unregelmäßige Daten zu speichern, besteht in Zeilen.

Unregelmäßige Daten. Saiten. Auf diese traditionelle Weise werden Namen und Werte ohne Arrays gleichzeitig gespeichert. Wenn 5 Messungen gleichzeitig von einem Gerät stammen, werden 000 Zeilen in der Datenbank generiert:

CREATE TABLE cpu_rlc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metric_name LowCardinality(String),  
  metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);


SELECT 
    maxIf(metric_value, metric_name = 'usage_user'),
    ... 
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)

Clickhouse kommt damit zurecht - es verfügt über spezielle Erweiterungen Clickhouse SQL. Zum Beispiel maxIf – eine spezielle Funktion, die das Maximum anhand der Metrik berechnet, wenn eine Bedingung erfüllt ist. Sie können mehrere solcher Ausdrücke in einer Abfrage schreiben und den Wert für mehrere Metriken sofort berechnen.

Vergleichen wir drei Ansätze:

Umzug zu ClickHouse: 3 Jahre später

Детали

Hier habe ich für einige Testdatensätze „Datengröße auf der Festplatte“ hinzugefügt. Bei Spalten haben wir die kleinste Datengröße: maximale Komprimierung, maximale Abfragegeschwindigkeit, aber wir zahlen dafür, dass wir alles auf einmal reparieren müssen.

Bei Arrays sieht es etwas schlimmer aus. Die Daten werden immer noch gut komprimiert und es ist möglich, ein unregelmäßiges Muster zu speichern. Aber Clickhouse - eine Spaltendatenbank, und wenn wir anfangen, alles in einem Array zu speichern, wird daraus eine String-Datenbank, und wir zahlen für Flexibilität mit Effizienz. Für jede Operation müssen Sie das gesamte Array in den Speicher einlesen und dann das gewünschte Element darin finden – und wenn das Array wächst, nimmt die Geschwindigkeit ab.

In einem der Unternehmen, die diesen Ansatz verwenden (z. B. Uber), Arrays werden in Stücke von 128 Elementen geschnitten. Die Daten mehrerer Tausend Metriken mit einem Datenvolumen von 200 TB/Tag werden nicht in einem Array, sondern in 10 oder 30 Arrays mit spezieller Speicherlogik gespeichert.

Der einfachste Ansatz ist mit Strings. Aber die Daten sind schlecht komprimiert, die Tabellengröße ist groß und selbst wenn Abfragen auf mehreren Metriken basieren, funktioniert ClickHouse nicht optimal.

Hybridschema

Nehmen wir an, wir haben ein Array-Schema gewählt. Wenn wir jedoch wissen, dass die meisten unserer Dashboards nur Benutzer- und Systemmetriken anzeigen, können wir diese Metriken zusätzlich auf folgende Weise in Spalten aus einem Array auf Tabellenebene materialisieren:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  ),
  usage_user Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_user')],
  usage_system Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_system')]
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Beim Einfügen Clickhouse zählt sie automatisch. Auf diese Weise können Sie das Geschäftliche mit dem Angenehmen verbinden: Das Schema ist flexibel und allgemein gehalten, wir haben jedoch die am häufigsten verwendeten Spalten herausgegriffen. Ich stelle fest, dass hierfür kein Wechsel des Einsatzes erforderlich war und ETL, wodurch weiterhin Arrays in die Tabelle eingefügt werden. Wir haben es einfach getan ALTER TABELLE, fügte ein paar Lautsprecher hinzu und erhielt ein hybrides und schnelleres Schema, das Sie sofort nutzen können.

Codecs und Komprimierung

für Zeitfolgen Es ist wichtig, wie gut Sie die Daten verpacken, da die Informationsmenge sehr groß sein kann. IN Clickhouse Es gibt eine Reihe von Werkzeugen, um den Komprimierungseffekt 1:10, 1:20 und manchmal auch mehr zu erzielen. Das bedeutet, dass 1 TB unkomprimierter Daten auf der Festplatte 50–100 GB belegt. Eine kleinere Größe ist gut, Daten können schneller gelesen und verarbeitet werden.

Um ein hohes Maß an Komprimierung zu erreichen, Clickhouse unterstützt die folgenden Codecs:

Umzug zu ClickHouse: 3 Jahre später

Tabellenbeispiel:

CREATE TABLE benchmark.cpu_codecs_lz4 (
    created_date Date DEFAULT today(), 
    created_at DateTime DEFAULT now() Codec(DoubleDelta, LZ4), 
    tags_id UInt32, 
    usage_user Float64 Codec(Gorilla, LZ4), 
    usage_system Float64 Codec(Gorilla, LZ4), 
    usage_idle Float64 Codec(Gorilla, LZ4), 
    usage_nice Float64 Codec(Gorilla, LZ4), 
    usage_iowait Float64 Codec(Gorilla, LZ4), 
    usage_irq Float64 Codec(Gorilla, LZ4), 
    usage_softirq Float64 Codec(Gorilla, LZ4), 
    usage_steal Float64 Codec(Gorilla, LZ4), 
    usage_guest Float64 Codec(Gorilla, LZ4), 
    usage_guest_nice Float64 Codec(Gorilla, LZ4), 
    additional_tags String DEFAULT ''
)
ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Hier definieren wir den Codec DoubleDelta im einen Fall, im zweiten Gorilla, und stellen Sie sicher, dass Sie weitere hinzufügen LZ4 Kompression. Dadurch wird die Größe der Daten auf der Festplatte erheblich reduziert:

Umzug zu ClickHouse: 3 Jahre später

Dies zeigt, wie viel Speicherplatz dieselben Daten beanspruchen, jedoch mit unterschiedlichen Codecs und Komprimierungen:

  • in einer GZIP-Datei auf der Festplatte;
  • in ClickHouse ohne Codecs, aber mit ZSTD-Komprimierung;
  • in ClickHouse mit LZ4- und ZSTD-Codecs und Komprimierung.

Es ist ersichtlich, dass Tabellen mit Codecs deutlich weniger Platz beanspruchen.

Größe zählt

Nicht weniger wichtig wählen Richtiger Datentyp:

Umzug zu ClickHouse: 3 Jahre später

In allen oben genannten Beispielen habe ich verwendet Schwimmer64. Aber wenn wir es wollten Schwimmer32dann wäre das noch besser. Dies haben die Jungs von Perkona im Artikel unter dem obigen Link gut demonstriert. Es ist wichtig, den kompaktesten Typ zu verwenden, der für die Aufgabe geeignet ist: noch weniger für die Größe auf der Festplatte als für die Abfragegeschwindigkeit. Clickhouse sehr empfindlich darauf.

Wenn Sie es verwenden können int32 statt int64, dann erwarten Sie eine fast verdoppelte Leistungssteigerung. Die Daten beanspruchen weniger Speicher und die gesamte „Rechnung“ funktioniert viel schneller. Clickhouse Im Inneren handelt es sich um ein sehr streng typisiertes System, das alle Möglichkeiten moderner Systeme optimal nutzt.

Aggregation und Materialisierte Ansichten

Mit Aggregation und materialisierten Ansichten können Sie Aggregate für verschiedene Anlässe erstellen:

Umzug zu ClickHouse: 3 Jahre später

Beispielsweise verfügen Sie möglicherweise über nicht aggregierte Quelldaten und können verschiedene materialisierte Ansichten mit automatischer Summierung über eine spezielle Engine daran anhängen SummingMergeTree (SMT). SMT ist eine spezielle aggregierende Datenstruktur, die Aggregate automatisch zählt. Rohdaten werden in die Datenbank eingefügt, automatisch aggregiert und Dashboards können sofort verwendet werden.

TTL - Alte Daten „vergessen“.

Wie kann man nicht mehr benötigte Daten „vergessen“? Clickhouse weiß, wie es geht. Beim Erstellen von Tabellen können Sie angeben TTL Ausdrücke: Zum Beispiel, dass wir Minutendaten für einen Tag, Tagesdaten für 30 Tage speichern und niemals wöchentliche oder monatliche Daten berühren:

CREATE TABLE aggr_by_minute
…
TTL time + interval 1 day

CREATE TABLE aggr_by_day
…
TTL time + interval 30 day

CREATE TABLE aggr_by_week
…
/* no TTL */

Mehrstufig - Partitionieren von Daten auf Festplatten

Bei der Entwicklung dieser Idee können Daten gespeichert werden Clickhouse an verschiedenen Orten. Angenommen, wir möchten die aktuellen Daten der letzten Woche auf einem sehr schnellen lokalen Server speichern SSD, und wir fügen weitere historische Daten an einer anderen Stelle hinzu. IN Clickhouse Jetzt ist es möglich:

Umzug zu ClickHouse: 3 Jahre später

Sie können die Aufbewahrungsrichtlinie konfigurieren (Speicherrichtlinie) Also Clickhouse überträgt Daten automatisch in einen anderen Speicher, wenn bestimmte Bedingungen erfüllt sind.

Aber das ist nicht alles. Auf der Ebene einer bestimmten Tabelle können Sie Regeln definieren, wann genau Daten in den Cold Storage übertragen werden. Beispielsweise liegen Daten von 7 Tagen auf einer sehr schnellen Festplatte und alles, was älter ist, wird auf eine langsame übertragen. Das ist gut, weil es dem System ermöglicht, die maximale Leistung beizubehalten und gleichzeitig die Kosten zu kontrollieren und kein Geld für kalte Daten auszugeben:

CREATE TABLE 
... 
TTL date + INTERVAL 7 DAY TO VOLUME 'cold_volume', 
    date + INTERVAL 180 DAY DELETE

Einzigartige Funktionen Clickhouse

Fast alles drin Clickhouse Es gibt solche „Highlights“, aber sie werden durch das Exklusive nivelliert – was in anderen Datenbanken nicht zu finden ist. Hier sind zum Beispiel einige der einzigartigen Funktionen Clickhouse:

  • Arrays. In Clickhouse Sehr gute Unterstützung für Arrays sowie die Möglichkeit, komplexe Berechnungen darauf durchzuführen.
  • Aggregierende Datenstrukturen. Dies ist eines der „Killer-Features“ Clickhouse. Trotz der Tatsache, dass die Leute von Yandex sagen, dass wir keine Daten aggregieren wollen, wird alles aggregiert Clickhouseweil es schnell und bequem ist.
  • Materialisierte Ansichten. Zusammen mit aggregierenden Datenstrukturen ermöglichen Ihnen materialisierte Ansichten eine bequeme Arbeit Echtzeit Anhäufung.
  • ClickHouse SQL. Dies ist eine Spracherweiterung SQL mit einigen zusätzlichen und exklusiven Funktionen, die nur in verfügbar sind Clickhouse. Bisher war es sozusagen einerseits eine Erweiterung, andererseits ein Nachteil. Jetzt sind fast alle Mängel im Vergleich zu SQL 92 Wir haben es entfernt, jetzt ist es nur noch eine Erweiterung.
  • Lambda-Ausdrücke. Befinden sie sich noch in irgendeiner Datenbank?
  • ML-Unterstützung. Dies steht in verschiedenen Datenbanken, einige sind besser, andere schlechter.
  • Open Source. Wir können expandieren Clickhouse zusammen. Jetzt in Clickhouse Etwa 500 Mitwirkende, Tendenz steigend.

Knifflige Abfragen

В Clickhouse Es gibt viele verschiedene Möglichkeiten, dasselbe zu tun. Es gibt beispielsweise drei verschiedene Möglichkeiten, den letzten Wert aus einer Tabelle für zurückzugeben CPU (Es gibt auch ein viertes, aber es ist noch exotischer).

Der erste zeigt, wie bequem es ist, dies zu tun Clickhouse Abfragen, wenn Sie das überprüfen möchten Tupel in der Unterabfrage enthalten. Das ist etwas, was mir persönlich in anderen Datenbanken wirklich gefehlt hat. Wenn ich etwas mit einer Unterabfrage vergleichen möchte, kann in anderen Datenbanken nur ein Skalar damit verglichen werden, und für mehrere Spalten muss ich schreiben JOIN. In Clickhouse Sie können Tupel verwenden:

SELECT *
  FROM cpu 
 WHERE (tags_id, created_at) IN 
    (SELECT tags_id, max(created_at)
        FROM cpu 
        GROUP BY tags_id)

Der zweite Weg macht dasselbe, verwendet jedoch eine Aggregatfunktion argMax:

SELECT 
    argMax(usage_user), created_at),
    argMax(usage_system), created_at),
...
 FROM cpu 

В Clickhouse es gibt mehrere Dutzend Aggregatfunktionen, und wenn man Kombinatoren verwendet, dann erhält man nach den Gesetzen der Kombinatorik etwa tausend davon. ArgMax - eine der Funktionen, die den Maximalwert zählt: Die Abfrage gibt den Wert zurück Usage_user, bei dem der Maximalwert erreicht ist hergestellt in:

SELECT now() as created_at,
       cpu.*
  FROM (SELECT DISTINCT tags_id from cpu) base 
  ASOF LEFT JOIN cpu USING (tags_id, created_at)

ASOF BEITRETEN - Reihen mit unterschiedlichen Zeiten „kleben“. Dies ist eine einzigartige Funktion für Datenbanken und nur in verfügbar kdb +. Wenn es zwei Zeitreihen mit unterschiedlichen Zeiten gibt, ASOF BEITRETEN ermöglicht das Verschieben und Kleben in einem Arbeitsgang. Für jeden Wert in einer Zeitreihe wird der nächstgelegene Wert in einer anderen Zeitreihe gefunden und diese werden in derselben Zeile zurückgegeben:

Umzug zu ClickHouse: 3 Jahre später

Analytische Funktionen

Im Standard SQL-2003 du kannst so schreiben:

SELECT origin,
       timestamp,
       timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
       timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
       ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
       COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
  FROM mytable
ORDER BY origin, timestamp;

В Clickhouse Dies ist nicht möglich, da der Standard nicht unterstützt wird SQL-2003 und wird es wahrscheinlich auch nie tun. Stattdessen in Clickhouse es ist üblich, so zu schreiben:

Umzug zu ClickHouse: 3 Jahre später

Ich habe Lambdas versprochen – hier sind sie!

Dies ist ein Analogon einer analytischen Abfrage im Standard SQL-2003: Es zählt die Differenz zwischen zwei Zeitstempel, Dauer, Ordinalzahl – alles, was wir normalerweise als analytische Funktionen betrachten. IN Clickhouse Wir zählen sie über Arrays: Zuerst komprimieren wir die Daten zu einem Array, danach machen wir mit dem Array, was wir wollen, und dann erweitern wir es wieder. Es ist nicht sehr praktisch, es erfordert zumindest eine Vorliebe für funktionale Programmierung, aber es ist sehr flexibel.

Besondere Merkmale

Außerdem in Clickhouse viele Spezialfunktionen. Wie lässt sich beispielsweise feststellen, wie viele Sitzungen gleichzeitig ausgeführt werden? Eine typische Aufgabe des Monitorings besteht darin, die maximale Auslastung in einer einzelnen Anfrage zu ermitteln. IN Clickhouse Hierfür gibt es eine spezielle Funktion:

Umzug zu ClickHouse: 3 Jahre später

Generell verfügt ClickHouse für viele Zwecke über spezielle Funktionen:

  • RunningDifference, RunningAccumulate, Neighbor;
  • sumMap(key, value);
  • timeSeriesGroupSum(uid, timestamp, value);
  • timeSeriesGroupRateSum(uid, timestamp, value);
  • skewPop, skewSamp, kurtPop, kurtSamp;
  • MIT FÜLLUNG / MIT BAND;
  • simpleLinearRegression, stochasticLinearRegression.

Dies ist keine vollständige Liste der Funktionen, es gibt nur 500–600 davon. Hinweis: alle Funktionen in Clickhouse steht in der Systemtabelle (nicht alle sind dokumentiert, aber alle sind interessant):

select * from system.functions order by name

Clickhouse speichert viele Informationen über sich selbst, darunter Protokolltabellen, query_log, Trace-Protokoll, Betriebsprotokoll mit Datenblöcken (part_log), das Metrikprotokoll und das Systemprotokoll, das normalerweise auf die Festplatte geschrieben wird. Das Metrikprotokoll ist Zeitfolgen в Clickhouse Genau genommen Clickhouse: Die Datenbank selbst kann eine Rolle spielen Zeitfolgen Datenbanken und „verschlingt“ sich so selbst.

Umzug zu ClickHouse: 3 Jahre später

Auch das ist etwas Einzigartiges – denn wir leisten gute Arbeit ZeitfolgenWarum können wir nicht alles, was wir brauchen, in uns selbst speichern? Brauchen wir nicht Prometheus, wir behalten alles in uns. In Verbindung gebracht Grafana und wir überwachen uns selbst. Wie auch immer, wenn Clickhouse Stürze, wir werden nicht sehen - warum - deshalb machen sie das normalerweise nicht.

Große Gruppe oder viele kleine Clickhouse

Was ist besser – ein großer Cluster oder viele kleine ClickHouses? Der traditionelle Ansatz zu DWH ist ein großer Cluster, in dem jeder Anwendung Schemata zugewiesen werden. Wir kamen zum Datenbankadministrator – geben Sie uns ein Schema, und wir bekamen es:

Umzug zu ClickHouse: 3 Jahre später

В Clickhouse man kann es anders machen. Kann jede Anwendung ihre eigene erstellen? Clickhouse:

Umzug zu ClickHouse: 3 Jahre später

Wir brauchen kein großes Monster mehr DWH und unkooperative Administratoren. Wir können jeder Anwendung eine eigene geben Clickhouse, und der Entwickler kann es seitdem selbst tun Clickhouse sehr einfach zu installieren und erfordert keine komplexe Administration:

Umzug zu ClickHouse: 3 Jahre später

Aber wenn wir viel haben Clickhouse, und Sie müssen es oft einstellen, dann möchten Sie diesen Prozess automatisieren. Hierfür können wir zum Beispiel verwenden Kubernetes и Clickhouse-Operator. IN Kubernetes ClickHouse Sie können „auf Klick“ setzen: Ich kann auf eine Schaltfläche klicken, das Manifest ausführen und die Datenbank ist bereit. Sie können sofort ein Schema erstellen, dort mit dem Laden von Metriken beginnen und nach 5 Minuten habe ich ein Dashboard fertig Grafana. Es ist so einfach!

Das Ergebnis?

somit Clickhouse - Das:

  • Быстро. Das weiß jeder.
  • Gerade. Ein wenig fraglich, aber ich denke, es ist schwer zu lernen und leicht zu kämpfen. Wenn Sie verstehen, wie Clickhouse funktioniert, alles ist ganz einfach.
  • Allgemein. Es eignet sich für verschiedene Szenarien: DWH, Zeitreihen, Protokollspeicher. Aber es ist nicht OLTP Versuchen Sie also nicht, dort kurze Einfügungen und Lesevorgänge durchzuführen.
  • Interessanterweise. Wahrscheinlich derjenige, mit dem gearbeitet wird ClickhouseEr erlebte viele interessante Minuten im guten und schlechten Sinne. Als zum Beispiel eine neue Version herauskam, funktionierte alles nicht mehr. Oder wenn man zwei Tage lang mit einer Aufgabe zu kämpfen hatte, die Aufgabe aber nach einer Frage im Telegram-Chat in zwei Minuten gelöst war. Oder, wie auf der Konferenz beim Bericht von Lesha Milovidov, ein Screenshot von Clickhouse brach die Sendung ab HighLoad ++. Solche Dinge passieren ständig und prägen unser Leben Clickhouse hell und interessant!

Die Präsentation kann eingesehen werden hier.

Umzug zu ClickHouse: 3 Jahre später

Das lang erwartete Treffen der Entwickler von Hochlastsystemen bei HighLoad ++ findet am 9. und 10. November in Skolkovo statt. Schließlich wird es eine Offline-Konferenz sein (allerdings mit allen Vorsichtsmaßnahmen), da die Energie von HighLoad++ nicht online verpackt werden kann.

Zur Konferenz finden und zeigen wir Ihnen Fälle über die maximalen Möglichkeiten der Technologie: HighLoad++ war, ist und bleibt der einzige Ort, an dem Sie in zwei Tagen lernen können, wie Facebook, Yandex, VKontakte, Google und Amazon funktionieren.

Nachdem wir unsere Treffen seit 2007 ununterbrochen abgehalten haben, treffen wir uns dieses Jahr zum 14. Mal. In dieser Zeit ist die Konferenz um das Zehnfache gewachsen, letztes Jahr versammelte das wichtigste Ereignis der Branche 10 Teilnehmer, 3339 Referenten mit Berichten und Meetups und es wurden 165 Titel gleichzeitig abgespielt.
Letztes Jahr waren 20 Busse für Sie da, 5280 Liter Tee und Kaffee, 1650 Liter Fruchtgetränke und 10200 Flaschen Wasser. Und noch einmal 2640 Kilogramm Lebensmittel, 16 Teller und 000 Tassen. Mit dem gesammelten Geld aus Recyclingpapier haben wir übrigens 25 Eichensämlinge gepflanzt 🙂

Tickets können gekauft werden hier, Neuigkeiten zur Konferenz erhalten — hier, und reden Sie in allen sozialen Netzwerken: Telegram, Facebook, Vkontakte и Twitter.

Source: habr.com

Kommentar hinzufügen