clickhouse는 SQL 쿼리의 온라인 분석 처리(OLAP)를 위해 Yandex에서 만든 오픈소스 칼럼 기반 DB입니다.
일반 DB와 다르게 칼럼지향 DBMS로 아래 이미지에서 볼 수 있듯 1개의 열에 하나의 데이터 정보가 담겨져있다.
전통적인 데이터베이스보다 10~1000배 더 빠르게 작동하고 서버당 초당 수억에서 수십억 행과 수십 기가바이트의 데이터를 처리합니다.
1) 칼럼 기반 DBMS
데이터가 점점 많아지면서 통계정보를 산출하고 자료를 분석 하는데 시간이 많이 발생하게되었습니다.
기존의 DBMS로 OLAP을 하면 시간이 너무 많이 걸리다 보니 칼럼기반의 DBMS가 등장한 것입니다.
칼럼기반 DBMS는 칼럼 단위로 저장이 되어있어서 동일한 칼럼 내에서 데이터를 갖고 오는데 효율이 좋은 구조로 OLAP에 매우 적합합니다.
2) Data Compression
data를 압축하여서 성능이 좋다고 함.
3) Disk Storage of Data
하드를 가상메모리 쓰듯 쓴다고 한다.
그래서 실제 필요한 용량보다 하드를 좀 더 크게 쓰는것을 권장한다고 한다.
4) Parallel Processing of Multiple Cores
멀티코어 연산이 가능하다고 한다.
5) Distributed Processing of Multiple Servers
여러 개의 shard 에 요청을 날려 병행처리를 통해 데이터를 받아올 수 있다.
6) SQL Support
일반적인 SQL 사용 가능하다.
7) Vector Engine
Column 으로 데이터가 저장되고, vector(column 의 일부) 로 처리되어, cpu 효율이 좋음.
8) Real-time Data Update
data 가 merge tree 를 통해 분배되기 때문에, data 가 추가될 때 lock 이 필요치 않음.
9) Index
index 를 사용해서 데이터를 빨리 뽑아올 수 있음!
10) Suitable for Online Queries
Low latency. 빠르다. 빨라서 온라인에 적합하다고 한다.
11) Support for Approximaged Calculations
정확성과 성능을 tradeoff 하기 위한 기능들을 제공
12) Data replication and data integrity support
clickhouse-server는 replica 들이 동일하게 유지시켜줌.
insert 시에 가용한 replica에 write된 이후에, data는 백그라운드에 남은 replica들로 분산된다.
clickHouse 설치는 매우 간단합니다.
docker 환경에서 설치해보겠습니다.
그렇기 위해 docker-compose 파일을 다음처럼 작성하였습니다.
version: '3'
services:
ch_server:
image: yandex/clickhouse-server
ports:
- "8123:8123"
volumes:
- ./db:/var/lib/clickhouse
networks:
- ch_ntw
ch_client:
image: yandex/clickhouse-client
entrypoint:
- /bin/sleep
command:
- infinity
networks:
- ch_ntw
tabix:
image: spoonest/clickhouse-tabix-web-client
ports:
- 8090:80
networks:
ch_ntw:
driver: bridge
ipam:
config:
- subnet: 10.222.1.0/24
clickhouse server, clickhouse client, tabix (web ui) 3개의 컴포넌트를 설치합니다.
다음 명령어로 docker 설치 후 접속해 보겠습니다.
mkdir db # db 정보담을 폴더 생성
docker compose up -d
terminal 접속
docker-compose exec ch_server clickhouse-client
web ui tabix 접속
localhost:8090
다음과 같이 작성 후 접속하시고 web ui를 살펴보시면 됩니다.
모든 설치 소스는 저의 깃에서 보실 수 있습니다.
더 자세한 확인은 ClickHouse 공식페이지에서 확인해보시면 좋을 것 같습니다.