-
[ClickHouse] 클릭하우스란 무엇일까?스터디 노트 2023. 11. 20. 11:28
📌 들어가며
대용량 데이터..라고 하기엔 초라하지만 하루 30만건 정도의 데이터를 처리할 수 있는 고성능 DB가 무엇이 있을까 고민을 해보았습니다.
기본에는 Oralce을 사용하고 있었고
(윽..비싸요..💩)RDB로 하자니 데이터의 증가 속도를 하드웨어가 따라가지 못할 것 같다는 생각이 들었습니다.지속적인 관리포인트의 증가가 발생할 것이라는 판단 하에 고성능 DB를 찾아보던 중 ClickHouse(클릭하우스)라는 것에 대해서 알게되어 공부한 바를 공유합니다.
📌 ClickHouse..??
이름도 희한한 클릭하우스..라는 DB는 무엇일까요?
공부할 때는 프로덕트 사이트에 들어가서 보는게 최고죠. ClickHouse의 Docs에 들어가서 내용을 한 번 확인해보겠습니다.
Fast Open-Source OLAP DBMS - ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
clickhouse.com
ClickHouse는 실시간 앱 및 분석을 위한 가장 빠르고 리소스 효율적인 오픈 소스 데이터베이스라고 합니다.
온라인 분석 처리(OLAP)를 위한 고성능의 컬럼 지향 SQL 데이터베이스입니다.
✅ OLAP란?
OLAP는 사용자가 다양한 각도에서 직접 대화식으로 정보를 분석하는 과정을 말합니다.ClickHouse에서는 컬럼 지향 데이터베이스의 장점으로 OLAP시나리오에 사용하기 더 적합하다고 합니다.
대부분의 쿼리를 처리하는 속도가 일반 RDBMS보다 최소 100배는 빠르다고 하네요.
Row-oriented DBMS Column-oriented DBMS 이러한 성능상의 이점을 통해 다른 데이터베이스보다 더 뛰어난 성능을 보여주게 됩니다.
📌 그럼 클릭하우스는 왜 빠른가?
저런 그림 말고, 그럼 대체 왜 클릭하우스가 빠르다고 주장하는 걸까요?
최초에 클릭하우스는 데이터를 최대한 빠르게 필터링하고 집계하기 위해 제작되었습니다.
그렇기에 클릭하우스 개발팀은 몇 가지 기준 사항을 만들었습니다.
✅ 컬럼 지향 스토리지
원본 데이터엔 수백 또는 수천개의 열이 포함되어 있는 반면, 조회 시 이 중 몇 개만 사용하게 됩니다. 그렇기 때문에 데이터를 읽어오는데 들어가는 리소스의 고비용을 피할 수 있습니다.
✅ 인덱스
메모리에 상주하는 클릭하우스 데이터 구조를 사용하면 조회시 필요한 열과 행의 범위에만 빠르게 접근할 수 있습니다.
✅ 데이터 압축
동일한 열에 다른 값을 함께 저장하여 압축률을 향상시킵니다. 실제 데이터에선 이웃한 행에 대해 비슷한 값을 갖는 경우가 많기 때문입니다. 클릭하우스는 범용 압축 외에도 데이터를 더욱 컴팩트하게 만들 수 있는 코덱을 지원합니다.
✅ 벡터화된 쿼리 실행
클릭하우스는 데이터를 열에 저장할 뿐만 아니라 열에 있는 데이터를 처리하기 까지 합니다. 이를 통해 CPI 캐시 활용도가 향상되고 SIMD CPU 명령어 사용이 가능해집니다.
✅ 확장성
클릭하우스는 사용 가능한 모든 CPU 코어와 디스크를 활용해 단일 쿼리도 실행할 수 있습니다. 단일 서버 뿐만 아니라 클러스터의 모든 CPI코어와 디스크에도 적용됩니다.
📌 클릭하우스의 특징
클릭하우스에는 근사한 특징들이 있습니다. 문서의 내용을 토대로 간략하게 간추려 정리를 하오니 자세한 내용은 각 특징의 우측 [보기]를 클릭하시어 확인하시면 됩니다 :D
✅ 진정한 컬럼 지향 데이터베이스 관리 시스템[보기]
컬럼 지향 데이터베이스에서는 값과 함께 추가적인 데이터를 저장하지 않습니다.
✅ 데이터 압축[보기]
디스크 공간과 CPU 사용량 간의 트레이드 오프를 효율적으로 사용하는 범용 압축 코덱을 지원하며, 그 외에도 특정 유형에 특화된 데이터 코텍을 제공해 클릭하우스의 성능을 높혔습니다.
✅ 데이터의 디스크 스토리지[보기]
HDD에서도 완벽하게 구동되도록 설계가 되었다고 합니다. 근데 SSD와 RAM을 추가해도 좋다네요 ㅋㅋ
✅ 다중 코어에서의 병렬 처리[보기]
대규모 쿼리는 병렬화되어 현재 서버에서 가뇽할 수 있는 리소스를 모두 가져옵니다.
✅ 여러 서버에서 분산 처리[보기]
클릭하우스에선 데이터는 서로 다른 샤드에 저장될 수 있습니다. 모든 샤드는 사용자에게 투명하게 병렬로 쿼리를 실행하는데 사용됩니다.
✅ SQL 지원[보기]
ClickHouse는 ANSI SQL 표준과 동일한 SQL 기반의 선언적 쿼리 언어를 지원합니다.
✅ 벡터 계산 엔진[보기]
데이터는 열 단위로 저장될 뿐만 아니라 벡터(열의 일부)에 의해 처리되므로 높은 CPU 효율성을 달성할 수 있습니다.
✅ 실시간 데이터 삽입[보기]
클릭하우스는 기본 키로 테이블을 지원합니다. 기본 키 범위에 대한 쿼리를 신속하게 수행하기 위해 병합 트리를 사용하여 데이터를 증분 정렬합니다. 이로 인해 지속적으로 데이터를 테이블에 추가할 수 있습니다.
✅ 기본 인덱스[보기]
기본 키별로 물리적으로 데이터를 정렬하면 수십 밀리초 이내에 지연 시간이 적은 특정 값 또는 값 범위를 기반으로 데이터를 추출할 수 있습니다.
✅ 보조 인덱스[보기]
다른 데이터베이스 관리 시스템과 달리 클릭하우스의 보조 인덱스는 특정 행 또는 행 범위를 가리키지 않습니다.
대신 일부 데이터 파트의 모든 행이 쿼리 필터링 조건과 일치하지 않을 경우 컬럼을 전혀 읽지 않으므로 '데이터 건너뛰기 인덱스'라고 합니다.
✅ 온라인 쿼리에 적합[보기]
ClickHouse에서 '저지연' 이란 사용자 인터페이스 페이지가 로드되는 동시에 미리 답변을 준비하려고 하지 않고 지연 없이 쿼리를 처리할 수 있음을 의미합니다.
✅ 근사 계산 지원[보기]
ClickHouse는 정확도와 성능을 비교하는 다양한 방법을 제공합니다.
1. 서로 다른 값, 중위수 및 분위수의 근사 계산을 위한 집계 함수입니다.
2. 데이터의 일부(표본)를 기반으로 쿼리를 실행하고 근사 결과를 가져옵니다.이 경우 디스크에서 검색되는 데이터가 비례적으로 적습니다.
3. 모든 키 대신 제한된 수의 랜덤 키에 대해 집계를 실행합니다.데이터의 키 배포에 대한 특정 조건에서 리소스를 더 적게 사용하면서도 합리적으로 정확한 결과를 제공합니다.✅ 적응형 조인 알고리즘[보기]
ClickHouse는 해시 조인 알고리즘을 선호하고 큰 테이블이 두 개 이상인 경우 병합 조인 알고리즘으로 대체하여 여러 테이블을 조인하는 방법을 적응적으로 선택합니다.
✅ 데이터 복제 및 데이터 무결성 지원[보기]
클릭하우스는 비동기 다중 마스터 복제를 사용합니다. 사용 가능한 복제본에 기록된 후 나머지 복제본은 모두 백그라운드에서 복사본을 검색합니다.
시스템은 다른 복제본에 대해 동일한 데이터를 유지합니다. 대부분의 장애가 발생한 후 복구는 자동으로 수행되거나 복잡한 경우 반자동으로 수행됩니다.
✅ 역할 기반 액세스 제어[보기]
ClickHouse는 SQL 쿼리를 사용하여 사용자 계정 관리를 구현하고 ANSI SQL 표준 및 널리 사용되는 관계형 데이터베이스 관리 시스템에서 볼 수 있는 것과 유사한 역할 기반 액세스 제어 구성을 허용합니다.
📌 마치며
정말 간략하게 알아본 ClickHouse에 대한 내용이었습니다.
도큐먼트를 조금 더 진득허니 읽어봐야겠지만, 우선 만들면서 어떤 장점이 있는지를 확인해봐야겠네요 ㅎㅎ
'스터디 노트' 카테고리의 다른 글