2 Punkte von GN⁺ 2024-10-23 | 1 Kommentare | Auf WhatsApp teilen

Einführung

  • JSON hat sich in modernen Datensystemen als Standardformat für die Verarbeitung semistrukturierter und unstrukturierter Daten etabliert.
  • ClickHouse erkennt die Bedeutung von JSON und hat einige Herausforderungen gelöst, um JSON effizient im großen Maßstab zu nutzen.

Herausforderungen

  • Herausforderung 1: Echter spaltenorientierter Speicher
    Um JSON-Daten so effizient wie andere Spaltentypen zu verarbeiten, müssen JSON-Pfade spaltenorientiert gespeichert werden.

  • Herausforderung 2: Dynamisch wechselnde Daten und Probleme bei der Typintegration
    Es muss möglich sein, für JSON-Pfade unterschiedliche Datentypen zu speichern, um die Datenintegrität zu erhalten.

  • Herausforderung 3: Verhinderung einer Explosion von Spaltendatendateien auf der Festplatte
    Bei vielen eindeutigen JSON-Schlüsseln müssen Grenzen für die Spaltenerzeugung gesetzt werden, um eine Explosion von Spaltendateien zu verhindern.

  • Herausforderung 4: Dichte Speicherung
    Wenn es viele eindeutige, aber selten vorkommende JSON-Schlüssel gibt, muss verhindert werden, dass NULL oder Standardwerte redundant gespeichert werden.

Neuer JSON-Datentyp

  • ClickHouse führt einen neuen JSON-Datentyp für die leistungsstarke Verarbeitung von JSON-Daten ein.
  • Dieser Typ unterstützt dynamisch wechselnde Daten und bewahrt gleichzeitig hohe Datenkompression und Query-Performance.
  • Durch das Bereitstellen von Hinweisen für das JSON-Parsing lässt sich die Performance anpassen.

Baustein 1 - Variant-Typ

  • Der Variant-Typ ermöglicht es, Werte unterschiedlicher Datentypen effizient in derselben Tabellenspalte zu speichern.
  • Für jeden Datentyp wird eine separate Unterspalte verwendet, um die Datenintegrität zu wahren.

Baustein 2 - Dynamic-Typ

  • Der Dynamic-Typ erweitert den Variant-Typ, sodass verschiedene Datentypen gespeichert werden können, ohne Typen im Voraus festzulegen.
  • Die Anzahl der gespeicherten Typen wird begrenzt, um eine Explosion von Spaltendateien zu verhindern.

ClickHouse-JSON-Typ

  • Auf Basis der Typen Variant und Dynamic wird ein neuer JSON-Typ implementiert, der alle Herausforderungen löst.
  • Er kann unabhängig von der Struktur eines JSON-Objekts gespeichert werden, und Werte lassen sich über JSON-Pfade als Unterspalten lesen.

Zusammenfassung von GN⁺

  • Der neue JSON-Datentyp von ClickHouse konzentriert sich darauf, Performance-Probleme von JSON bei der Analyse großer Datenmengen zu lösen.
  • Dieser Typ unterstützt verschiedene Datentypen und bietet hohe Performance und Skalierbarkeit.
  • Er schafft außerdem die Grundlage dafür, neben JSON auch andere semistrukturierte Typen wie XML oder YAML zu unterstützen.
  • Für Entwickler, die ClickHouse verwenden, ist er nützlich und bietet Vorteile bei Datenkompression und Query-Performance.

1 Kommentare

 
GN⁺ 2024-10-23
Hacker-News-Kommentare
  • Die Entscheidung, bei PostHog ClickHouse einzusetzen, war eine der besten überhaupt. Damit konnten wir die Performance skalieren und gleichzeitig mehr Produkte auf demselben Datensatz aufbauen.

    • Wir haben ClickHouse schon vor den JSON-Funktionen verwendet und eine Verarbeitung eingerichtet, die JSON-Felder anhand der Query-Muster für Schlüssel in JSON-Blobs in physische Spalten umwandelt.
    • Sobald physische Spalten erzeugt waren, wurden Queries zur Laufzeit an diese Spalten weitergeleitet, was CPU- und IO-Nutzung erheblich reduziert hat.
    • Der neue JSON-Typ von ClickHouse verbessert die Performance, indem der Computer weniger Arbeit erledigen muss.
    • Das Team von ClickHouse Inc. und die Community bewegen sich sehr schnell, und die Unterstützung für Parquet und Iceberg ist sehr vielversprechend.
  • Ich frage mich, ob das Hinzufügen von Datentypen zu JSON noch als JSON durchgeht.

    • Wenn ein JSON-Parser aus der Standardbibliothek es nicht lesen kann, wäre ein Name wie „CH-JSON“ meiner Meinung nach besser.
    • Ich habe ClickHouse noch nicht ausprobiert, aber das Ergebnis klingt großartig.
  • Schön, diese Funktion in ClickHouse zu sehen.

    • Snowflake hat vor dem IPO ein Whitepaper veröffentlicht, in dem diese Funktion erwähnt wurde, und JSON heimlich in Spalten umgewandelt, um die Performance zu verbessern.
  • Wenn man ClickHouse evaluiert, ist Apache Pinot ebenfalls einen Blick wert.

    • ClickHouse wurde für die Installation auf einer einzelnen Maschine entworfen und bietet nur begrenzte Cluster-Unterstützung.
    • Pinot lässt sich einfacher horizontal skalieren, und mit Star-Tree-Indizes gibt es bei multidimensionalen Analysen deutliche Performance-Unterschiede.
  • Finde das für dynamisch veränderliche Daten interessant.

    • Hoffentlich kann es die Probleme mit Typdefinitionen lösen, die beim Speichern von Logs in Elasticsearch auftreten.
  • Ich habe auf die JSON-Unterstützung in ClickHouse gewartet, und der neue Typ sowie dynamische Spalten werden besonders nützlich sein.

  • ClickHouse ist ein hervorragendes Tool.

    • Ich nutze es für OLAP, und es verarbeitet eine Datenbank mit 600 Millionen Zeilen und 300 GB problemlos.
    • Ich erwarte, dass der neue JSON-Datentyp besser für Anwendungsfälle geeignet ist, die ich derzeit mit verschachtelten Tupeln löse.
  • Als ich ClickHouse vor ein paar Wochen ausprobiert habe, wurden Dateien anhand der Spaltennamen benannt, was wegen der langen Dateinamen und Slashes zu Fehlern im Dateisystem führte.

  • ClickHouse wird nicht genug genutzt.

    • Es gibt die Wahrnehmung, dass „Postgres alles ist“, aber wenn man mehr skalieren muss, als eigentlich nötig sein sollte, sollte man ClickHouse in Betracht ziehen.
    • clickhouse-local ist hervorragend für die Verarbeitung von CSV mit SQL und sehr zu empfehlen, wenn man Google Sheets oder Excel leid ist.