StripeLog 테이블 엔진
StripeLog 테이블 엔진
이 엔진은 로그 엔진 패밀리에 속해요. 로그 엔진의 공통 속성과 차이점은 Log 엔진 패밀리 문서를 참고해요.
적은 양의 데이터(1백만 행 미만)를 가진 많은 테이블을 써야 하는 시나리오에서 이 엔진을 사용해요. 예를 들어 이 테이블은 원자적 처리가 필요한 들어오는 데이터 배치를 저장·변환하는 데 사용할 수 있어요. 10만 개의 이 테이블 유형 인스턴스는 ClickHouse 서버에서 사용 가능해요. 많은 수의 테이블이 필요할 때는 이 테이블 엔진이 Log보다 선호돼요. 읽기 효율성을 희생하는 대가랍니다.
출처: 문서
본문
테이블 생성하기
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 = StripeLog
CREATE TABLE 쿼리에 대한 자세한 설명은 해당 문서를 참고해요.
데이터 쓰기
StripeLog 엔진은 모든 컬럼을 하나의 파일에 저장해요. 각 INSERT 쿼리에 대해 ClickHouse는 컬럼을 하나씩 쓰면서 데이터 블록을 테이블 파일 끝에 추가해요.
각 테이블에 대해 ClickHouse는 다음 파일을 써요:
data.bin— 데이터 파일index.mrk— marks가 있는 파일. Marks는 삽입된 각 데이터 블록의 각 컬럼에 대한 오프셋을 포함해요
StripeLog 엔진은 ALTER UPDATE와 ALTER DELETE 연산을 지원하지 않아요.
데이터 읽기
marks 파일 덕분에 ClickHouse는 데이터 읽기를 병렬화할 수 있어요. 이는 SELECT 쿼리가 예측할 수 없는 순서로 행을 반환한다는 뜻이에요. 행을 정렬하려면 ORDER BY 절을 사용해요.
사용 예시
테이블 생성:
CREATE TABLE stripe_log_table
(
timestamp DateTime,
message_type String,
message String
)
ENGINE = StripeLog
데이터 삽입:
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')
두 개의 INSERT 쿼리를 사용해 data.bin 파일 내부에 두 개의 데이터 블록을 만들었어요. ClickHouse는 데이터를 선택할 때 여러 스레드를 사용해요. 각 스레드는 별도의 데이터 블록을 읽고 끝나면 결과 행을 독립적으로 반환해요. 결과적으로 대부분의 경우 출력의 행 블록 순서가 입력의 같은 블록 순서와 일치하지 않아요. 예:
SELECT * FROM stripe_log_table
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:27:32 │ REGULAR │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING │ The first warning message │
└─────────────────────┴──────────────┴────────────────────────────┘
┌───────────timestamp─┬─message_type─┬─message───────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR │ The first regular message │
└─────────────────────┴──────────────┴───────────────────────────┘
결과 정렬(기본 오름차순):
SELECT * FROM stripe_log_table ORDER BY timestamp
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR │ The first regular message │
│ 2019-01-18 14:27:32 │ REGULAR │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING │ The first warning message │
└─────────────────────┴──────────────┴────────────────────────────┘