news 2026/5/15 5:21:07

ClickHouse列式数据库实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ClickHouse列式数据库实战

ClickHouse列式数据库实战:大数据分析利器从入门到生产部署

🎯 适用人群:数据工程师、后端开发者、数据分析师、架构师
📖 阅读时间:约25分钟 | 代码实战:60+SQL示例
💡 核心价值:掌握ClickHouse核心特性,构建高性能数据分析系统


前言:为什么ClickHouse能这么快?

2025年,我们团队需要分析一个日均10亿条日志的数据集。最初用PostgreSQL,一个聚合查询要跑40秒。换成ClickHouse后,同样的查询只需要0.3秒

PostgreSQL: SELECT count(*) FROM logs WHERE date = '2025-01-01' GROUP BY level → 40秒 ClickHouse: SELECT count() FROM logs WHERE date = '2025-01-01' GROUP BY level → 0.3秒(提升133倍!)

秘密在于:

  1. 列式存储:只读取需要的列
  2. 向量化执行:利用CPU SIMD指令
  3. 数据压缩:列式数据压缩率高达10:1
  4. 索引优化:主键索引 + 跳数索引

一、ClickHouse架构概述

1.1 核心架构

┌─────────────────────────────────────────────────────────────┐ │ ClickHouse 集群 │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Shard 1 │ │ Shard 2 │ │ Shard 3 │ │ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │ │ │ │ Replica1 │ │ │ │ Replica1 │ │ │ │ Replica1 │ │ │ │ │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │ │ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │ │ │ │ Replica2 │ │ │ │ Replica2 │ │ │ │ Replica2 │ │ │ │ │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ │ │ │ └─────────┬───────┴───────┬─────────┘ │ │ │ │ │ │ ZooKeeper / ClickHouse Keeper │ └─────────────────────────────────────────────────────────────┘

1.2 安装部署

# Docker单节点部署(开发环境)dockerrun-d\--nameclickhouse-server\--ulimitnofile=262144:262144\-p8123:8123\-p9000:9000\-v/data/clickhouse:/var/lib/clickhouse\-v/data/clickhouse/logs:/var/log/clickhouse-server\clickhouse/clickhouse-server:24.3# 验证安装curl'http://localhost:8123/?query=SELECT%20version()'# 返回:24.3.x.x# ClickHouse客户端连接dockerexec-itclickhouse-server clickhouse-client
# docker-compose.yml 集群部署version:'3.8'services:zookeeper:image:zookeeper:3.8ports:-"2181:2181"volumes:-zk-data:/dataclickhouse1:image:clickhouse/clickhouse-server:24.3ports:-"8123:8123"-"9000:9000"volumes:-./config.xml:/etc/clickhouse-server/config.xml-ch1-data:/var/lib/clickhousedepends_on:-zookeeperclickhouse2:image:clickhouse/clickhouse-server:24.3ports:-"8124:8123"-"9001:9000"volumes:-./config.xml:/etc/clickhouse-server/config.xml-ch2-data:/var/lib/clickhousedepends_on:-zookeepervolumes:zk-data:ch1-data:ch2-data:

二、数据类型与表引擎

2.1 核心数据类型

-- 数值类型CREATETABLEnumeric_demo(id UInt64,-- 无符号64位整数count Int32,-- 有符号32位整数priceDecimal(18,2),-- 精确小数(总位数18,小数位2)ratio Float64,-- 浮点数is_active UInt8-- 布尔值(0/1))ENGINE=Memory;-- 字符串类型CREATETABLEstring_demo(name String,-- 变长字符串statusLowCardinality(String),-- 低基数优化(枚举值少)description Nullable(String),-- 可空字符串tags Array(String),-- 数组metadata Map(String,String)-- 键值对)ENGINE=Memory;-- 日期时间类型CREATETABLEdatetime_demo(created_atDate,-- 日期(精确到天)updated_atDateTime,-- 日期时间(精确到秒)event_time DateTime64(3),-- 毫秒精度timezoneDateTime('Asia/Shanghai')-- 带时区)ENGINE=Memory;

2.2 表引擎选型

-- 1. MergeTree系列(最常用,生产环境首选)CREATETABLEorders(order_id UInt64,user_id UInt64,product_id UInt64,amountDecimal(18,2),statusLowCardinality(String),created_atDateTime,updated_atDateTime)ENGINE=MergeTree()PARTITIONBYtoYYYYMM(created_at)-- 按月分区ORDERBY(user_id,created_at)-- 主键排序TTL created_at+INTERVAL1YEAR-- 1年后自动删除SETTINGS index_granularity=8192;-- 2. ReplacingMergeTree(去重引擎,适合维度表)CREATETABLEuser_profiles(user_id UInt64,username String,email String,updated_atDateTime)ENGINE=ReplacingMergeTree(updated_at)-- 按updated_at保留最新ORDERBYuser_id;-- 3. SummingMergeTree(预聚合引擎,适合指标表)CREATETABLEpage_views(page_url String,view_dateDate,views UInt64,unique_users UInt64)ENGINE=SummingMergeTree((views,unique_users))-- 自动求和ORDERBY(page_url,view_date);-- 4. AggregatingMergeTree(高级聚合引擎)CREATETABLEmetrics_hourly(metric_name String,hourDateTime,avg_value AggregateFunction(avg,Float64),max_value AggregateFunction(max,Float64),count_value AggregateFunction(count,UInt64))ENGINE=AggregatingMergeTree()ORDERBY(metric_name,hour);-- 5. Distributed(分布式表)CREATETABLEorders_distributedONCLUSTER'production'ASordersENGINE=Distributed('production','default','orders'
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 5:20:06

AI智能体安全审计技能:从静态分析到自动化安全左移

1. 项目概述:当AI智能体学会“安全审计”最近在AI智能体开发圈里,一个名为agentnode-dev/skills-security-audit的项目引起了我的注意。乍一看标题,你可能会觉得这又是一个普通的代码安全扫描工具。但深入探究后,我发现它的定位远…

作者头像 李华
网站建设 2026/5/15 5:17:09

企业级文档自动化平台docmancer:架构解析与工程实践

1. 项目概述:从“文档魔法师”到企业级文档自动化最近在梳理团队内部的知识管理流程时,我一直在寻找一个能够打通文档创建、协作、版本管理和自动化分发的“一体化”解决方案。市面上的工具要么太重,像Confluence那样需要复杂的配置和团队迁移…

作者头像 李华
网站建设 2026/5/15 5:17:07

你以为路径不会回头?一道 Self Crossing 让无数人当场破防

你以为路径不会回头?一道 Self Crossing 让无数人当场破防 很多人第一次刷到 Self Crossing(路径交叉) 这道题时,都有一种错觉: “不就是判断线段相交吗?这能有多难?” 结果一写代码: 判断漏了 边界炸了 图形绕晕了 Case 全挂了 最后看题解的时候,人都沉默了。 因为…

作者头像 李华
网站建设 2026/5/15 5:11:04

基于Swift与AppKit的macOS菜单栏AI工具聚合器开发实践

1. 项目概述:一个为Mac用户打造的AI助手集成工具如果你是一名Mac用户,同时又对当前层出不穷的AI工具感到眼花缭乱,那么你很可能和我一样,经历过这样的困扰:ChatGPT的对话窗口、Midjourney的Discord频道、Claude的网页界…

作者头像 李华