Alexey Lizunov, Leiter des Kompetenzzentrums fĂŒr Remote-Service-KanĂ€le der Direktion fĂŒr Informationstechnologien des ICD
Als Alternative zum ELK-Stack (ElasticSearch, Logstash, Kibana) untersuchen wir die Verwendung der ClickHouse-Datenbank als Data Warehouse fĂŒr Protokolle.
In diesem Artikel möchten wir ĂŒber unsere Erfahrungen mit der ClickHouse-Datenbank und ĂŒber vorlĂ€ufige Ergebnisse des Pilotbetriebs sprechen. Es sollte sofort angemerkt werden, dass die Ergebnisse beeindruckend waren.

Als nĂ€chstes werden wir detaillierter beschreiben, wie unser System konfiguriert ist und aus welchen Komponenten es besteht. Aber jetzt möchte ich ein wenig ĂŒber diese Datenbank als Ganzes sprechen und warum Sie darauf achten sollten. Die ClickHouse-Datenbank ist eine leistungsstarke analytische Spaltendatenbank von Yandex. Es wird in Yandex-Diensten verwendet und ist zunĂ€chst das Haupt-Data-Warehouse fĂŒr Yandex.Metrica. Das Open-Source-System ist kostenlos. Aus Sicht des Entwicklers war ich immer daran interessiert, wie sie es implementiert haben, weil es fantastisch groĂe Datenmengen gibt. Und die metrische BenutzeroberflĂ€che selbst ist sehr flexibel und schnell. Bei der ersten Bekanntschaft mit dieser Datenbank der Eindruck: âNun, endlich! Gemacht "fĂŒr Menschen"! Beginnend mit dem Installationsprozess und endend mit dem Senden von Anforderungen. "
Diese Datenbank hat eine sehr niedrige Eintragsschwelle. Selbst ein durchschnittlicher erfahrener Entwickler kann diese Datenbank in wenigen Minuten installieren und verwenden. Alles funktioniert klar. Selbst Linux-Neulinge können die Installation schnell durchfĂŒhren und einfache VorgĂ€nge ausfĂŒhren. FrĂŒher, als das Wort Big Data, Hadoop, Google BigTable, HDFS, der ĂŒbliche Entwickler die Idee hatte, dass es sich um Terabyte, Petabyte handelte, dass einige Ăbermenschen an den Einstellungen und der Entwicklung fĂŒr diese Systeme beteiligt waren, kamen wir mit dem Aufkommen der ClickHouse-Datenbank Ein einfaches, verstĂ€ndliches Werkzeug, mit dem Sie den bisher unerreichbaren Aufgabenbereich lösen können. Nur ein ziemlich durchschnittliches Auto und fĂŒnf Minuten zu installieren. Das heiĂt, wir haben eine Datenbank wie zum Beispiel MySql, aber nur zum Speichern von Milliarden von DatensĂ€tzen! Eine Art SQL-Supervisor. Es ist, als wĂŒrden Menschen Waffen von AuĂerirdischen gegeben.
Ăber unser Protokollsammelsystem
Zum Sammeln von Informationen werden IIS-Protokolldateien von Webanwendungen eines Standardformats verwendet (wir analysieren auch Anwendungsprotokolle, aber das Hauptziel in der Phase des Pilotbetriebs mit uns ist das Sammeln von IIS-Protokollen).
Aus verschiedenen GrĂŒnden konnten wir den ELK-Stack nicht vollstĂ€ndig aufgeben und verwenden weiterhin die Komponenten LogStash und Filebeat, die sich bewĂ€hrt haben und recht zuverlĂ€ssig und vorhersehbar funktionieren.
Das allgemeine Protokollierungsschema ist in der folgenden Abbildung dargestellt:

Eine Funktion zum Schreiben von Daten in die ClickHouse-Datenbank ist das seltene (einmal pro Sekunde) EinfĂŒgen von DatensĂ€tzen in groĂen Stapeln. Dies ist anscheinend der âproblematischsteâ Teil, auf den Sie stoĂen, wenn Sie zum ersten Mal mit der ClickHouse-Datenbank arbeiten: Das Schema ist etwas kompliziert.
Das LogStash-Plugin hat hier sehr geholfen, da es Daten direkt in ClickHouse einfĂŒgt. Diese Komponente wird auf demselben Server wie die Datenbank selbst bereitgestellt. Im Allgemeinen wird daher nicht empfohlen, dies zu tun, sondern aus praktischer Sicht, um keine separaten Server zu erstellen, wĂ€hrend diese auf demselben Server bereitgestellt werden. Wir haben keine Fehler oder Ressourcenkonflikte mit der Datenbank festgestellt. ZusĂ€tzlich sollte beachtet werden, dass das Plugin im Fehlerfall einen Retray-Mechanismus hat. Und im Fehlerfall schreibt das Plugin ein Datenpaket auf die Festplatte, das nicht eingefĂŒgt werden konnte (das Dateiformat ist praktisch: Nach der Bearbeitung können Sie das korrigierte Paket einfach mit dem Clickhouse-Client einfĂŒgen).
Die vollstÀndige Liste der im Schema verwendeten Software ist in der Tabelle dargestellt:
Liste der verwendeten Software Die Serverkonfiguration mit der ClickHouse-Datenbank ist in der folgenden Tabelle dargestellt:
Wie Sie sehen können, ist dies eine normale Workstation.
Die Tabelle zum Speichern von Protokollen ist wie folgt aufgebaut:
log_web.sqlCREATE TABLE log_web ( logdate Date, logdatetime DateTime CODEC(Delta, LZ4HC), fld_log_file_name LowCardinality( String ), fld_server_name LowCardinality( String ), fld_app_name LowCardinality( String ), fld_app_module LowCardinality( String ), fld_website_name LowCardinality( String ), serverIP LowCardinality( String ), method LowCardinality( String ), uriStem String, uriQuery String, port UInt32, username LowCardinality( String ), clientIP String, clientRealIP String, userAgent String, referer String, response String, subresponse String, win32response String, timetaken UInt64 , uriQuery__utm_medium String , uriQuery__utm_source String , uriQuery__utm_campaign String , uriQuery__utm_term String , uriQuery__utm_content String , uriQuery__yclid String , uriQuery__region String ) Engine = MergeTree() PARTITION BY toYYYYMM(logdate) ORDER BY (fld_app_name, fld_app_module, logdatetime) SETTINGS index_granularity = 8192;
Wir verwenden Standardwerte fĂŒr die Partitionierung (nach Monaten) und die GranularitĂ€t des Index. Alle Felder entsprechen praktisch IIS-ProtokolleintrĂ€gen zum Registrieren von http-Anforderungen. Separate separate Felder zum Speichern von utm-Tags (sie werden beim EinfĂŒgen in die Tabelle aus dem Feld fĂŒr die Abfragezeichenfolge analysiert).
AuĂerdem werden in der Tabelle mehrere Systemfelder zum Speichern von Informationen zu Systemen, Komponenten und Servern hinzugefĂŒgt. In der folgenden Tabelle finden Sie eine Beschreibung dieser Felder. In einer Tabelle speichern wir Protokolle fĂŒr mehrere Systeme.
Auf diese Weise können Sie Grafiken in Grafana effektiv erstellen. Zeigen Sie beispielsweise Anforderungen vom Frontend eines bestimmten Systems an. Dies Àhnelt dem Site-ZÀhler in Yandex.Metrica.
Hier finden Sie einige Statistiken zur Nutzung der Datenbank fĂŒr zwei Monate.
Anzahl der DatensĂ€tze nach System und Komponente SELECT fld_app_name, fld_app_module, count(fld_app_name) AS rows_count FROM log_web GROUP BY fld_app_name, fld_app_module WITH TOTALS ORDER BY fld_app_name ASC, rows_count DESC ââfld_app_nameââââââŹâfld_app_moduleââŹârows_countââ â site1.domain.ru â web â 131441 â â site2.domain.ru â web â 1751081 â â site3.domain.ru â web â 106887543 â â site3.domain.ru â svc â 44908603 â â site3.domain.ru â intgr â 9813911 â â site4.domain.ru â web â 772095 â â site5.domain.ru â web â 17037221 â â site5.domain.ru â intgr â 838559 â â site5.domain.ru â bo â 7404 â â site6.domain.ru â web â 595877 â â site7.domain.ru â web â 27778858 â ââââââââââââââââââââŽâââââââââââââââââŽâââââââââââââ Totals: ââfld_app_nameââŹâfld_app_moduleââŹârows_countââ â â â 210522593 â ââââââââââââââââŽâââââââââââââââââŽâââââââââââââ 11 rows in set. Elapsed: 4.874 sec. Processed 210.52 million rows, 421.67 MB (43.19 million rows/s., 86.51 MB/s.)
Die Datenmenge auf der Festplatte SELECT formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed, formatReadableSize(sum(data_compressed_bytes)) AS compressed, sum(rows) AS total_rows FROM system.parts WHERE table = 'log_web' ââuncompressedââŹâcompressedââŹâtotal_rowsââ â 54.50 GiB â 4.86 GiB â 211427094 â ââââââââââââââââŽâââââââââââââŽâââââââââââââ 1 rows in set. Elapsed: 0.035 sec.
Der Grad der Datenkomprimierung in Spalten SELECT name, formatReadableSize(data_uncompressed_bytes) AS uncompressed, formatReadableSize(data_compressed_bytes) AS compressed, data_uncompressed_bytes / data_compressed_bytes AS compress_ratio FROM system.columns WHERE table = 'log_web' âânameââââââââââââââââââââŹâuncompressedââŹâcompressedââŹâââââcompress_ratioââ â logdate â 401.53 MiB â 1.80 MiB â 223.16665968777315 â â logdatetime â 803.06 MiB â 35.91 MiB â 22.363966401202305 â â fld_log_file_name â 220.66 MiB â 2.60 MiB â 84.99905736932571 â â fld_server_name â 201.54 MiB â 50.63 MiB â 3.980924816977078 â â fld_app_name â 201.17 MiB â 969.17 KiB â 212.55518183686877 â â fld_app_module â 201.17 MiB â 968.60 KiB â 212.67805817411906 â â fld_website_name â 201.54 MiB â 1.24 MiB â 162.7204926761546 â â serverIP â 201.54 MiB â 50.25 MiB â 4.010824061219731 â â method â 201.53 MiB â 43.64 MiB â 4.617721053304486 â â uriStem â 5.13 GiB â 832.51 MiB â 6.311522291936919 â â uriQuery â 2.58 GiB â 501.06 MiB â 5.269731450124478 â â port â 803.06 MiB â 3.98 MiB â 201.91673864241824 â â username â 318.08 MiB â 26.93 MiB â 11.812513794583598 â â clientIP â 2.35 GiB â 82.59 MiB â 29.132328640073343 â â clientRealIP â 2.49 GiB â 465.05 MiB â 5.478382297052563 â â userAgent â 18.34 GiB â 764.08 MiB â 24.57905114484208 â â referer â 14.71 GiB â 1.37 GiB â 10.736792723669906 â â response â 803.06 MiB â 83.81 MiB â 9.582334090987247 â â subresponse â 399.87 MiB â 1.83 MiB â 218.4831068635027 â â win32response â 407.86 MiB â 7.41 MiB â 55.050315514606815 â â timetaken â 1.57 GiB â 402.06 MiB â 3.9947395692010637 â â uriQuery__utm_medium â 208.17 MiB â 12.29 MiB â 16.936148912472955 â â uriQuery__utm_source â 215.18 MiB â 13.00 MiB â 16.548367623199912 â â uriQuery__utm_campaign â 381.46 MiB â 37.94 MiB â 10.055156353418509 â â uriQuery__utm_term â 231.82 MiB â 10.78 MiB â 21.502540454070672 â â uriQuery__utm_content â 441.34 MiB â 87.60 MiB â 5.038260760449327 â â uriQuery__yclid â 216.88 MiB â 16.58 MiB â 13.07721335008116 â â uriQuery__region â 204.35 MiB â 9.49 MiB â 21.52661903446796 â ââââââââââââââââââââââââââŽâââââââââââââââŽâââââââââââââŽâââââââââââââââââââââ 28 rows in set. Elapsed: 0.005 sec.
Beschreibung der verwendeten Komponenten
FileBeat. Datei ProtokollĂŒbertragung
Diese Komponente ĂŒberwacht Ănderungen in den Protokolldateien auf der Festplatte und ĂŒbertrĂ€gt Informationen an LogStash. Es wird auf allen Servern installiert, auf denen Protokolldateien geschrieben werden (normalerweise IIS). Es funktioniert im Endmodus (d. H. ĂbertrĂ€gt nur hinzugefĂŒgte DatensĂ€tze in eine Datei). Sie können jedoch separat die gesamte DateiĂŒbertragung konfigurieren. Dies ist nĂŒtzlich, wenn Sie Daten aus frĂŒheren Monaten herunterladen mĂŒssen. Legen Sie einfach die Protokolldatei in einen Ordner und er wird sie vollstĂ€ndig lesen.
Wenn der Dienst beendet wird, werden die Daten nicht mehr weiter in den Speicher ĂŒbertragen.
Eine Beispielkonfiguration lautet wie folgt:
filebeat.yml filebeat.inputs: - type: log enabled: true paths: - C:/inetpub/logs/LogFiles/W3SVC1
LogStash Protokollsammler
Diese Komponente dient zum Empfangen von ProtokolleintrĂ€gen von FileBeat (oder ĂŒber die RabbitMQ-Warteschlange), zum Parsen und EinfĂŒgen von Bundles in die ClickHouse-Datenbank.
Zum EinfĂŒgen in ClickHouse wird das Plugin Logstash-output-clickhouse verwendet. Das Logstash-Plugin verfĂŒgt ĂŒber einen Mechanismus zum Abrufen von Anforderungen. Bei einem regelmĂ€Ăigen Herunterfahren ist es jedoch besser, den Dienst selbst zu stoppen. Wenn Sie anhalten, sammeln sich Nachrichten in der RabbitMQ-Warteschlange an. Wenn Sie also lĂ€ngere Zeit anhalten, ist es besser, Filebeats auf Servern zu stoppen. In einem Schema, in dem RabbitMQ nicht verwendet wird (im lokalen Netzwerk sendet Filebeat Protokolle direkt an Logstash), funktionieren Filebeats recht akzeptabel und sicher, sodass fĂŒr sie die UnzugĂ€nglichkeit der Ausgabe keine Konsequenzen hat.
Eine Beispielkonfiguration lautet wie folgt:
log_web__filebeat_clickhouse.conf input { beats { port => 5044 type => 'iis' ssl => true ssl_certificate_authorities => ["/etc/logstash/certs/ca.cer", "/etc/logstash/certs/ca-issuing.cer"] ssl_certificate => "/etc/logstash/certs/server.cer" ssl_key => "/etc/logstash/certs/server-pkcs8.key" ssl_verify_mode => "peer" add_field => { "fld_server_name" => "%{[fields][fld_server_name]}" "fld_app_name" => "%{[fields][fld_app_name]}" "fld_app_module" => "%{[fields][fld_app_module]}" "fld_website_name" => "%{[fields][fld_website_name]}" "fld_log_file_name" => "%{source}" "fld_logformat" => "%{[fields][fld_logformat]}" } } rabbitmq { host => "queue.domain.com" port => 5671 user => "q-reader" password => "password" queue => "web_log" heartbeat => 30 durable => true ssl => true
ClickHouse. Protokollspeicher
Protokolle fĂŒr alle Systeme werden in einer Tabelle gespeichert (siehe Anfang des Artikels). Es dient zum Speichern von Informationen zu Anforderungen: Alle Parameter sind fĂŒr verschiedene Formate Ă€hnlich, z. B. IIS-Protokolle, Apache- und Nginx-Protokolle. FĂŒr Anwendungsprotokolle, in denen beispielsweise Fehler, Informationsmeldungen und Warnungen aufgezeichnet werden, wird eine separate Tabelle mit der entsprechenden Struktur bereitgestellt (jetzt in der Entwurfsphase).
Beim Entwerfen einer Tabelle ist es sehr wichtig, den PrimĂ€rschlĂŒssel zu bestimmen (nach dem die Daten wĂ€hrend der Speicherung sortiert werden). Der Grad der Datenkomprimierung und die Abfragegeschwindigkeit hĂ€ngen davon ab. In unserem Beispiel ist der SchlĂŒssel
ORDER BY (fld_app_name, fld_app_module, logdatetime)
Das heiĂt, durch den Namen des Systems, den Namen der Systemkomponente und das Datum des Ereignisses. Das ursprĂŒngliche Datum der Veranstaltung stand an erster Stelle. Nachdem es an den letzten Ort verschoben wurde, begannen die Abfragen etwa zweimal schneller zu arbeiten. Zum Ăndern des PrimĂ€rschlĂŒssels mĂŒssen Sie die Tabelle neu erstellen und die Daten neu laden, damit ClickHouse die Daten auf der Festplatte neu sortiert. Dies ist eine schwierige Operation, daher ist es ratsam, im Voraus zu ĂŒberlegen, was im SortierschlĂŒssel enthalten sein soll.
Es sollte auch beachtet werden, dass relativ in neueren Versionen der Datentyp LowCardinality aufgetreten ist. Bei Verwendung wird die GröĂe der komprimierten Daten fĂŒr Felder mit geringer KardinalitĂ€t (wenige Optionen) stark reduziert.
Jetzt wird Version 19.6 verwendet, und wir planen, die Version auf den neuesten Stand zu bringen. Dazu gehörten beispielsweise wunderbare Funktionen wie Adaptive Granularity, Ăberspringen von Indizes und der DoubleDelta-Codec.
StandardmĂ€Ăig wird die Protokollstufe der Ablaufverfolgung wĂ€hrend der Konfiguration festgelegt. Protokolle werden gedreht und archiviert, aber auf ein Gigabyte erweitert. Wenn dies nicht erforderlich ist, können Sie die Warnstufe festlegen. Die GröĂe des Protokolls nimmt dann stark ab. Die Protokollierungseinstellungen werden in der Datei config.xml festgelegt:
<level>warning</level>
Einige nĂŒtzliche Befehle Debian, Linux Altinity. : https://www.altinity.com/blog/2017/12/18/logstash-with-clickhouse sudo yum search clickhouse-server sudo yum install clickhouse-server.noarch 1. sudo systemctl status clickhouse-server 2. sudo systemctl stop clickhouse-server 3. sudo systemctl start clickhouse-server ( ";") clickhouse-client
LogStash FileBeat-Protokollrouter zur RabbitMQ-Warteschlange
Diese Komponente wird verwendet, um von FileBeat kommende Protokolle an die RabbitMQ-Warteschlange weiterzuleiten. Es gibt zwei Punkte:
- Leider verfĂŒgt FileBeat nicht ĂŒber ein Ausgabe-Plugin zum direkten Schreiben in RabbitMQ. Und eine solche FunktionalitĂ€t ist nach dem ish auf ihrem Github nicht fĂŒr die Implementierung geplant. Es gibt ein Plugin fĂŒr Kafka, aber aus irgendeinem Grund können wir es zu Hause nicht verwenden.
- Es gibt Anforderungen fĂŒr das Sammeln von Protokollen in der DMZ. Basierend darauf mĂŒssen die Protokolle zuerst zur Warteschlange hinzugefĂŒgt werden, und dann liest LogStash von auĂen die EintrĂ€ge aus der Warteschlange.
Daher mĂŒssen Sie genau fĂŒr den Fall des Serverstandorts in der DMZ ein derart etwas kompliziertes Schema verwenden. Eine Beispielkonfiguration lautet wie folgt:
iis_w3c_logs__filebeat_rabbitmq.conf input { beats { port => 5044 type => 'iis' ssl => true ssl_certificate_authorities => ["/etc/pki/tls/certs/app/ca.pem", "/etc/pki/tls/certs/app/ca-issuing.pem"] ssl_certificate => "/etc/pki/tls/certs/app/queue.domain.com.cer" ssl_key => "/etc/pki/tls/certs/app/queue.domain.com-pkcs8.key" ssl_verify_mode => "peer" } } output {
RabbitMQ. Nachrichtenwarteschlange
Diese Komponente wird verwendet, um ProtokolleintrĂ€ge in der DMZ zu puffern. Die Aufnahme erfolgt ĂŒber eine Reihe von Filebeat â LogStash. Das Lesen erfolgt von auĂerhalb der DMZ ĂŒber LogStash. Beim Betrieb ĂŒber RabboitMQ werden ungefĂ€hr 4.000 Nachrichten pro Sekunde verarbeitet.
Das Nachrichtenrouting wird gemÀà dem Namen des Systems konfiguriert, d. H. Basierend auf FileBeat-Konfigurationsdaten. Alle Nachrichten fallen in eine Warteschlange. Wenn der Warteschlangendienst aus irgendeinem Grund gestoppt wird, fĂŒhrt dies nicht zum Verlust von Nachrichten: FileBeats empfĂ€ngt Verbindungsfehler und setzt das temporĂ€re Senden aus. Und LogStash, das aus der Warteschlange liest, empfĂ€ngt auch Netzwerkfehler und wartet, bis die Verbindung wieder aufgenommen wird. Die Daten werden in diesem Fall natĂŒrlich nicht mehr in die Datenbank geschrieben.
Die folgenden Anweisungen werden zum Erstellen und Konfigurieren von Warteschlangen verwendet:
sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin declare exchange
Grafana Dashboards
Diese Komponente wird zur Visualisierung von Ăberwachungsdaten verwendet. In diesem Fall mĂŒssen Sie die ClickHouse-Datenquelle fĂŒr das Grafana 4.6+ Plugin installieren. Wir mussten es ein wenig optimieren, um die Effizienz der Verarbeitung von SQL-Filtern in einem Dashboard zu erhöhen.
Zum Beispiel verwenden wir Variablen, und wenn sie nicht im Filterfeld festgelegt sind, möchten wir, dass keine Bedingung in der WHERE-Form generiert wird (uriStem = `` AND uriStem! = ''). In diesem Fall liest ClickHouse die uriStem-Spalte. Im Allgemeinen haben wir verschiedene Optionen ausprobiert und schlieĂlich das Plugin (Makro $ valueIfEmpty) so korrigiert, dass bei einem leeren Wert 1 zurĂŒckgegeben wird, ohne die Spalte selbst zu erwĂ€hnen.
Und jetzt können Sie diese Abfrage fĂŒr das Diagramm verwenden
$columns(response, count(*) c) from $table where $adhoc and $valueIfEmpty($fld_app_name, 1, fld_app_name = '$fld_app_name') and $valueIfEmpty($fld_app_module, 1, fld_app_module = '$fld_app_module') and $valueIfEmpty($fld_server_name, 1, fld_server_name = '$fld_server_name') and $valueIfEmpty($uriStem, 1, uriStem like '%$uriStem%') and $valueIfEmpty($clientRealIP, 1, clientRealIP = '$clientRealIP')
Dies wird in eine solche SQL konvertiert (beachten Sie, dass leere uriStem-Felder in nur 1 konvertiert wurden).
SELECT t, groupArray((response, c)) AS groupArr FROM ( SELECT (intDiv(toUInt32(logdatetime), 60) * 60) * 1000 AS t, response, count(*) AS c FROM default.log_web WHERE (logdate >= toDate(1565061982)) AND (logdatetime >= toDateTime(1565061982)) AND 1 AND (fld_app_name = 'site1.domain.ru') AND (fld_app_module = 'web') AND 1 AND 1 AND 1 GROUP BY t, response ORDER BY t ASC, response ASC ) GROUP BY t ORDER BY t ASC
Fazit
Das Erscheinen der ClickHouse-Datenbank ist zu einem Meilenstein auf dem Markt geworden. Es war kaum vorstellbar, dass wir sofort kostenlos mit einem leistungsstarken und praktischen Tool fĂŒr die Arbeit mit Big Data ausgestattet waren. Mit zunehmenden Anforderungen (z. B. Sharding und Replikation auf mehrere Server) wird das Schema natĂŒrlich komplexer. Aber auf den ersten Blick ist die Arbeit mit dieser Datenbank sehr schön. Es ist ersichtlich, dass das Produkt "fĂŒr Menschen" hergestellt wird.
Im Vergleich zu ElasticSearch reduzieren sich die Kosten fĂŒr das Speichern und Verarbeiten von Protokollen nach vorlĂ€ufigen SchĂ€tzungen von fĂŒnf auf das Zehnfache. Mit anderen Worten, wenn wir fĂŒr die aktuelle Datenmenge einen Cluster aus mehreren Computern konfigurieren mĂŒssten, benötigen wir bei Verwendung von ClickHouse nur einen Computer mit geringem Stromverbrauch. Ja, ElasticSearch verfĂŒgt natĂŒrlich auch ĂŒber Mechanismen zum Komprimieren von Daten auf der Festplatte und andere Funktionen, die den Ressourcenverbrauch erheblich reduzieren können. Im Vergleich zu ClickHouse ist dies jedoch kostspielig.
Ohne spezielle Optimierungen funktioniert das Laden von Daten und das Abrufen von Daten aus der Datenbank in den Standardeinstellungen mit erstaunlicher Geschwindigkeit. Bisher haben wir ein paar Daten (ungefĂ€hr 200 Millionen DatensĂ€tze), aber der Server selbst ist schwach. In Zukunft können wir dieses Tool fĂŒr andere Zwecke verwenden, die nicht mit der Speicherung von Protokollen zusammenhĂ€ngen. Zum Beispiel fĂŒr End-to-End-Analysen im Bereich Sicherheit, maschinelles Lernen.
Am Ende ein wenig ĂŒber die Vor- und Nachteile.
Nachteile
- Herunterladen von DatensĂ€tzen in groĂen Paketen. Dies ist einerseits eine Funktion, aber Sie mĂŒssen immer noch zusĂ€tzliche Komponenten verwenden, um DatensĂ€tze zu puffern. Diese Aufgabe ist nicht immer einfach, aber dennoch lösbar. Und ich möchte das Schema vereinfachen.
- Einige exotische Funktionen oder neue Funktionen werden hĂ€ufig in neuen Versionen verwendet. Dies wirft Bedenken auf und verringert den Wunsch nach einem Upgrade auf eine neue Version. Beispielsweise ist die Kafka-Tabellen-Engine eine sehr nĂŒtzliche Funktion, mit der Sie Ereignisse aus Kafka direkt lesen können, ohne dass Verbraucher implementiert werden mĂŒssen. Gemessen an der Anzahl der Probleme auf dem Github sind wir jedoch immer noch vorsichtig, diesen Motor in der Produktion einzusetzen. Wenn Sie jedoch keine scharfen Bewegungen zur Seite ausfĂŒhren und die GrundfunktionalitĂ€t verwenden, funktioniert dies stabil.
Vorteile
- Es verlangsamt sich nicht.
- Niedrige Eintrittsschwelle.
- Open Source
- Es ist kostenlos.
- Skaliert gut (Out-of-Box-Sharding / Replikation)
- Es ist in dem vom Ministerium fĂŒr Kommunikation empfohlenen Register russischer Software enthalten.
- Das Vorhandensein offizieller UnterstĂŒtzung von Yandex.