피드로 돌아가기
Finding a Practical Analytics Format for Structured JSON Logs
Dev.toDev.to
Database

JSON 로그 분석 최적화를 위한 Columnar 포맷 기반 Export 전략 분석

Finding a Practical Analytics Format for Structured JSON Logs

Viacheslav Poturaev2026년 4월 23일10intermediate

Context

대규모 Structured JSON 로그의 중첩 구조와 비일관성으로 인한 쿼리 성능 저하 발생. 단순 Flattening을 넘어 데이터 셰이프에 따른 최적의 저장 포맷과 Ingestion 경로 선택의 필요성 대두.

Technical Solution

  • Key Scan 및 Type Inference를 위한 Two-pass 스캔 로직 설계
  • CSV의 빠른 Write 속도와 Parquet의 압축 효율성을 대조한 Trade-off 분석
  • Database API 직접 호출 대비 CLI Bulk Loader를 통한 Ingestion 오버헤드 제거
  • 데이터 특성(Narrow/Normal/Wide)에 따른 Columnar storage의 저장 효율성 검증
  • Storage 효율과 CPU 비용 사이의 최적점을 찾기 위한 Snappy 및 Zstd 압축 알고리즘 비교
  • Row-wise Appender의 Driver Boundary 교차 비용으로 인한 성능 저하 확인

Impact

  • Parquet Zstd 도입 시 CSV 대비 저장 공간 최대 828% 절감
  • Wide 데이터셋에서 SQLite Direct Insert 대비 DuckDB CLI stdin의 Write 속도 약 29배 향상
  • Narrow 데이터셋 기준 CSV, Parquet, DuckDB CLI 간 Export 시간 차이 수 % 내외로 최소화

Key Takeaway

데이터의 Cardinality와 Column 수에 따라 최적의 포맷이 결정되므로 단일 벤치마크가 아닌 데이터 셰이프 기반의 선택 전략 필요. 분석 목적의 데이터라면 Portable Columnar Artifact를 우선 생성하고 최종 타겟 DB로 로드하는 파이프라인이 가장 안전한 설계 방식임.


1. 빠른 Raw Export와 임시 텍스트 출력이 우선인 경우 CSV 채택

2. 범용적인 분석 Artifact가 필요한 경우 Parquet Snappy를 기본값으로 설정

3. 저장 공간 및 전송 비용 최소화가 필수적인 경우 Parquet Zstd 적용

4. 즉각적인 쿼리 성능이 필요한 경우 DuckDB CLI를 통한 Bulk Load 수행

5. DB 입력 시 Direct Insert 대신 CLI Bulk Loader 사용 여부 검토

원문 읽기