2 pontos por GN⁺ 2024-10-23 | 1 comentários | Compartilhar no WhatsApp

Introdução

  • O JSON se consolidou como o formato padrão para lidar com dados semiestruturados e não estruturados em sistemas de dados modernos.
  • O ClickHouse reconhece a importância do JSON e resolveu alguns desafios para utilizá-lo de forma eficaz em grande escala.

Desafios

  • Desafio 1: armazenamento verdadeiramente orientado a colunas
    Para processar dados JSON com a mesma eficiência de outros tipos de coluna, é necessário armazenar os caminhos JSON de forma orientada a colunas.

  • Desafio 2: dados que mudam dinamicamente e problema de integração de tipos
    É necessário manter a integridade dos dados permitindo armazenar diferentes tipos de dados para caminhos JSON.

  • Desafio 3: evitar a explosão de arquivos de dados de colunas em disco
    Quando há muitas chaves JSON únicas, é preciso impor limites à criação de colunas para evitar a explosão de arquivos de coluna.

  • Desafio 4: armazenamento denso
    Quando há muitas chaves JSON únicas, porém raras, é preciso evitar armazenar repetidamente NULL ou valores padrão.

Novo tipo de dado JSON

  • O ClickHouse introduz um novo tipo de dado JSON para processamento de dados JSON de alto desempenho.
  • Esse tipo oferece suporte a dados que mudam dinamicamente, mantendo alta compressão de dados e desempenho de consulta.
  • É possível ajustar o desempenho fornecendo hints para o parsing de JSON.

Bloco de construção 1 - tipo Variant

  • O tipo Variant permite armazenar com eficiência valores de diferentes tipos de dados na mesma coluna da tabela.
  • Ele mantém a integridade dos dados usando uma subcoluna separada para cada tipo de dado.

Bloco de construção 2 - tipo Dynamic

  • O tipo Dynamic expande o tipo Variant para permitir o armazenamento de vários tipos de dados sem definir os tipos previamente.
  • Ele limita a quantidade de tipos armazenados para evitar a explosão de arquivos de coluna.

Tipo JSON do ClickHouse

  • Com base nos tipos Variant e Dynamic, foi implementado um novo tipo JSON que resolve todos os desafios.
  • Ele pode armazenar dados independentemente da estrutura do objeto JSON, e os valores podem ser lidos usando caminhos JSON como subcolunas.

Resumo do GN⁺

  • O novo tipo de dado JSON do ClickHouse foca em resolver problemas de desempenho de JSON em análises de dados em grande escala.
  • Esse tipo oferece suporte a diversos tipos de dados, além de alto desempenho e escalabilidade.
  • Ele também estabelece a base para suportar outros tipos semiestruturados além de JSON, como XML e YAML.
  • É útil para desenvolvedores que usam ClickHouse e oferece vantagens em compressão de dados e desempenho de consultas.

1 comentários

 
GN⁺ 2024-10-23
Comentários do Hacker News
  • Na PostHog, a decisão de usar ClickHouse foi uma das melhores escolhas. Isso permitiu escalar o desempenho e construir mais produtos com o mesmo conjunto de dados

    • Já usávamos ClickHouse antes da chegada dos recursos de JSON e configuramos um processo para transformar campos JSON em colunas físicas com base nos padrões de consulta das chaves dentro dos blobs JSON
    • Depois que as colunas físicas eram criadas, as consultas eram roteadas para essas colunas em tempo de execução, reduzindo bastante o uso de CPU e IO
    • O novo tipo JSON do ClickHouse melhora o desempenho ao fazer o computador trabalhar menos
    • A equipe da ClickHouse Inc. e a comunidade estão avançando muito rápido, e há grande expectativa pelo suporte a Parquet e Iceberg
  • Fico me perguntando se adicionar tipos de dados ao JSON ainda mantém sua condição de JSON

    • Se um parser JSON da biblioteca padrão não conseguir ler isso, acho que seria melhor usar um nome como "CH-JSON"
    • Ainda não usei ClickHouse, mas o resultado parece muito interessante
  • É bom ver esse recurso no ClickHouse

    • A Snowflake publicou um whitepaper mencionando esse recurso antes do IPO, convertendo secretamente JSON em colunas para melhorar o desempenho
  • Ao avaliar o ClickHouse, também vale a pena considerar o Apache Pinot

    • O ClickHouse foi projetado para instalação em uma única máquina e tem suporte limitado a cluster
    • O Pinot é mais fácil de escalar horizontalmente e, com índices star-tree, a diferença de desempenho em análises multidimensionais é grande
  • Acho isso interessante para dados que mudam dinamicamente

    • Espero que isso possa resolver os problemas de configuração de tipos que surgem ao armazenar logs no Elasticsearch
  • Eu estava esperando pelo suporte a JSON no ClickHouse, e o novo tipo junto com colunas dinâmicas deve ser especialmente útil

  • ClickHouse é uma ferramenta excelente

    • Eu o uso para OLAP, e ele lida sem problemas com um banco de dados de 600 milhões de linhas e 300 GB
    • Espero que o novo tipo de dados JSON seja melhor para casos de uso que hoje resolvemos com tuplas aninhadas
  • Quando testei o ClickHouse algumas semanas atrás, ele nomeava arquivos com base nos nomes das colunas, e nomes longos junto com barras causavam erros no sistema de arquivos

  • ClickHouse não é usado o suficiente

    • Existe a percepção de que 'postgres é tudo', mas se você precisar escalar além do necessário, vale considerar o ClickHouse
    • clickhouse-local é excelente para processar CSV com SQL, e eu o recomendo fortemente quando você se cansar do Google Sheets ou do Excel