Skip to content

Commit c51d500

Browse files
committed
feat: clickhous
1 parent 20ca347 commit c51d500

File tree

2 files changed

+133
-176
lines changed

2 files changed

+133
-176
lines changed

02数据存取/10clickhouse.md

Lines changed: 131 additions & 176 deletions
Original file line numberDiff line numberDiff line change
@@ -1,194 +1,149 @@
11
# ClickHouse
22

3-
## 介绍
4-
5-
- [ClickHouse](https://github.com/ClickHouse/ClickHouse)
6-
- [使用场景](https://zhuanlan.zhihu.com/p/98439924)
7-
8-
# **ClickHouse 原理详细介绍**
9-
10-
ClickHouse 是一个开源的 **列式存储** 数据库管理系统,专为 **实时分析** 设计,具有 **高性能 OLAP(Online Analytical Processing)查询** 能力。它主要用于处理大规模数据的实时分析,如日志数据、金融交易、区块链数据等。
11-
12-
---
13-
14-
## **1️⃣ ClickHouse 体系架构**
15-
ClickHouse 采用 **Shared-Nothing 分布式架构**,每个节点都可以独立运行,并通过分片(Sharding)和副本(Replication)提升可用性和性能。
16-
17-
### **🔹 主要组件**
18-
- **MergeTree 存储引擎**:核心存储引擎,支持数据的列式存储和分区管理,适用于大规模数据处理。
19-
- **SQL 查询优化器**:支持 `ORDER BY``GROUP BY``bloom_filter` 等优化策略,提升查询效率。
20-
- **分布式计算**:通过 `Distributed` 表实现数据的水平扩展。
21-
- **高效索引机制**:包括 **主键索引(Primary Index)、稀疏索引(Sparse Index)、跳跃索引(Skip Index)**,减少 I/O 读取量。
22-
- **数据压缩**:ClickHouse 使用多种压缩算法(如 LZ4、ZSTD)减少存储占用,提高查询性能。
23-
24-
---
25-
26-
## **2️⃣ ClickHouse 的存储原理**
27-
ClickHouse 采用 **列式存储(Columnar Storage)**,与传统 **行存储(Row-Based Storage)** 不同:
28-
- **列存储**:仅存储查询所需的列,减少 I/O 读取,加速聚合查询。
29-
- **高效压缩**:相同类型的数据存储在一起,压缩率更高。
30-
- **批量处理**:优化 `GROUP BY``ORDER BY` 操作,提升计算效率。
31-
32-
### **🔹 MergeTree 存储引擎**
33-
`MergeTree` 是 ClickHouse 最常用的存储引擎,提供 **分区(Partitioning)、索引(Primary Index)、数据合并(Merge)** 等功能。
34-
35-
#### **🌟 MergeTree 关键特性**
36-
| **特性** | **描述** |
37-
|----------------------|--------|
38-
| **分区(Partitioning)** | 通过 `PARTITION BY` 定义数据存储分区,提升查询效率 |
39-
| **主键索引(Primary Index)** | 采用稀疏索引,仅存储部分数据,提高查询速度 |
40-
| **数据合并(Merge)** | 后台自动合并数据文件,提升存储效率 |
41-
| **TTL 过期删除(TTL Expiry)** | 自动清理历史数据,减少存储成本 |
42-
43-
---
44-
45-
## **3️⃣ ClickHouse 的查询优化**
46-
ClickHouse 针对大规模数据查询进行了深度优化:
47-
48-
### **🔹 索引机制**
49-
- **主键索引(Primary Index)**:基于 `ORDER BY` 维护的索引,加速范围查询。
50-
- **跳跃索引(Skip Index)**:跳过不必要的数据块,减少 I/O。
51-
- **bloom_filter**:加速 `WHERE` 过滤条件匹配。
52-
53-
### **🔹 查询优化策略**
54-
| **优化点** | **描述** |
55-
|------------------|--------|
56-
| **向量化执行** | 采用 SIMD 指令加速计算 |
57-
| **预计算(Materialized View)** | 通过物化视图存储聚合结果,提高查询性能 |
58-
| **分布式查询(Distributed Query)** | 通过分片加速大规模数据查询 |
59-
| **并行查询(Parallel Query)** | 多核并行处理 SQL,提高执行速度 |
60-
61-
---
62-
63-
64-
### **🔹 ClickHouse vs 其他数据库**
65-
| **对比项** | **ClickHouse** | **MySQL** | **StarRocks** |
66-
|---------------|-------------|----------|-------------|
67-
| **存储模型** | 列式存储 | 行式存储 | 列式存储 |
68-
| **查询性能** | 高并发、OLAP | 适用于 OLTP | 高并发、实时分析 |
69-
| **索引机制** | 主键索引、跳跃索引 | B+ 树索引 | 主键索引、物化视图 |
70-
| **实时性** | 主要用于批处理 | 事务处理 | 近实时分析 |
71-
| **适用场景** | 日志分析、BI、金融数据 | 事务处理 | 实时数据分析 |
72-
73-
---
74-
75-
## **5️⃣ ClickHouse 的优缺点**
76-
### **✅ 优势**
77-
- **超高查询性能**:列式存储 + 并行计算,查询速度远超传统数据库。
78-
- **高效数据压缩**:降低存储成本,提高查询效率。
79-
- **分布式架构**:支持海量数据存储 & 分布式计算。
80-
- **灵活的 SQL 支持**:兼容大部分 SQL 语法,易于迁移。
81-
82-
### **❌ 限制**
83-
- **不支持事务(ACID)**:适用于 OLAP 场景,不适用于高并发事务处理。
84-
- **数据更新较慢**:追加写入模式,不适用于频繁更新数据的场景。
85-
- **高内存占用**:需要大量内存优化查询。
86-
87-
---
88-
89-
## **6️⃣ 总结**
90-
ClickHouse 是 **高性能 OLAP 数据库**,专为 **大规模数据分析** 设计,采用 **列式存储、MergeTree 引擎、分布式计算** 提供超快的查询速度。适用于 **日志分析、金融交易、区块链数据** 等实时分析场景,但不适用于高并发 OLTP 事务处理。
91-
92-
93-
# **Shared-Nothing 分布式架构**
94-
95-
## **🔹 Shared-Nothing 架构概述**
96-
**Shared-Nothing(无共享)架构** 是一种分布式系统设计理念,其中 **每个节点都是独立的,不共享 CPU、内存、磁盘或网络资源**。每个节点自主存储和处理数据,并通过网络通信协作完成分布式计算。
97-
98-
---
99-
100-
## **🔹 Shared-Nothing vs. 其他架构**
101-
| **架构类型** | **描述** | **代表数据库** |
102-
|---------------------|--------|--------------|
103-
| **Shared-Nothing** | **每个节点独立**,无资源共享,横向扩展能力强 | ClickHouse、StarRocks、Hadoop、CitusDB |
104-
| **Shared-Disk** | 多个节点共享磁盘存储,计算独立 | Oracle RAC、IBM DB2 |
105-
| **Shared-Memory** | 多个计算节点共享内存和磁盘 | SAP HANA |
3+
## 一、概述
4+
### 1.1 定义
5+
ClickHouse 是开源的**列式存储数据库**,专为实时分析设计,具有高性能OLAP查询能力,适用于日志分析、金融交易等场景。
6+
7+
### 1.2 核心特性
8+
- **列式存储**:仅读取查询列,减少I/O
9+
- **高压缩率**:LZ4/ZSTD压缩算法
10+
- **分布式架构**:Shared-Nothing架构支持水平扩展
11+
- **SQL兼容**:支持标准SQL语法
12+
- **实时分析**:支持每秒万级QPS的聚合查询
13+
14+
### 1.3 适用场景
15+
- 日志/事件数据分析
16+
- 实时BI报表
17+
- 时序数据存储
18+
- 用户行为分析
19+
- 区块链交易追踪
10620

10721
---
10822

109-
## **🔹 Shared-Nothing 架构的关键特性**
110-
1. **分布式存储**
111-
- 每个节点存储独立数据,避免磁盘 I/O 竞争,提高吞吐量。
112-
2. **分片(Sharding)**
113-
- 数据按照一定策略(如哈希、范围)分配到不同节点,提高查询并发能力。
114-
3. **无集中式瓶颈**
115-
- **没有共享存储或共享内存**,扩展时仅需增加新节点,支持 **水平扩展(Scale-Out)**
116-
4. **高可用性 & 容错性**
117-
- 通过数据副本(Replication)和故障恢复(Failover)机制,保证高可用性。
23+
## 二、核心原理
24+
### 2.1 体系架构
25+
#### Shared-Nothing 架构
26+
| 特性 | 说明 |
27+
|---------------|-------------------------------|
28+
| 节点独立性 | 每个节点独立存储/计算资源 |
29+
| 扩展方式 | 分片(Sharding)+副本(Replication) |
30+
| 数据分布 | Distributed表引擎管理分布式查询 |
31+
| 容错机制 | 多副本自动切换 |
32+
33+
#### 架构对比
34+
| 类型 | 特点 | 代表系统 |
35+
|---------------|-------------------------------|----------------|
36+
| Shared-Nothing | 无资源共享,横向扩展能力强 | ClickHouse |
37+
| Shared-Disk | 共享存储,计算节点独立 | Oracle RAC |
38+
| Shared-Memory | 共享内存和存储 | SAP HANA |
39+
40+
### 2.2 存储引擎
41+
#### MergeTree 系列
42+
| 引擎类型 | 功能特性 |
43+
|--------------------------|---------------------------------------------|
44+
| MergeTree | 基础引擎,支持分区/索引/数据合并 |
45+
| ReplacingMergeTree | 删除重复数据(需指定版本列) |
46+
| CollapsingMergeTree | 通过Sign列折叠数据(±1标记) |
47+
| VersionedCollapsingMergeTree | 增加Version列解决乱序问题 |
48+
| SummingMergeTree | 自动聚合数值列 |
49+
| AggregatingMergeTree | 支持预聚合函数(uniq/state等) |
50+
51+
#### 特殊引擎
52+
| 引擎类型 | 适用场景 |
53+
|---------------|----------------------------------|
54+
| Log引擎 | 小数据量快速写入(无索引/事务) |
55+
| Integration引擎 | 外部数据源集成(如MySQL/Kafka) |
56+
57+
### 2.3 查询优化
58+
#### 索引机制
59+
- **主键索引**:稀疏索引加速范围查询
60+
- **跳跃索引**:跳过无关数据块(minmax/bloom_filter等)
61+
- **分区裁剪**:根据分区键过滤数据
62+
63+
#### 执行优化
64+
| 优化技术 | 实现方式 |
65+
|---------------|----------------------------------|
66+
| 向量化执行 | SIMD指令加速批量计算 |
67+
| 并行计算 | 多核并行处理查询 |
68+
| 分布式查询 | 分片并行执行+结果聚合 |
69+
| 缓存机制 | 查询结果缓存(实验性) |
11870

11971
---
12072

121-
## **🔹 Shared-Nothing 架构的优势**
122-
| **优势** | **描述** |
123-
|------------------|--------|
124-
| **高可扩展性** | 通过增加节点即可扩展存储 & 计算能力 |
125-
| **无共享瓶颈** | 每个节点独立工作,避免 I/O 或 CPU 竞争 |
126-
| **高容错能力** | 节点故障不会影响整个系统,副本机制可恢复数据 |
127-
| **并行计算** | 查询可在多个节点并发执行,提高吞吐量 |
73+
## 三、对比分析
74+
### 3.1 与OLTP数据库对比
75+
| 特性 | ClickHouse | MySQL |
76+
|---------------|---------------------|--------------------|
77+
| 存储模型 | 列式存储 | 行式存储 |
78+
| 事务支持 || ACID事务 |
79+
| 查询场景 | 大批量聚合查询 | 点查/简单查询 |
80+
| 更新性能 | 低(批量写入) | 高(行级更新) |
81+
| 数据压缩率 | 5-10倍 | 1-3倍 |
82+
83+
### 3.2 与同类OLAP对比
84+
| 特性 | ClickHouse | StarRocks |
85+
|---------------|---------------------|--------------------|
86+
| 实时写入 | 弱(批量导入) | 强(支持UPSERT) |
87+
| JOIN性能 | 需优化(分布式JOIN)| 本地JOIN优化 |
88+
| 资源隔离 || 支持资源组 |
89+
| 生态集成 | 丰富(Kafka/Spark) | 云原生集成 |
12890

12991
---
13092

131-
## **🔹 Shared-Nothing 在 ClickHouse / StarRocks 中的应用**
132-
### **🚀 ClickHouse**
133-
- 采用 **分片(Sharding)+ 副本(Replication)** 机制。
134-
- `Distributed` 表用于分布式查询,数据存储在多个节点,无需共享磁盘。
93+
## 四、最佳实践
94+
### 4.1 数据建模建议
95+
1. **分区策略**:按时间分区(如`toYYYYMMDD(event_date)`
96+
2. **主键设计**:高频查询字段+时间列组合
97+
3. **物化视图**:预计算加速聚合查询
98+
4. **数据TTL**:自动清理过期数据
13599

136-
### **🚀 StarRocks**
137-
- 通过 **存算分离(Storage & Compute Separation)** 提供高扩展性。
138-
- 使用 **Colocation Join** 技术优化分布式查询,减少跨节点数据传输。
139-
140-
---
141-
142-
143-
## **🔹 适用场景**
144-
**Shared-Nothing 适用于**
145-
- **大规模数据分析(OLAP)**:ClickHouse、StarRocks、Hadoop。
146-
- **高并发查询**:日志分析、广告分析、金融数据。
147-
- **分布式存储 & 计算**:海量数据场景。
148-
149-
🚫 **不适用于**
150-
- **高频事务(OLTP)**:银行系统、订单处理(适合 Shared-Disk)。
151-
- **低延迟 JOIN 查询**:需要数据紧密存储的情况。
152-
153-
---
100+
### 4.2 性能调优
101+
- **压缩算法**:ZSTD(高压缩率) vs LZ4(高速度)
102+
- **索引粒度**:INDEX_GRANULARITY=8192(默认值)
103+
- **并行度**:max_threads参数配置
104+
- **内存管理**:max_memory_usage限制
154105

155-
## **🔹 总结**
156-
Shared-Nothing **架构简单、可扩展、无共享瓶颈**,是 **大规模分布式数据库**(如 ClickHouse、StarRocks、Hadoop)广泛采用的设计。适用于 **大数据分析、高并发查询** 场景,但对于事务型应用(OLTP)可能不是最佳选择。
157-
158-
🚀 **如果你的业务需要处理 PB 级数据并进行高效分析,Shared-Nothing 是理想架构!**
159-
160-
161-
## 表引擎
162-
163-
### MergeTree
164-
165-
- ReplacingMergeTree :在数据合并期间删除排序键值相同的重复项。
166-
- CollapsingMergeTree :增加状态列`Sign`,主键相同,没成对的状态行保留,多线程情况下-1和1可能存在乱序,导致无法被删除。
167-
- VersionedCollapsingMergeTree : 为了解决CollapsingMergeTree乱序写入情况下无法正常折叠问题,新增一列`Version`,主键相同,且Version相同、Sign相反的行,在Compaction时会被删除。
168-
- SummingMergeTree : 把所有具有相同主键的行合并为一行,并根据指定的字段进行累加。
169-
- AggregatingMergeTree : SummingMergeTree只能累加,这个能进行各种聚合,需要指定聚合函数。
170-
171-
#### 功能
172-
- 按照主键排序
173-
- 如果指定了分区键,则可以使用分区
174-
- 支持数据复制
175-
- 支持数据采样
176-
- 并发/索引/分区/crud
177-
178-
### Log
179-
180-
为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。
181-
182-
#### 功能
183-
- 数据被顺序append写到磁盘上;
184-
- 不支持delete、update;
185-
- 不支持index;
186-
- 不支持原子性写;
187-
- insert会阻塞select操作。
106+
### 4.3 典型用例
107+
```sql
108+
-- 创建分布式表
109+
CREATE TABLE hits_distributed ON CLUSTER cluster
110+
AS hits_local
111+
ENGINE = Distributed(cluster, default, hits_local, rand());
112+
113+
-- 使用AggregatingMergeTree
114+
CREATE MATERIALIZED VIEW view_name
115+
ENGINE = AggregatingMergeTree()
116+
ORDER BY (event_date)
117+
AS SELECT
118+
event_date,
119+
uniqState(user_id) AS uv
120+
FROM hits_local
121+
GROUP BY event_date;
188122

189-
### Integration
123+
```
190124

191-
该系统表引擎主要用于将外部数据导入到ClickHouse中,或者在ClickHouse中直接操作外部数据源。
125+
## 主键索引(Primary Index)
126+
1. 核心概念
127+
本质 :ClickHouse 的主键索引是稀疏索引 ,本质是数据排序的依据。
128+
作用 :通过 ORDER BY 子句定义,决定数据在磁盘上的物理存储顺序。
129+
查询加速 :通过跳过无关的数据块,减少 I/O 开销。
130+
2. 创建方式
131+
```sql
132+
-- 在建表时通过 ORDER BY 指定主键:
133+
CREATE TABLE example_table
134+
(
135+
event_time DateTime,
136+
user_id UInt32,
137+
metric_value Float64
138+
)
139+
ENGINE = MergeTree()
140+
ORDER BY (event_time, user_id) -- 主键由 event_time 和 user_id 组成
141+
PARTITION BY toYYYYMM(event_time);
142+
```
143+
3. 特点
144+
- 稀疏性 :索引标记(Index Granule)默认每 8192 行 存储一个标记。
145+
- 非唯一性 :允许重复值,不强制唯一约束。
146+
- 排序性 :数据按 ORDER BY 列的顺序物理存储。
192147

193148
## **1. 交易数据(Transactions)表结构**
194149
存储区块链上的所有交易记录,包括普通转账和智能合约调用。

06工具/ai.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22

33
## 列表
44
- [phind](https://www.phind.com/search?home=true) 代码
5+
- [qwen](https://chat.qwen.ai/)
6+
- [yuanbao](https://yuanbao.tencent.com/)
57
- [ollama](https://ollama.com/) 自己搭建大模型

0 commit comments

Comments
 (0)