ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ClickHouse] Block 알아보기
    Database/Clickhouse 2024. 1. 10. 06:46
    728x90
    반응형

     

    - 목차

     

    들어가며.

    이번 글에서는 ClickHouse 의 Block 의 개념에 대해서 알아보려고 합니다.

    ClickHouse MergeTree 엔진의 Table 을 생성하고, 해당 테이블에 데이터를 추가하게 되면 Parts 가 생성됩니다.

    ClickHouse Parts 의 개념은 아래의 페이지에서 알 수 있는데요.

    Parts 에 대해서 간단한 설명을 해보려고 합니다.

    https://clickhouse.com/docs/en/operations/system-tables/parts

     

    parts | ClickHouse Docs

    system_tables-parts}

    clickhouse.com

     

    Parts 란 ?

    https://westlife0615.tistory.com/737

     

    [ClickHouse] Parts & Partition 알아보기

    - 목차 들어가며. 이번 글에서는 ClickHouse 의 MergeTree 엔진에서 사용되는 Parts 와 Partition 에 대해서 알아보려고 합니다. Partition 은 MergeTree Table 에 생성되는 데이터의 물리적인 단위입니다. Table 은 P

    westlife0615.tistory.com

     

    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

     

    [ClickHouse] Parts & Partition 알아보기

    - 목차 들어가며. 이번 글에서는 ClickHouse 의 MergeTree 엔진에서 사용되는 Parts 와 Partition 에 대해서 알아보려고 합니다. Partition 은 MergeTree Table 에 생성되는 데이터의 물리적인 단위입니다. Table 은 P

    westlife0615.tistory.com

     

    "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 들을 포함하게 됩니다.

     

     

    반응형
Designed by Tistory.