반응형

📌 1. ClickHouse란 무엇인가?

ClickHouse는 Yandex가 개발한 컬럼 지향(Columnar) OLAP 데이터베이스입니다.
핵심 컨셉은:

  • 초고속 읽기 성능 (OLAP 분석 쿼리)
  • 압축률 우수
  • 분산 처리 가능
  • 실시간 분석(near real-time)

ClickHouse는 “데이터 웨어하우스 + 실시간 로그·이벤트 분석 엔진”의 중간 형태로 볼 수 있습니다.

대표적 사용처:

  • 로그 분석 (ELK 대체)
  • 모니터링/Metric 저장 (Prometheus 대체 가능)
  • 이벤트 분석 (사용자 행동 로그)
  • 대규모 시계열 데이터 처리
  • BI/OLAP 분석

📌 2. ClickHouse vs MySQL 비교

구분 ClickHouse MySQL
DB 유형 OLAP (컬럼 지향) OLTP (행(Row) 지향)
목적 대규모 읽기/집계 실시간 트랜잭션
쓰기 성능 매우 빠름(배치 인서트 최적) 빠름(단건 트랜잭션 강함)
읽기 성능 대량 데이터 집계에 매우 강함 단건 조회/조인에 강함
인덱스 스킵 인덱스, 파티션, sparse index B-Tree 인덱스
조인 제한적, 새로운 버전에서 개선됨 매우 강력
트랜잭션 거의 없음 (OLAP이므로) ACID 준수
확장성 수평 확장 매우 우수 수평 확장 어려움
저장 구조 컬럼 저장 + 고압축 행 기반 저장
활용 적합성 로그, 이벤트 분석, 대용량 OLAP 주문/결제 시스템, ERP, CRUD 서비스

 

요약하면

  • MySQL → 서비스 DB(트랜잭션)
  • ClickHouse → 분석, 로그, 대규모 집계

특히 초당 수천만 로그를 넣고 바로 분석하는 구조에서는 ClickHouse가 MySQL을 압도적으로 능가합니다.

 

📌 3. ClickHouse vs DuckDB 차이점

DuckDB와 ClickHouse는 둘 다 OLAP 엔진입니다. 그러나 철학이 완전히 다릅니다.

구분 ClickHouse DuckDB
설계 철학 서버형 OLAP DB, 분산 확장 임베디드 OLAP 엔진, 파일 기반
설치 형태 서버/클러스터로 동작 Python·App에 포함되는 DB (SQLite처럼)
데이터 규모 수십~수백억 데이터 싱글 머신 메모리 범위
스토리지 서버 스토리지, S3 등 Parquet/CSV/Local 파일
사용 목적 로그 플랫폼, DW, 실시간 분석 로컬 데이터 분석, 파이프라인, 임시 쿼리
확장성 수평 확장 가능 단일 노드 중심
커넥션 방식 TCP/HTTP 서버 라이브러리 호출(duckdb.connect())
쓰기 방식 대량 배치 삽입 최적화 파일 스캔 기반 즉시 분석에 강함
운영 비용 운영 필요 운영 비용 거의 없음
쿼리 성능 대규모 데이터 집계 우수 소규모~중규모 데이터 분석 최강

 

가장 중요한 차이

  • ClickHouse = 서버 기반 고성능 분석 DB
  • DuckDB = 애플리케이션 내부 분석 엔진 (SQLite의 OLAP 버전)

둘 다 OLAP이지만
ClickHouse는 운영형(operational), DuckDB는 임베디드 분석형 입니다.

 

📌 4. 어떤 상황에 어떤 DB를 써야 하는가?

🔥 ClickHouse 추천 상황

  • 초당 수십만 ~ 수천만 로그 적재
  • 엔터프라이즈 수준의 실시간 대시보드
  • Grafana, Kibana 대체
  • 이벤트 분석(Amplitude/Mixpanel 대체)
  • 분산 환경 필수

🐤 DuckDB 추천 상황

  • Python 기반 데이터 분석
  • CSV/Parquet 파일 분석
  • 로그 파이프라인의 임시 ETL, 일시적 분석
  • 서버 없이 로컬/단일 노드에서 빠른 분석

🐬 MySQL 추천 상황

  • CRUD 중심 서비스 DB
  • 사용자/상품/결제 등 트랜잭션 중심
  • OLAP에는 부적합 (복잡한 집계가 느림)

📌 5. 로그 분석을 기준으로 한 선택 가이드

로그 규모 추천
수십 GB 이하 DuckDB
수백 GB~수 TB (싱글 서버 가능) ClickHouse
수 TB 이상 + 분산 필요 ClickHouse 클러스터
트랜잭션 로그 저장/일반 서비스 로그 MySQL(OLTP)
임시 분석/개발환경에서 분석 DuckDB

 

📌 최종 요약

ClickHouse

  • 고성능 컬럼 기반 OLAP DB
  • 로그/이벤트/모니터링 분석에 최적
  • MySQL보다 훨씬 빠른 대규모 집계 성능

MySQL

  • 트랜잭션(DBMS)
  • CRUD·조인 처리에 강함
  • OLAP·로그 분석은 적합하지 않음

DuckDB

  • 로컬/임베디드 OLAP 엔진
  • 파일 분석/ETL/개발환경에서 최강
  • ClickHouse처럼 서버·클러스터 운영은 불가능
반응형
반응형

🔹 COLLATION() 함수 사용

set @stock_code := '996161';
SELECT COLLATION(@stock_code);

결과 예시:

 

🔹 CHARSET() 함수 사용

set @stock_code := '996161';
SELECT CHARSET(@stock_code);

 결과 예시:

 

 

🔹 변수의 Collaton 과 컬럼의 Collation이 다를 경우의 처리 방법

  • 일반적인 변수 선언
set @stock_code := '1177851';
SELECT COLLATION(@stock_code);

     

  • Collation을 지정하여 선언
set @stock_code := '1177851' collate utf8mb4_0900_ai_ci;
SELECT COLLATION(@stock_code);

 

  • Convert를 사용하여 변환
set @stock_code := convert('1177851' using utf8mb4);
SELECT COLLATION(@stock_code);

반응형
반응형

 

1️⃣ SHOW VARIABLES 사용

SHOW VARIABLES LIKE 'character\_set\_%';

결과 예시:

 

2️⃣ 특정 데이터베이스의 문자셋 조회

SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'database_name';

 결과 예시:

 

 

 

3️⃣ 특정 테이블의 문자셋 조회 - 1

show create table tbl_stock_list_us;

 결과 예시:

CREATE TABLE `tbl_stock_list_us` (
  `event_date` date NOT NULL COMMENT '기준일',
  `symbol_code` varchar(10) NOT NULL COMMENT '종목 코드',
  `last_open_raw` double NOT NULL COMMENT '시가 Raw',
  `last_max_raw` double NOT NULL COMMENT '고가 Raw',
  `last_min_raw` double NOT NULL COMMENT '저가 Raw',
  `last_close_raw` double NOT NULL COMMENT '종가 Raw',
  `change_precent_raw` double NOT NULL COMMENT '변동률(퍼센트) Raw',
  `volume_raw` double NOT NULL COMMENT '거래량',
  `upd_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`event_date`,`symbol_code`),
  UNIQUE KEY `idx_01` (`symbol_code`,`event_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

 

3️⃣ 특정 테이블의 문자셋 조회 - 2

SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_stock' AND TABLE_NAME = 'tbl_stock_list_us';

 결과 예시:

 

4️⃣ 특정 열(Column)의 문자셋 조회

SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'db_stock' AND TABLE_NAME = 'tbl_stock_list_us';

 

 결과 예시:

반응형
반응형

MySQL에서 utf8mb4_0900_ai_ci와 utf8mb4_unicode_ci는 둘 다 utf8mb4 문자셋을 사용하는 대소문자 무시(_ci: case-insensitive) 비교(collation) 방식이지만, 주요한 차이점이 있습니다.

🔹 utf8mb4_unicode_ci

  • MySQL 5.5+ 버전에서 사용되는 표준 유니코드 정렬 방식
  • Unicode 4.0 기준으로 정렬 및 비교 수행
  • 일부 문자(예: 이모지, 특수 문자)에 대한 정렬이 최신 유니코드 표준과 다를 수 있음

특징:

  • MySQL 5.5부터 제공되며 널리 사용됨
  • 성능은 utf8mb4_general_ci보다는 느리지만 정확함
  • 최신 유니코드 규칙을 반영하지 못할 수 있음

🔹 utf8mb4_0900_ai_ci

  • **MySQL 8.0+**에서 제공하는 새로운 유니코드 정렬 방식
  • Unicode 9.0 기준으로 정렬 및 비교 수행
  • AI (Accent-Insensitive): 악센트 무시 (é == e)
  • CI (Case-Insensitive): 대소문자 무시 (A == a)
  • 성능이 개선되었으며 더 정확한 유니코드 정렬을 지원

특징:

  • MySQL 8.0 이상에서 권장됨
  • 최신 유니코드 표준을 반영하여 더 정확한 정렬 방식 제공
  • 성능 최적화됨

 

🔹 정리 (비교)

비교 항목utf8mb4_unicode_ciutf8mb4_0900_ai_ci

MySQL 버전 5.5 이상 8.0 이상
유니코드 버전 4.0 9.0
대소문자 구분 안 함 안 함
악센트 구분 옵션 가능 (utf8mb4_unicode_cs 사용) 안 함 (ai는 Accent-Insensitive)
이모지 지원 일부 제한 있음 더 정확한 비교 가능
정렬 정확도 상대적으로 낮음 최신 표준 적용

📌 MySQL 8.0 이상을 사용한다면 utf8mb4_0900_ai_ci를 권장
📌 MySQL 5.7 이하에서는 utf8mb4_unicode_ci를 사용

 

반응형

+ Recent posts