TinyLog 테이블 엔진
TinyLog 테이블 엔진
이 엔진은 로그 엔진 패밀리에 속해요. 로그 엔진의 공통 속성과 차이점은 Log 엔진 패밀리를 참고해요.
이 테이블 엔진은 일반적으로 한 번 쓰기(write-once) 방식으로 사용돼요: 데이터를 한 번 쓰고 필요한 만큼 여러 번 읽는 방식이에요. 예를 들어 작은 배치로 처리되는 중간 데이터에 TinyLog-타입 테이블을 사용할 수 있어요. 단, 많은 수의 작은 테이블에 데이터를 저장하는 것은 비효율적이라는 점을 유의해요.
쿼리는 단일 스트림으로 실행돼요. 즉, 이 엔진은 비교적 작은 테이블(약 1,000,000행까지)을 위한 것이에요. 많은 작은 테이블이 있다면 Log 엔진보다 단순하므로(열어야 할 파일이 적음) 이 테이블 엔진을 사용하는 것이 합리적이에요.
출처: 문서
본문
특징
- 더 단순한 구조: Log 엔진과 달리 TinyLog는 mark 파일을 사용하지 않아요. 이는 복잡성을 줄이지만 대규모 데이터셋에 대한 성능 최적화도 제한해요
- 단일 스트림 쿼리: TinyLog 테이블의 쿼리는 단일 스트림으로 실행되므로 일반적으로 최대 1,000,000행까지의 비교적 작은 테이블에 적합해요
- 작은 테이블에 효율적: TinyLog 엔진의 단순함은 Log 엔진보다 파일 연산이 적게 필요하므로 많은 작은 테이블을 관리할 때 유리해요
Log 엔진과 달리 TinyLog는 mark 파일을 사용하지 않아요. 이는 복잡성을 줄이지만 더 큰 데이터셋에 대한 성능 최적화도 제한해요.
테이블 생성하기
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = TinyLog
CREATE TABLE 쿼리에 대한 자세한 설명은 해당 문서를 참고해요.
데이터 쓰기
TinyLog 엔진은 모든 컬럼을 하나의 파일에 저장해요. 각 INSERT 쿼리에 대해 ClickHouse는 컬럼을 하나씩 쓰면서 데이터 블록을 테이블 파일 끝에 추가해요.
각 테이블에 대해 ClickHouse는 다음 파일을 써요:
<column>.bin: 직렬화·압축된 데이터를 포함하는 각 컬럼의 데이터 파일
TinyLog 엔진은 ALTER UPDATE와 ALTER DELETE 연산을 지원하지 않아요.
사용 예시
테이블 생성:
CREATE TABLE tiny_log_table
(
timestamp DateTime,
message_type String,
message String
)
ENGINE = TinyLog
데이터 삽입:
INSERT INTO tiny_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO tiny_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')
두 개의 INSERT 쿼리를 사용해 <column>.bin 파일 내부에 두 개의 데이터 블록을 만들었어요. ClickHouse는 데이터를 선택할 때 단일 스트림을 사용해요. 결과적으로 출력의 행 블록 순서가 입력의 같은 블록 순서와 일치해요. 예:
SELECT * FROM tiny_log_table
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2024-12-10 13:11:58 │ REGULAR │ The first regular message │
│ 2024-12-10 13:12:12 │ REGULAR │ The second regular message │
│ 2024-12-10 13:12:12 │ WARNING │ The first warning message │
└─────────────────────┴──────────────┴────────────────────────────┘