ClickHouse의 테이블 파트란 무엇입니까?
ClickHouse MergeTree 엔진 계열에 속한 각 테이블의 데이터는 디스크에 변경할 수 없는
data parts 모음으로 구성됩니다.
이를 설명하기 위해 영국에서 거래된 부동산의 날짜, 도시, 거리, 가격을 기록한 이 테이블(영국 부동산 가격 데이터셋을 바탕으로 수정)을 사용합니다:
ClickHouse 서버가 위 다이어그램에 표시된 4개 행의 예시 삽입(예: INSERT INTO 문을 통해)을 처리할 때는 여러 단계를 수행합니다: ① 정렬: 행은 테이블의 정렬 키
(town, street)를 기준으로 정렬되며, 정렬된 행에 대해 희소 프라이머리 인덱스가 생성됩니다.
② 분할: 정렬된 데이터는 컬럼별로 분할됩니다.
③ 압축: 각 컬럼은 압축됩니다.
④ 디스크에 쓰기: 압축된 컬럼은 삽입으로 생성된 데이터 파트를 나타내는 새 디렉터리 안에 바이너리 컬럼 파일로 저장됩니다. 희소 프라이머리 인덱스도 압축되어 같은 디렉터리에 저장됩니다.
테이블의 구체적인 엔진에 따라 정렬과 함께 추가 변환이 수행될 수 있습니다.
데이터 파트는 중앙 카탈로그가 없어도 내용을 해석하는 데 필요한 모든 메타데이터를 포함하는 자체 완결형 단위입니다. 희소 프라이머리 인덱스 외에도 파트에는 보조 데이터 스키핑 인덱스, 컬럼 통계, 체크섬, MinMax 인덱스(파티셔닝을 사용하는 경우) 등의 추가 메타데이터가 포함됩니다. 더 자세한 내용은 여기를 참조하십시오.
파트 머지
초기 파트 수와 머지 오버헤드를 최소화하려면 데이터베이스 클라이언트에서 권장하는 방식은 튜플을 대량으로 삽입하는 것(예: 한 번에 20,000행) 또는 비동기 삽입 모드를 사용하는 것입니다. 이 모드에서는 ClickHouse가 동일한 테이블로 들어오는 여러 INSERT의 행을 버퍼링하고, 버퍼 크기가 설정 가능한 임계값을 초과하거나 타임아웃이 만료된 경우에만 새 파트를 생성합니다.
테이블 파트 모니터링
_part를 사용하면 예시 테이블에 현재 존재하는 모든 활성 파트의 목록을 쿼리할 수 있습니다: