image.png

0. 플로우차트

flowchart LR

%% Client Layer
subgraph Client[ ]
    C[1. INSERT INTO orders]
end

%% Engine Layer
subgraph Engine[ ]
    P[2. 쿼리 파싱 및 플랜 생성]
    B[3. Block 생성 및 정렬 처리]
    NP[4. 새로운 Part 메모리 구조 준비]
end

%% Disk Layer
subgraph Disk[var/lib/clickhouse/data/orders_db/orders/]

    Meta[메타데이터 파일 <br/> columns.txt, checksums.txt 등]

    %% Partition 예시
    subgraph P202511[Partition: 202511]
        Part1[5. Part 생성 <br/> 202511_1_1_0 <br/> level 0]
        Part2[6. Part 생성 <br/> 202511_2_2_0 <br/> level 0]
        Merged[10. 병합 결과 Part 생성 <br/> 202511_1_2_1 <br/> level 1]
    end

    P202512[Partition: 202512]
end

%% 처리 흐름
C --> P
P --> B
B --> NP
NP --> Part1
NP --> Part2

%% Background Merge
subgraph MergeBG[Background Merge Thread]
    MScan[7. 병합 후보 Part 탐색]
    MExec[8. 병합 실행 및 정렬 유지]
    Clean[9. 기존 Part inactive 처리]
end

Part1 --> MScan
Part2 --> MScan
MScan --> MExec
MExec --> Merged
Merged --> Clean

Effect[11. Part 수 감소 <br/> → Granule 스캔 감소 <br/>→ 쿼리 성능 향상]

Merged --> Effect

1. 데이터베이스 생성 흐름

1) DB 생성

사용자가 DB를 만들면, ClickHouse는 내부 디렉토리 구조를 초기화합니다.

2) Schema 생성

테이블 정의를 위한 DDL 정보가 Catalog 수준에서 반영됩니다.

3) Table 생성

ENGINE = MergeTree 계열 테이블이 생성되면 ClickHouse는 다음 정보를 포함한 메타를 준비합니다.


2. Partition & Part 구조

4) Partition 생성 (예: toYYYYMM(order_date))