Log 테이블 엔진 패밀리
Log 테이블 엔진 패밀리 (Log Engine Family)
이 엔진들은 많은 작은 테이블(약 1백만 행 이하)을 빠르게 쓰고 나중에 전체로 읽어야 하는 시나리오를 위해 개발되었어요. 패밀리의 엔진들:
| Log Engines |
|---|
| StripeLog |
| Log |
| TinyLog |
Log 패밀리 테이블 엔진은 데이터를 HDFS나 S3 분산 파일시스템에 저장할 수 있어요.
이 엔진은 로그 데이터용이 아니에요. 이름과 달리 Log 테이블 엔진은 로그 데이터 저장을 위한 것이 아니에요. 빠르게 써야 하는 소량의 데이터에만 사용해야 해요.
출처: 문서
본문
공통 속성
엔진:
- 데이터를 디스크에 저장해요
- 쓸 때 파일 끝에 데이터를 추가해요
- 동시 데이터 접근을 위한 잠금을 지원해요.
INSERT쿼리 중 테이블이 잠기고, 다른 읽기·쓰기 쿼리 모두 테이블이 잠금 해제될 때까지 기다려요. 데이터 쓰기 쿼리가 없으면 어떤 수의 데이터 읽기 쿼리도 동시에 수행될 수 있어요 - mutation을 지원하지 않아요
- 인덱스를 지원하지 않아요. 이는 데이터 범위에 대한
SELECT쿼리가 효율적이지 않다는 뜻이에요 - 데이터를 원자적으로 쓰지 않아요. 쓰기 연산을 무언가가 깨뜨리면(예: 비정상적인 서버 종료) 손상된 데이터가 있는 테이블을 얻을 수 있어요
차이점
TinyLog 엔진은 패밀리에서 가장 단순하고 가장 나쁜 기능과 가장 낮은 효율을 제공해요. TinyLog 엔진은 단일 쿼리에서 여러 스레드의 병렬 데이터 읽기를 지원하지 않아요. 단일 쿼리에서 병렬 읽기를 지원하는 패밀리의 다른 엔진보다 데이터를 느리게 읽고, 각 컬럼을 별도 파일에 저장하므로 Log 엔진과 거의 같은 수의 파일 디스크립터를 사용해요. 단순한 시나리오에서만 사용해요.
Log와 StripeLog 엔진은 병렬 데이터 읽기를 지원해요. 데이터를 읽을 때 ClickHouse는 여러 스레드를 사용해요. 각 스레드는 별도의 데이터 블록을 처리해요. Log 엔진은 테이블의 각 컬럼에 대해 별도의 파일을 사용해요. StripeLog는 모든 데이터를 하나의 파일에 저장해요. 결과적으로 StripeLog 엔진은 파일 디스크립터를 더 적게 사용하지만, Log 엔진이 데이터를 읽을 때 더 높은 효율을 제공해요.