[database] ClickHouse
Updated:
개요
- 사이트 / GitHub
- 온라인 분석 처리(OLAP)를 위한 고성능 열 기반 SQL 데이터베이스 관리 시스템(DBMS)
- OLAP 특성
- 데이터 세트는 수십억 또는 수조 행
- 데이터는 많은 열이 포함된 테이블로 구성
- 특정 쿼리에 응답하기 위해 몇 개의 열만 선택
- 결과는 밀리초 또는 초 단위로 반환
- 행 지향 데이터베이스
- 데이터가 행에 저장
- 열 지향 데이터베이스
- 데이터가 열에 저장
- 빠른 이유
- 열 지향 데이터베이스
- 데이터 압축
- 열이 인접한 행에 대해 동일하거나 유사한 경우가 많기 때문에 행 기반 시스템 보다 압축 비율이 높음
- 벡터화된 쿼리 실행
- 데이터를 열에 저장할 뿐만 아니라 열에 있는 데이터를 처리
- CPU 캐시 활용도가 향상 및 SIMD CPU 명령어 사용 가능
- 사용 가능한 모든 시스템 리소스를 최대한 활용하여 각 분석 쿼리를 최대한 빨리 처리
- 주의사항
- 노드가 여러개일 경우 통합 관리 필요
- 데이터베이스/테이블 생성 시
ON CLUSTER
옵션 추가하여 생성- 해당 옵션이 없으면 노드마다 데이터베이스/테이블 생성 필요
- 분산 테이블을 생성하여 조회/삽입
- 분산 테이블이 없으면 접속한 노드에 대해서만 조회/삽입 가능
- 데이터베이스/테이블 생성 시
- 노드가 여러개일 경우 통합 관리 필요
설치
helm install clickhouse oci://registry-1.docker.io/bitnamicharts/clickhouse --create-namespace --namespace clickhouse --values values.yaml
- values.yaml
-
resources: requests: cpu: 1 memory: 2048Mi limits: cpu: 2 memory: 2048Mi shards: 2 replicaCount: 2 auth: username: default password: default service: type: NodePort
-
Dashboard / Playground
- NODE IP 확인
echo $(kubectl get nodes --namespace clickhouse -o jsonpath="{.items[0].status.addresses[0].address}")
- NODE PORT 확인
echo $(kubectl get --namespace clickhouse -o jsonpath="{.spec.ports[0].nodePort}" services clickhouse)
- Dashboard
http://${ip}:${port}/dashboard
- Playground
http://${ip}:${port}/play
테스트
- 데이터베이스 생성
CREATE DATABASE db01 ON CLUSTER default
- 테이블 생성
-
CREATE TABLE db01.table01 ON CLUSTER default ( `column1` UInt64, `column2` String ) ENGINE = MergeTree ORDER BY column1
-
- 분산 테이블 생성
-
CREATE TABLE db01.table01_dist ON CLUSTER default ( `column1` UInt64, `column2` String ) ENGINE = Distributed('default', 'db01', 'table01', rand())
-
- 삽입
INSERT INTO db01.table01_dist (column1, column2) VALUES (1, 'abc')
- 조회
SELECT * FROM db01.table01_dist
Users and Roles
- RBAC 접근 방식을 기반으로 접근 제어 관리를 지원
- SQL 기반 액세스 제어 및 계정 관리 사용 가능
- access entities
- User account
- Role
- Row Policy
- Settings Profile
- Quota
Backup and Restore
- replication은 하드웨어 오류로부터 보호를 제공하지만 사람의 실수로부터는 보호하지 않음
- 우발적인 데이터 삭제
- 잘못된 테이블 또는 잘못된 클러스터의 테이블 삭제
- 잘못된 데이터 처리
- 데이터 손상을 초래하는 소프트웨어 버그
- …
- 백업 및 복원을 위한 범용 솔루션은 없음
- 1GB의 데이터에 효과가 있는 것이 10TB의 데이터에는 효과가 없을 가능성이 높음
- 종류
- local disk
- S3 Endpoint
- S3 Disk
- AzureBlobStorage Endpoint