-
[ClickHouse] Block 알아보기Database/Clickhouse 2024. 1. 10. 06:46728x90반응형
- 목차
들어가며.
이번 글에서는 ClickHouse 의 Block 의 개념에 대해서 알아보려고 합니다.
ClickHouse MergeTree 엔진의 Table 을 생성하고, 해당 테이블에 데이터를 추가하게 되면 Parts 가 생성됩니다.
ClickHouse Parts 의 개념은 아래의 페이지에서 알 수 있는데요.
Parts 에 대해서 간단한 설명을 해보려고 합니다.
https://clickhouse.com/docs/en/operations/system-tables/parts
Parts 란 ?
https://westlife0615.tistory.com/737
ClickHouse MergeTree Table 에 데이터를 생성하게 되면 Parts 가 생성됩니다.
구체적으로는 Insert Query 실행 시에 Parts 가 생성이 되구요.
Insert Query 마다 하나의 Parts 가 생성됩니다.
Insert Query 는 아래와 같이 1개의 Row 를 추가할 수도 있고, 여러개의 Row 들을 추가할 수 있습니다.
insert into default.test_table values (1); insert into default.test_table values (1), (2); insert into default.test_table values (1), (2), (3);
이 상황에서 Insert Query 의 Row 갯수가 많을수록 사이즈가 큰 Parts 가 생성되게 됩니다.
아래의 그림처럼 Row 의 갯수만큼 하나의 Parts 가 저장하는 Rows 의 갯수가 늘어나게 되죠.
이렇게 생성된 여러 Parts 들은 Merge Operation 의 대상이 됩니다.
동일한 Partition Key 를 공유하는 Parts 들은 Merge 되어 최종적으로 하나의 큰 사이즈의 Parts 가 됩니다.
Block 이란 ?
Insert Query 에 의해서 하나의 Parts 가 생성된다고 말씀드렸죠 ?
이렇게 Insert Query 에 의해서 생성되는 하나 이상의 Rows 들을 묶어 지칭하는 표현이 필요한데요.
이를 Block 이라고 합니다.
만약 A Insert Query 에 의해서 Row1, Row2, Row3 이 생성된다고 가정하겠습니다.
그럼 A Insert Query 에 의해서 Part 1 이 생성이 되며, Part 1 은 Block 1과 연결됩니다.
Block 1 은 Row1, Row2, Row3 에 대한 정보를 가집니다.
관계도는 아래와 같습니다.
이러한 과정에서 Parts 와 Block 에 이름이 붙여지게 됩니다.
Block 은 Incremental 방식으로 이름이 붙여집니다.
첫번째 Block 은 1 번, 두번째 Block 은 2 번, N 번째 Block 은 N 이 됩니다.
그리고 Parts 의 이름은 Block 과 Merge Operation 횟수에 따라서 이름이 붙여집니다.
첫번째 Block 을 포함하는 Parts 는 "all_1_1_0" 과 같은 이름을 가집니다.
"all_" 은 Partition Key 를 의미하는데요.
이는 아래의 페이지에서 설명을 대체하겠습니다.
https://westlife0615.tistory.com/737
"1_1_0" 은 1번 Block 과 0번의 Merge Operation 을 뜻합니다.
Merge Operation 이후의 Parts 이름은 ?
이제 여러개의 Parts 가 생성되었다고 가정하겠습니다.
"all_1_1_0", "all_2_2_0", "all_3_3_0", "all_4_4_0" 인 4개의 Parts 가 존재할 때에
Merge Operation 이 수행되면 이는 "all_1_4_1" 과 같은 상태로 변하게 됩니다.
이 의미는 "Parts 는 가장 작은 Block 으로써 1번 Block 을 가지고, 가장 큰 Block 으로 4번 Block 을 가지며, 1번의 Merge 가 수행되었다." 입니다.
위와 같은 Naming Convention 은 다른 표현으로 min_block_number, max_block_number, level 이라고도 표현합니다.
아래의 그림과 같이 Parts 는 Merge Operation 과정을 거치게 되면서 여러 Block 들을 포함하게 됩니다.
반응형'Database > Clickhouse' 카테고리의 다른 글
[Clickhouse] Shard & Replica Cluster 구성하기 (0) 2024.02.14 [ClickHouse] Compact Wide Parts 알아보기 ( part_type ) (0) 2024.01.16 ClickHouse MergeTree 알아보기 (0) 2023.11.07 [ ClickHouse ] arrayMap Function 알아보기 (0) 2023.09.06 [ ClickHouse ] groupArray Function 알아보기 (0) 2023.09.06