GN⁺: ClickHouse를 위한 강력한 새로운 JSON 데이터 타입 개발
(clickhouse.com)소개
- JSON은 현대 데이터 시스템에서 반구조화 및 비구조화 데이터를 처리하는 표준 포맷으로 자리잡음.
- ClickHouse는 JSON의 중요성을 인식하고 있으며, JSON을 효과적으로 대규모로 활용하는 데 있어 몇 가지 도전 과제를 해결함.
도전 과제
-
도전 과제 1: 진정한 컬럼 지향 저장소
JSON 데이터를 다른 컬럼 타입처럼 효율적으로 처리하기 위해 JSON 경로를 컬럼 지향 방식으로 저장해야 함. -
도전 과제 2: 동적으로 변하는 데이터와 타입 통합 문제
JSON 경로에 대해 서로 다른 데이터 타입을 저장할 수 있도록 하여 데이터의 무결성을 유지해야 함. -
도전 과제 3: 디스크 상의 컬럼 데이터 파일 폭증 방지
많은 고유 JSON 키가 있는 경우 컬럼 파일의 폭증을 방지하기 위해 컬럼 생성에 제한을 두어야 함. -
도전 과제 4: 밀집 저장소
고유하지만 드문 JSON 키가 많은 경우 NULL 또는 기본값을 중복 저장하지 않도록 해야 함.
새로운 JSON 데이터 타입
- ClickHouse는 고성능 JSON 데이터 처리를 위한 새로운 JSON 데이터 타입을 도입함.
- 이 타입은 동적으로 변하는 데이터를 지원하며, 높은 데이터 압축과 쿼리 성능을 유지함.
- JSON 파싱을 위한 힌트 제공을 통해 성능을 조정할 수 있음.
빌딩 블록 1 - Variant 타입
- Variant 타입은 동일한 테이블 컬럼 내에서 서로 다른 데이터 타입의 값을 효율적으로 저장할 수 있도록 함.
- 각 데이터 타입에 대해 별도의 서브컬럼을 사용하여 데이터 무결성을 유지함.
빌딩 블록 2 - Dynamic 타입
- Dynamic 타입은 Variant 타입을 확장하여 사전에 타입을 지정하지 않고도 다양한 데이터 타입을 저장할 수 있도록 함.
- 저장되는 타입의 수를 제한하여 컬럼 파일의 폭증을 방지함.
ClickHouse JSON 타입
- Variant와 Dynamic 타입을 기반으로 새로운 JSON 타입을 구현하여 모든 도전 과제를 해결함.
- JSON 객체의 구조에 관계없이 저장할 수 있으며, JSON 경로를 서브컬럼으로 사용하여 값을 읽을 수 있음.
GN⁺의 정리
- ClickHouse의 새로운 JSON 데이터 타입은 대규모 데이터 분석에서 JSON의 성능 문제를 해결하는 데 중점을 둠.
- 이 타입은 다양한 데이터 타입을 지원하며, 높은 성능과 확장성을 제공함.
- JSON 외에도 XML, YAML 등 다른 반구조화 타입을 지원할 수 있는 기반을 마련함.
- ClickHouse를 사용하는 개발자들에게 유용하며, 데이터 압축과 쿼리 성능에서의 이점을 제공함.
Hacker News 의견
-
PostHog에서 ClickHouse를 사용한 결정은 최고의 선택 중 하나였음. 성능을 확장하면서 동일한 데이터 세트로 더 많은 제품을 구축할 수 있었음
- JSON 기능이 나오기 전부터 ClickHouse를 사용했으며, JSON blob에서 키에 대한 쿼리 패턴을 기반으로 JSON 필드를 물리적 컬럼으로 변환하는 작업을 설정했음
- 물리적 컬럼이 생성되면 런타임 시 해당 컬럼으로 쿼리를 라우팅하여 CPU와 IO 사용량을 크게 절감했음
- ClickHouse의 새로운 JSON 타입은 컴퓨터가 더 적은 작업을 하도록 하여 성능을 향상시킴
- ClickHouse Inc. 팀과 커뮤니티는 매우 빠르게 움직이고 있으며, Parquet와 Iceberg 지원에 대한 기대가 큼
-
JSON에 데이터 타입을 추가하는 것이 JSON으로서의 자격을 유지하는지 궁금함
- 표준 라이브러리 JSON 파서가 읽을 수 없다면 "CH-JSON"과 같은 이름을 사용하는 것이 더 나을 것이라고 생각함
- ClickHouse를 아직 사용해보지 않았지만 결과는 멋지게 들림
-
ClickHouse에서 이 기능을 보는 것이 좋음
- Snowflake는 IPO 이전에 이 기능을 언급한 백서를 발표했으며, JSON을 컬럼으로 비밀리에 변환하여 성능을 향상시켰음
-
ClickHouse를 평가할 때 Apache Pinot도 고려해볼 가치가 있음
- ClickHouse는 단일 머신 설치를 위해 설계되었으며 클러스터 지원이 부족함
- Pinot는 수평 확장이 더 쉬우며, 스타 트리 인덱스를 활용하면 다차원 분석에서 성능 차이가 큼
-
동적으로 변경되는 데이터에 대해 흥미로움을 느낌
- Elasticsearch에서 로그를 저장할 때 발생하는 타입 설정 문제를 해결할 수 있기를 바람
-
ClickHouse의 JSON 지원을 기다려왔으며, 새로운 타입과 동적 컬럼이 특히 유용할 것임
-
ClickHouse는 훌륭한 도구임
- OLAP에 사용하며, 6억 행, 300GB의 데이터베이스를 문제 없이 처리함
- 새로운 JSON 데이터 타입이 현재 중첩된 튜플로 해결하는 사용 사례에 더 나을 것으로 기대함
-
몇 주 전에 ClickHouse를 시도했을 때, 컬럼 이름을 기반으로 파일을 명명하여 긴 파일 이름과 슬래시로 인해 파일 시스템에서 오류가 발생했음
-
ClickHouse는 충분히 사용되지 않음
- 'postgres가 전부다'라는 인식이 있지만, 필요 이상으로 확장해야 할 경우 ClickHouse를 고려해야 함
- clickhouse-local은 SQL을 사용한 CSV 처리에 뛰어나며, Google Sheets나 Excel에 지쳤을 때 강력히 추천함