2 points par GN⁺ 2024-10-23 | 1 commentaires | Partager sur WhatsApp

Introduction

  • JSON s’est imposé comme le format standard pour traiter les données semi-structurées et non structurées dans les systèmes de données modernes.
  • ClickHouse reconnaît l’importance de JSON et a relevé plusieurs défis liés à son utilisation efficace à grande échelle.

Défis

  • Défi 1 : un véritable stockage orienté colonnes
    Pour traiter efficacement les données JSON comme les autres types de colonnes, il faut stocker les chemins JSON selon une approche orientée colonnes.

  • Défi 2 : intégration des données dynamiques et des types
    Il faut pouvoir stocker différents types de données pour un même chemin JSON afin de préserver l’intégrité des données.

  • Défi 3 : éviter l’explosion du nombre de fichiers de colonnes sur disque
    En présence d’un grand nombre de clés JSON uniques, il faut limiter la création de colonnes pour éviter la prolifération des fichiers de colonnes.

  • Défi 4 : stockage dense
    Lorsqu’il existe de nombreuses clés JSON uniques mais rares, il faut éviter de stocker de manière redondante des valeurs NULL ou des valeurs par défaut.

Nouveau type de données JSON

  • ClickHouse introduit un nouveau type de données JSON pour un traitement JSON haute performance.
  • Ce type prend en charge les données dynamiques tout en conservant une forte compression des données et de bonnes performances de requête.
  • Les performances peuvent être ajustées en fournissant des indications pour le parsing JSON.

Bloc de construction 1 - type Variant

  • Le type Variant permet de stocker efficacement des valeurs de types de données différents dans une même colonne de table.
  • Il utilise une sous-colonne distincte pour chaque type de données afin de préserver l’intégrité des données.

Bloc de construction 2 - type Dynamic

  • Le type Dynamic étend le type Variant pour permettre le stockage de différents types de données sans définir les types à l’avance.
  • Il limite le nombre de types stockés afin d’éviter l’explosion des fichiers de colonnes.

Type JSON de ClickHouse

  • En s’appuyant sur les types Variant et Dynamic, ClickHouse implémente un nouveau type JSON qui répond à tous ces défis.
  • Il peut stocker des objets JSON quelle que soit leur structure, et permet de lire les valeurs en utilisant les chemins JSON comme sous-colonnes.

Le récapitulatif de GN⁺

  • Le nouveau type de données JSON de ClickHouse vise à résoudre les problèmes de performance de JSON dans l’analyse de données à grande échelle.
  • Ce type prend en charge divers types de données et offre de hautes performances ainsi qu’une bonne extensibilité.
  • Il pose les bases de la prise en charge d’autres types semi-structurés comme XML et YAML, au-delà de JSON.
  • Il sera utile aux développeurs utilisant ClickHouse, avec des avantages en matière de compression des données et de performances de requête.

1 commentaires

 
GN⁺ 2024-10-23
Commentaires sur Hacker News
  • Chez PostHog, le choix d’utiliser ClickHouse a été l’une de leurs meilleures décisions. Cela leur a permis de faire monter les performances en charge tout en construisant davantage de produits à partir du même jeu de données

    • Ils utilisaient ClickHouse avant même l’arrivée des fonctionnalités JSON, et avaient mis en place un système transformant les champs JSON en colonnes physiques selon les motifs de requêtes sur les clés du blob JSON
    • Une fois les colonnes physiques créées, les requêtes étaient redirigées vers ces colonnes à l’exécution, ce qui réduisait fortement l’utilisation du CPU et des E/S
    • Le nouveau type JSON de ClickHouse améliore les performances en demandant moins de travail à l’ordinateur
    • L’équipe de ClickHouse Inc. et la communauté avancent très vite, et il y a beaucoup d’attentes autour du support de Parquet et d’Iceberg
  • Je me demande si ajouter des types de données à JSON lui permet encore de rester du JSON

    • Si un parseur JSON de bibliothèque standard ne peut pas le lire, il vaudrait peut-être mieux utiliser un nom comme « CH-JSON »
    • Je n’ai pas encore essayé ClickHouse, mais le résultat semble impressionnant
  • C’est bien de voir cette fonctionnalité arriver dans ClickHouse

    • Snowflake avait publié un livre blanc mentionnant cette fonctionnalité avant son IPO, en convertissant discrètement le JSON en colonnes pour améliorer les performances
  • Lorsqu’on évalue ClickHouse, Apache Pinot mérite aussi d’être pris en compte

    • ClickHouse a été conçu pour une installation sur une seule machine et son support du clustering est insuffisant
    • Pinot se prête plus facilement à l’extension horizontale, et avec les index star-tree, la différence de performance est importante en analyse multidimensionnelle
  • Je trouve cela intéressant pour les données qui changent dynamiquement

    • J’espère que cela pourra résoudre les problèmes de définition de types rencontrés lors du stockage de logs dans Elasticsearch
  • J’attendais le support JSON de ClickHouse, et le nouveau type ainsi que les colonnes dynamiques seront particulièrement utiles

  • ClickHouse est un excellent outil

    • Je l’utilise pour de l’OLAP, et il gère sans problème une base de données de 600 millions de lignes et 300 Go
    • J’espère que le nouveau type de données JSON sera mieux adapté aux cas d’usage que je résous aujourd’hui avec des tuples imbriqués
  • Quand j’ai essayé ClickHouse il y a quelques semaines, il nommait les fichiers à partir des noms de colonnes, ce qui provoquait des erreurs du système de fichiers à cause de noms trop longs et de slashs

  • ClickHouse est sous-utilisé

    • Il existe l’idée que « postgres suffit à tout », mais si l’on doit passer à une échelle au-delà du raisonnable, il faut envisager ClickHouse
    • clickhouse-local est excellent pour traiter des CSV avec SQL, et je le recommande vivement à ceux qui en ont assez de Google Sheets ou d’Excel