2 puntos por GN⁺ 2024-10-23 | 1 comentarios | Compartir por WhatsApp

Introducción

  • JSON se ha consolidado como el formato estándar para manejar datos semiestructurados y no estructurados en los sistemas de datos modernos.
  • ClickHouse reconoce la importancia de JSON y ha resuelto varios retos para usarlo de forma efectiva a gran escala.

Retos

  • Reto 1: un almacenamiento verdaderamente orientado a columnas
    Para procesar datos JSON con la misma eficiencia que otros tipos de columna, es necesario almacenar las rutas JSON de forma orientada a columnas.

  • Reto 2: integración de datos que cambian dinámicamente y de tipos
    Se debe mantener la integridad de los datos permitiendo almacenar distintos tipos de datos para las rutas JSON.

  • Reto 3: evitar la explosión de archivos de datos de columnas en disco
    Cuando hay muchas claves JSON únicas, se deben imponer límites a la creación de columnas para evitar una explosión de archivos de columnas.

  • Reto 4: almacenamiento denso
    Cuando hay muchas claves JSON únicas pero poco frecuentes, se debe evitar almacenar de forma redundante NULL o valores predeterminados.

Nuevo tipo de dato JSON

  • ClickHouse introduce un nuevo tipo de dato JSON para el procesamiento de JSON de alto rendimiento.
  • Este tipo admite datos que cambian dinámicamente y mantiene una alta compresión de datos y rendimiento en consultas.
  • Es posible ajustar el rendimiento proporcionando pistas para el parseo de JSON.

Bloque base 1 - tipo Variant

  • El tipo Variant permite almacenar eficientemente valores de distintos tipos de datos dentro de la misma columna de una tabla.
  • Mantiene la integridad de los datos usando una subcolumna separada para cada tipo de dato.

Bloque base 2 - tipo Dynamic

  • El tipo Dynamic amplía el tipo Variant para permitir almacenar diversos tipos de datos sin especificarlos de antemano.
  • Limita la cantidad de tipos almacenados para evitar la explosión de archivos de columnas.

Tipo JSON de ClickHouse

  • Basándose en los tipos Variant y Dynamic, se implementó un nuevo tipo JSON que resuelve todos los retos.
  • Puede almacenar datos sin importar la estructura del objeto JSON, y permite leer valores usando rutas JSON como subcolumnas.

Resumen de GN⁺

  • El nuevo tipo de dato JSON de ClickHouse se enfoca en resolver los problemas de rendimiento de JSON en el análisis de datos a gran escala.
  • Este tipo admite diversos tipos de datos y ofrece alto rendimiento y escalabilidad.
  • Además de JSON, sienta las bases para soportar otros tipos semiestructurados como XML y YAML.
  • Es útil para desarrolladores que usan ClickHouse y ofrece ventajas en compresión de datos y rendimiento de consultas.

1 comentarios

 
GN⁺ 2024-10-23
Comentarios de Hacker News
  • En PostHog, decidir usar ClickHouse fue una de las mejores decisiones. Nos permitió escalar el rendimiento y construir más productos sobre el mismo conjunto de datos

    • Usábamos ClickHouse incluso antes de que existieran las funciones JSON, y configuramos un proceso para convertir campos JSON en columnas físicas basándonos en los patrones de consulta sobre claves dentro de blobs JSON
    • Una vez creadas las columnas físicas, en tiempo de ejecución enrútabamos las consultas hacia esas columnas, lo que redujo mucho el uso de CPU e IO
    • El nuevo tipo JSON de ClickHouse mejora el rendimiento al hacer que la computadora tenga que trabajar menos
    • El equipo de ClickHouse Inc. y la comunidad se mueven muy rápido, y hay mucha expectativa por el soporte para Parquet e Iceberg
  • Me pregunto si agregar tipos de datos a JSON hace que siga calificando como JSON

    • Si un parser JSON de la biblioteca estándar no puede leerlo, creo que sería mejor usar un nombre como "CH-JSON"
    • Aún no he usado ClickHouse, pero el resultado suena genial
  • Qué bueno ver esta funcionalidad en ClickHouse

    • Snowflake publicó un whitepaper sobre esto antes del IPO, y convertía JSON a columnas en secreto para mejorar el rendimiento
  • Al evaluar ClickHouse, también vale la pena considerar Apache Pinot

    • ClickHouse fue diseñado para instalaciones en una sola máquina y tiene soporte limitado para clústeres
    • Pinot escala horizontalmente con más facilidad, y usando índices star-tree la diferencia de rendimiento en análisis multidimensional es grande
  • Me parece interesante para datos que cambian dinámicamente

    • Ojalá pueda resolver los problemas de configuración de tipos que aparecen al guardar logs en Elasticsearch
  • Llevaba tiempo esperando el soporte JSON de ClickHouse, y el nuevo tipo junto con las columnas dinámicas será especialmente útil

  • ClickHouse es una gran herramienta

    • Lo uso para OLAP y maneja sin problemas una base de datos de 600 millones de filas y 300 GB
    • Espero que el nuevo tipo de datos JSON sea mejor para casos de uso que hoy resolvemos con tuplas anidadas
  • Cuando probé ClickHouse hace unas semanas, nombraba los archivos según el nombre de la columna, y por nombres de archivo largos y barras terminaba generando errores en el sistema de archivos

  • ClickHouse no se usa lo suficiente

    • Existe la idea de que "Postgres lo es todo", pero si necesitas escalar más allá de lo razonable, deberías considerar ClickHouse
    • clickhouse-local es excelente para procesar CSV con SQL, y lo recomiendo mucho si ya te cansaste de Google Sheets o Excel