우리가 주로 사용하는 Row-oriented DBMS와 비교하면서 Clickhouse를 찾아보았다.
https://clickhouse.com/docs/en/intro/
Clickhouse는 ClickStream 과 Data Warehouse가 합쳐진 이름으로, 기존에 사용하던 Row-oriented DBMS와 쿼리 문법이 유사하지만, 세부적인 부분에서는 다를 수 있다.
Row-oriented vs Column-oriented
지금까지 주로 사용해왔던 MySQL이나 PostgreSQL, MSSQL 같은 DBMS는 row-oriented DBMS로, 데이터가 row 단위로 저장된다. 이 방식은 하나의 인스턴스에 다양한 property가 있는 형식으로, 한 row에 관련된 value는 물리적으로도 서로 옆에 저장된다.
반면, column-oriented DBMS는 데이터가 column 단위로 저장되어 있다. Vertica, Paraccel(Amazon Redshift), Sybase IQ, Exasol, InfiniDB 등이 여기에 속한다.
Row-oriented와 Column-oriented는 사용처가 다른데, Column-oriented는 다음과 같은 시나리오에서 주로 사용된다.
- 대부분이 read access
- Data가 single row 단위가 아닌 batch 단위로 업데이트되거나 잘 업데이트되지 않는 경우
- Read시 column 중 일부만 필요한 경우
- Table이 column을 많이 포함하고 있는 경우
- Query를 날렸을 때 latency가 50ms 이하로 나와야 하는 경우
- Column value가 number, short string처럼 비교적 작은 경우
- Transaction이 불필요하고, data consistency에 대한 요구사항이 적은 경우
Performance
https://clickhouse.com/benchmark/dbms/
Select 쿼리를 기준으로 Mysql과 비교해보면 처리 시간이 830배나 빠르다고 한다.
Clickhouse는 데이터를 filter와 aggregate 하는데 집중한 단일 태스크로부터 시작했다.
처음부터 속도에 초점을 두고 개발했고, 이후에 user-friendliness, scalability 등의 특성을 고려했다.
Indexes, Data compression, Vectorized query execution, Scalability 등의 특징을 사용해서 속도를 높일 수 있었다.
하지만, SELECT 쿼리를 빠르게 한 만큼 몇 가지 단점이 존재한다.
modify와 delete하는 쿼리가 잦은 빈도로 low latency로 들어오는 경우 속도가 불리하다.
또한, Transaction에 대한 지원이 빈약해서 몇 가지 안되는 쿼리가 존재하고, key를 이용해서 단일 row를 가져오는 경우 불리하다.
'db' 카테고리의 다른 글
Database partition in postgresql (0) | 2024.01.29 |
---|---|
[TIL] Postgresql에서 one-row size 구하기 (0) | 2023.12.11 |
[TIL] Redis Scan 개선 (0) | 2023.10.21 |