当前位置: 首页 > news >正文

完整教程:简单介绍一下Clickhouse及其引擎

完整教程:简单介绍一下Clickhouse及其引擎

一、ClickHouse 的优缺点


一、ClickHouse 的优点 ✅

1. 极致的查询性能

  • 列式存储:只读取查询涉及的列,大幅减少 IO。
  • 数据压缩:常见压缩率 5~10 倍,减少存储和带宽消耗。
  • 向量化执行:按批次(block)处理资料,充分利用 CPU SIMD 指令。
  • 并行查询:单机多核 + 集群分布式并行。

结果:在 TB~PB 级数据量上,秒级甚至毫秒级返回复杂聚合查询。


2. 实时写入 + 即时可查

适合 实时数据分析、监控、日志查询


3. 分区、索引、分布式能力

  • 主键索引 (Sparse Index):按分区范围做稀疏索引,快速定位数据。
  • 数据分区/分片 (Sharding & Partitioning):支持海量数据水平扩展。
  • 副本 (Replication):保证高可用和容灾。

许可支撑大规模集群部署


4. 丰富的信息引擎

冷热数据分层、与大数据生态结合方面很灵活。


5. 开源 + 活跃生态

  • Apache 2.0 协议,社区活跃。
  • 已在 Yandex、腾讯、美团、字节跳动等大规模落地。
  • 生态中有 Kafka、Spark、Flink、Airflow 等连接器。

6. 运维成本相对较低


二、ClickHouse 的缺点 ⚠️

1. 不适合事务场景

它是 OLAP 系统,定位是分析,而不是事务处理。


2. 写入删除机制有限

  • 删除 (DELETE/UPDATE)操作本质上是标记删除,素材会在后台合并时真正清理。
  • 写入是 批量块 (block),小量频繁写入效率较差。

适合 append-only 的场景(日志、监控),不适合频繁更新。


3. 学习曲线


4. 资源消耗

  • 凭借就是极致性能CPU、内存换取的

    • 查询时常常消耗大量内存。
    • 并发查询太多时可能出现 OOM。
  • 高性能存储介质(SSD/NVMe)更适合 ClickHouse,否则性能会打折扣。


5. 生态相对不如传统数据库


6. 集群管理复杂性

  • 虽然单机方便,但大规模集群下:

    • 表分片、副本、分布式查询路由,必须良好设计。
    • 运维经验不足时容易遇到资料倾斜、分片不均衡 的问题。

三、总结表格

方面优点缺点
性能秒级/毫秒级查询,列存+压缩+向量化高并发查询时内存占用大
写入高吞吐实时写入不适合频繁更新/删除,小批量写入低效
事务支持原子表缺乏完整 ACID,不能做 OLTP
架构分布式、分片、副本、高可用集群管理复杂
生态外部引擎丰富,社区活跃BI/ML 生态不如 MySQL/PG 丰富
运维单机简便,依赖少大规模集群需要专业经验

一句话总结

ClickHouse =高性能 OLAP 引擎,适合日志分析、指标监控、用户行为分析、大数据实时查询;
不适合 事务处理、频繁更新删除、强一致性场景


二、存储引擎 (Table Engines)


1. 核心概念

在 ClickHouse 里,表引擎 (Table Engine)决定了表的数据如何存储、分布、复制、合并以及如何被查询。


2. 主流存储引擎类别

(A) MergeTree 系列(最常用、最强大)

ClickHouse 的核心存储引擎族,支持就是这索引、分区、TTL、压缩、并行查询 等特性。
常见子类:

特点:适合绝大多数 OLAP 场景,是 ClickHouse 的主力。


(B) 日志型引擎(简便轻量)

不做复杂的合并和索引,性能和功能有限,适合小表、临时表。

  • Log:简单的日志表。
  • StripeLog:数据按列分 stripe 存储。
  • TinyLog:最方便的存储形式,写入文件,几乎没有额外功能。

常见于测试、小规模表。


© 内存型引擎


(D) 外部数据源 / 文件系统引擎

  • File:读写本地文件(支持 CSV、TSV、Parquet、ORC 等)。
  • HDFS:读写 HDFS 文档。
  • S3:读写 AWS S3 或兼容的对象存储。
  • URL:直接通过 HTTP/HTTPS 访问远程材料。
  • MySQL:把 MySQL 表映射为 ClickHouse 表。
  • PostgreSQL:访问 PostgreSQL 数据。
  • ODBC / JDBC:通过 ODBC/JDBC 访问外部数据库。
  • Kafka:从 Kafka 消费内容。
  • RabbitMQ:从 RabbitMQ 读写数据。
  • MongoDB:访问 MongoDB 数据。

适合做 外部数据源接入、ETL、实时内容摄取


(E) 分布式 / 集群引擎


(F) 特殊用途引擎

  • Null:丢弃所有写入,查询时返回空结果(类似 /dev/null)。
  • View:普通视图,不存储数据。
  • MaterializedView:物化视图,存储查询结果。
  • LiveView:实时视图,支持订阅数据变化。
  • Join:专门存储用于 JOIN 的数据。
  • Set:存储一个集合,用于 IN 查询。
  • Buffer:数据先写入内存缓冲区,再异步落到目标表。
  • Merge:将多个表合并为一个逻辑表。
  • Dictionary:存储字典型数据(维表)。

3. 总结

ClickHouse 的引擎大致可以分为几类:

类别代表引擎主要用途
核心存储MergeTree 系列高性能 OLAP,分区、索引、压缩
轻量存储Log、TinyLog、StripeLog小表、临时表
内存Memory临时计算
外部数据File、HDFS、S3、MySQL、Kafka数据交换、ETL、实时导入
分布式Distributed集群查询
特殊用途Null、View、MaterializedView、Join、Buffer特殊场景

相关文章:

完整教程:简单介绍一下Clickhouse及其引擎

完整教程:简单介绍一下Clickhouse及其引擎pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...

矩阵分解

LU 分解 考虑将 \(A\) 分解成 \(LU\),\(L\) 为上三角矩阵,\(U\) 为下三角矩阵。 利用矩阵经典性质 \(|A|=|L||U|\),可以轻易算出 \(det(A)\)。 考虑 \(A_{i,j}=\gcd(i,j)\),一个经典性质是 \(\sum_{d|n} \phi(d)=n\),那么设 \(L_{i,j}=[j|i]\),\(U_{i,j}=[i|j]\phi(i)\)。…...

第一周个人作业

我叫张司靓,第一次在博客园写随笔,就跟大家聊聊我自己,还有对接下来学习的想法,想到哪儿说到哪儿,主打一个真实~ 一、先跟大家唠唠我自己我的日常小爱好 我平时没事就爱追剧,玩游戏,举个具体的例子:之前出的莲花楼,我已经n刷了,但每次看到大结局的时候都给我哭的死去…...

基于 Gitlab 实现 Go 的 CI/CD

# 定义流水线的几个阶段 stages:- lint- test- build- docker- deploy# 定义所有 job 的默认环境变量 variables:GO111MODULE: "on"CGO_ENABLED: "0"GOPROXY: "https://goproxy.cn,direct"# 代码静态检查 lint: # 这是 job 的…...

2025.9.11

2025.9.11讲的网络流 1.早读 P13925 [POKATT 2024] 联合猫国 / The Paw-litical Game 感觉好像在哪见过这道题,但是我不会 其实是个 \(dp\) (复杂度对吗?) 就是设 \(f[i]\) 表示考虑前 \(i\) 个最少变成几个 转移就是枚举最后一个合法状态 复杂度是 \(\sum i\) 结尾合法状态…...

容斥原理

1. 定义 有N个集合,称为 S[1],s[2]...s[n] ,则这N个集合的并集为假如有N个毫不相干的约束条件,那么可以将所有满足某个约束条件的状态看作一个集合,这样用容斥原理就可以很轻松地求出所有满足至少一个约束条件的状态总数 2. 题目 洛谷P1287 盒子与球 https://www.luogu.com…...

【B】世良真纯

...

如何使用jobleap.cn避免简历中的严重错误

如何使用jobleap.cn避免简历中的严重错误在求职竞争激烈的今天,一份优质且无误的简历至关重要。许多优秀人才因简历中的细节错误被招聘人员淘汰,但这完全可以避免。jobleap.cn作为专业的人才服务平台,致力于帮助您精准优化简历,提升面试通过率,让您在第一轮筛选中脱颖而出…...

在 Zustand 中创建通用 Action 的优雅实践

为何需要通用 Action? 在 Zustand 状态管理库中,开发者常常需要为状态对象的每个字段单独编写更新函数。然而,随着状态结构的复杂化,这种方式会导致代码冗余,维护成本增加。例如: updateName: (name) => set(() => ({ name })), updateAge: (age) => set(() =&g…...

如何用产品思维优化简历的“用户体验”?

如何用产品思维优化简历的“用户体验”?用产品思维优化简历的用户体验,关键在于让你的简历更符合招聘需求,更易被HR快速理解和认可。简历就像产品,目标用户是HR和用人主管,需求来自职位描述,设计要简单、清晰、兼容多场景,信息需要精准量化。jobleap.cn 是专注于职业发展…...

简历如何优化,简历如何投递,面试如何准备?

简历如何优化,简历如何投递,面试如何准备?简历模板建议简洁,突出关键信息,避免花哨。格式请统一用PDF,防止样式错乱。技术岗位一般不建议贴照片。简历文件名规范为“姓名_学历_岗位_手机号”,这样更专业且便于识别。学历是优势,尤其是名校毕业,可以自信标注;工作经验…...

网络流做题笔记

P3227 [HNOI2013] 切糕 考虑最小割。 对于一个坐标上的点只能选择一个 \(z\) 坐标,将 \(z\) 坐标的费用作为流量顺次连接。 第二个限制条件,先去绝对值,枚举较大值。 再限制较小值,不能小于 \(z-D\),从 \((x,y,z)\) 向 \((x,y,z-D)\) 连 \(inf\) 即可。 方格取数问题 相邻…...

简历优化全攻略:如何写出吸引HR的简历?

简历优化全攻略:如何写出吸引HR的简历?在求职过程中,简历是敲开面试大门的关键。本攻略从准备、写作到完善,教你系统优化简历内容,提高求职成功率。在求职过程中,简历是敲开面试大门的关键。本攻略从准备、写作到完善,教你系统优化简历内容,提高求职成功率。 1. 写简历…...

重塑云上 AI 应用“运行时”,函数计算进化之路

答案是,远未准备好。无论是被誉为“云原生操作系统”的 Kubernetes,还是被看作“终极形态”的无服务器(Serverless),在面对 AI 应用时都暴露出了深刻的架构失配。作者:世如 引言:AI 应用的“电器时代”与运行时的“隐形枷锁” 阿里云王坚博士曾不止一次的强调云计算的核…...

25.9.12 C语言基本数据类型

预备知识 A、1 字节(byte)=8 比特(bit) 1个比特即为1个二进制位数 B、%d 按有符号十进制整型数打印 %6d 按十进制整型数打印,至少6个字符宽(指输出的最后一个字符距行首为六字符)如:xxx123 %f 按浮点数打印(默认为小数点后6位) %6f按浮点数打印,至少6个字符宽 %06f 按…...

Avalonia:基础导航

Avalonia本身就可以实现导航功能,在主页面放置 TransitioningContentControl 控件,把它绑定到ViewModel 中的一个属性上 ViewModelBase? _currentPage;,通过更新这个属性实现导航。 我们先建二个ViewModel,一个是ColorsViewModel,一个是AboutViewModel。 using Avalonia.D…...

bashrc的一些配置记录

linux-Ubuntu22.04的bashrc在配置cuda的时候还需要配置以下内容:export PATH=/usr/local/cuda/bin:$PATH export CUDA_HOME=/usr/local/cuda export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64 export…...

H5游戏性能优化系列-----协议相关优化

H5通讯协议这一块儿最长将的搭配应该是WebSocket+Protobuf这种模式吧,本篇就聊一下protobuf相关的优化。 Protobuf基本流程导入protobuf库 一般是后端定义协议文件,xxx.proto 现在的引擎都是要求写Ts文件的,所以要生成协议类的.d.ts,这样写协议处理时才有代码提示 直接加载…...

实现我的第一个langchain应用

这里我使用了科大讯飞的免费大模型来尝试 最简的应用 from langchain_community.chat_models import ChatOpenAI from langchain.schema import HumanMessagellm = ChatOpenAI(model_name="xop3qwen1b7", # 模型名称openai_api_base="https://maas-api.cn-huab…...

小说可视化系统设计(程序员副业项目)

https://blog.csdn.net/qq_33002279/article/details/151620553本文来自博客园踩坑狭,作者:韩若明瞳,转载请注明原文链接:https://www.cnblogs.com/han-guang-xue/p/19088351...

MyEMS与开源浪潮:如何重塑全球能源管理的未来格局

在气候变化与数字化转型的双重时代背景下,能源管理已从一项辅助性工作跃升为企业战略的核心。传统的、封闭的、昂贵的商业软件解决方案曾主导这一领域,但如今,一股由开源引领的变革浪潮正以前所未有的力量冲击着旧有格局。在这股浪潮之巅,MyEMS 作为一个全功能的开源能源管…...

React Antd or Antd Pro:findDOMNode is deprecated and will be removed in the next major release.

(旧项目)我一开始用的react:18.3.0, antd:5.21.1, ant-design/pro-components:2.7.19 (1)antd更新日志关于修复这个问题的最新一版是在2024/05/19的5.17.3版本(查询于2025/09/12)而且也是部分修复antd更新日志:https://ant-design.antgroup.com/changelog-cn(2)在 Pro…...

单板挑战4路YOLOv8!米尔瑞芯微RK3576开发板性能实测

在科技飞速发展的当下,人工智能与边缘计算的融合正以前所未有的速度重塑着我们的生活。RK3576芯片拥有4核Cortex-A72以及4核Cortex-A53提供基础算力,6TOPS算力NPU来模型推导运算。使用YOLOv8模型时也是手到擒来,接下来随着步伐看看它表现如何。 YOLO简介 YOLO(You Only Loo…...

doms.ul.querySelectorvs document.querySelector:DOM查询的层级关系

在JavaScript DOM操作中,doms.ul.querySelector和 document.querySelector都是用于查找元素的方法,但它们有重要的区别。让我详细解释它们的关系和差异。 核心区别特性document.querySelectorelement.querySelector​​搜索范围​​整个文档仅限于调用元素的子元素​​执行效…...

穿越钱塘江:一条高铁隧道背后的技术挑战

​2025年9月10日,中铁四局二公司杭州机场高铁站前5标柯桥制梁场首榀箱梁顺利浇筑,标志着铁路箱梁预制施工正式拉开序幕,工程建设全面进入实体施工新阶段。 ▲现场图片(图源:越牛新闻)这一节点不仅意味着杭州机场高铁在土建施工上实现关键突破,也为后续线路铺轨、站房建设…...

Pwn2Own Automotive 2025 决赛日:49个零日漏洞与88万美元奖金揭晓

本文详细记录了Pwn2Own Automotive 2025第三日决赛战况,涵盖ChargePoint/Sony/Autel等品牌设备漏洞利用细节,包括整数溢出、缓冲区溢出、命令注入等技术细节,最终累计颁发88.6万美元奖金。第三天最终战果 欢迎来到Pwn2Own Automotive 2025的第三个也是最后一个比赛日。过去两…...

9.HPA与VPA

HPA 与 VPA ​ 在前面的学习中我们使用了一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个是完全手动操作的,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象:Horizontal …...

MyEMS在行动:揭秘开源能源管理系统如何重塑工业与楼宇的能效未来

当“节能降耗”从一个口号变为一项关乎企业生存与发展的关键指标时,背后的管理工具便成为了决胜因素。Across the globe, 从德国的智能工厂到中国的绿色数据中心,一款名为MyEMS的开源系统正在悄然推动一场静悄悄的能源效率革命。 本文将通过场景化的视角,深入剖析MyEMS在不同…...

题解:P14015 [ICPC 2024 Nanjing R] 生日礼物

更差的阅读体验经典套路,我个人认为是橙题。 相邻相等不好刻画,我们直接把偶数位置反转,这样一组相邻相等中恰好有一个被反转,变成删除相邻不同。 那么假设没有 \(2\),最终序列中一定只有 \(0\) 或 \(1\)。所以假设 \(0,1\) 个数分别是 \(c_0, c_1\),那么由于一次消除一个…...

吻得太逼真

无论怎么讲我都觉得虚伪 陪伴你那么久你说是受罪 从前到现在当我是谁 你这花心蝴蝶 昨夜陪你醉伤到我心碎 你竟说我和你不配 完全忘记往日为何 能与我彻夜缠绵 和你吻吻吻吻吻 你吻得太逼真 让我把虚情假意 当作最真心的亲吻 怪自己来不及区分 你对我是酷爱是敷衍 我想问问问问…...

HyperWorks许可回收机制

随着企业业务的不断发展和工程设计的复杂性增加,软件许可资源的有效利用变得尤为重要。在这样的背景下,HyperWorks引入了智能的许可回收机制,旨在帮助企业更好地管理和再利用许可资源,提升效率和成本效益。 一、什么是HyperWorks许可回收机制? HyperWorks许可回收机制是一…...

flink on k8s的基本介绍

本文分享自天翼云开发者社区《flink on k8s的基本介绍》,作者:l****n 一、背景介绍 Apache Flink 是一个流处理引擎,具有高效的流处理和批处理能力,以及良好的可伸缩性和容错性。Kubernetes(简称 K8s)是一种容器编排系统,用于自动化容器部署、扩展和管理。将 Flink 部署…...

高性能计算基础

高性能计算基础 1 性能评估指标和测试工具 2 CPU流水线、推测窒息和分支优化 3 现代内存架构、访问模式以及对算法和数据结构设计的影响 4 多线程和并发工作原理 5 锁、无锁和无等待 6 线程安全的数据结构 7 并发编程 8 零拷贝 9 编译器优化基础知识 10 高性能编程设计总结...

flutter开发window打包成exe可执行文件的步骤

1. 环境准备,以及打包步骤说明环境自己准备,这篇文章只是说明打包步骤,是在项目能运行起来的前提下进行的。 cd 到项目的根目录下 fluttter pub get //更新项目依赖 flutter build windows -t lib/main_development.dart // -t指定程序入口文件,执行完可以生成可执行…...

Transtion动画组件要求包裹元素必须是单一根节点

在 Vue 3 中,组件的模板支持多个根节点(这被称为 Fragments)。虽然这提高了灵活性,但却与 <Transition> 组件的要求冲突了。<Transition> 组件的工作原理是通过在动画的不同阶段(进入/离开)为单个根元素添加或移除 CSS 类(如 v-enter-from, v-enter-active,…...

linux启动ntp服务

linux启动ntp服务服务端修改参数: vi /etc/chrony.conf客户端指定服务端地址:...

企业级 AI Agent 开发指南:基于函数计算 FC Sandbox 方案实现类 Chat Coding AI Agent

使用 AI 网关和 MSE Nacos 也有比较成熟的落地方案,所以今天通过真实案例,向大家分享再进阶一点的 Sandbox 的落地实践。作者:计缘 前言 我之前写过两篇如何构建 AI 应用/AI Agent 的文章,里面涵盖了多个环节,多个领域的组件,整体的核心思路是想表达AI应用的本质是以 AI …...

android开发局域网内通过NTP服务端自动更新系统时间

1. 问题:如果设备有机会处于外网,一般不会有系统时间自动同步问题,但是存在一些使用场景就是设备一直处于局域网环境,如果设备关机一段时间了,再启动设备后,时间可能是1970或者其实错误时间 2. 解决方法:系统时间的自动更新是通过ntp server服务在外网可用时自动请求和同…...

一招解决Proxmox VE虚拟机磁盘空间耗尽:LVM在线扩容实战 - 若

本文将记录一次完美的线上故障排除:在不重启服务、不停机的情况下,解决Proxmox VE中Ubuntu虚拟机根目录磁盘空间100%被占满的问题。问题场景:空间告急,服务危在旦夕 在管理一台名为 tools1 的Proxmox虚拟机时,系统突然报警。登录后执行 df -h 检查,发现根目录使用率已达1…...

jiaozi

教育观(素质教育的内涵):素质教育以提高国民素质为根本宗旨是 面向全体学生的教育是 促进学生全面发展的教育是 促进学生个性发展的教育 是   以培养学生创新精神和实践能力为重点的教育 教学观: 教学从”教育者为中心” 转向 “学习者为中心” 教学从“…...

基于Linux系统的定制软件安装硬件设备选型指南

用户需求分析与选择标准 核心需求分析Linux作系统支持 :设备必须预安装或支持主流 Linux 发行版。软件定制能力 :提供完整的开发环境和包管理支持。硬件性能 :足够的计算能力来运行自定义应用程序。接口扩展性 :丰富的I/O接口,满足多样化的应用场景。选择评估维度评估维度…...

c++之is_trivially_default_constructible

is_trivially_default_constructible 是 C++ 标准库中的类型特性工具,用于检查类型是否具有平凡的默认构造函数。以下是关键信息:定义与用途该工具属于 <type_traits> 头文件,用于编译时查询类型是否满足以下条件: 类型具有平凡的默认构造函数(无需特殊操作即可构…...

python3协程学习-async,await

参考文档: https://cloud.tencent.com/developer/article/2002528 https://cloud.tencent.com/developer/article/2480588?policyId=1004 什么是协程 https://docs.python.org/3.11/glossary.html#term-coroutine 协程:Coroutines are a more generalized form of subroutin…...

猫树分治

猫树分治,又称二区间合并,一种可以用 \(O(n\log n)\) 时空复杂度预处理,\(O(1)\) 处理区间询问的算法,与 cdq 和整体二分类似。 我们考虑线段树上,我们通过 pushup 操作不断合并两个区间,做到查询 \(O(\log n)\) 个区间回答询问,但是如果没有修改操作,我们可以只询问 \…...

Rust太难了。。。。。。。

rust是我学习过的除汇编之外最难的编程语言,难到什么程度? AI写的都是tm的错误,bug。AI在其他语言上面几乎不可能...

AI导航生成寻路点-FindPathToLocationSynchronously

FindPathToLocationSynchronously() example:FHitResult Hit;if (GetHitResultUnderCursor(ECC_PhysicsBody, false, Hit)){ CacheDestination = Hit.ImpactPoint;}if (UNavigationPath* NavPath = UNavigationSystemV1::FindPathToLocationSynchronously(this, Controll…...

cache写策略

cache写策略 写命中 全写法 当cpu对cache写命中时,必须把数据同时写入cache和主存,一般使用写缓冲 cpu不会一直在写入数据,当cpu去做其他事情的时候,会有一个控制电路,把数据从写缓冲逐一写入到主存 使用写缓冲,cpu写的速度很快,如果写操作不频繁,则效果很好,如果写操…...

个人微信开发

开发微信机器人需要以下几个基本概念:机器人接口开发:框架提供了开放接口,可以通过这些接口对微信进行操作。如接收用户消息、发送消息、操作朋友圈等。 自然语言处理:机器人需要能够理解自然语言,以便能够识别用户输入的意图,并做出相应的回应。自然语言处理包括文本分析…...

C++之std::is_trivially_copyable

在C++11中,平凡类型(Trivial Type)、平凡可复制类型(TrivialCopyable)、标准布局类型(Standard-layout Type) 是描述类在内存中布局特性的术语,它们与类的构造、拷贝、赋值和销毁行为有关,也影响着类的内存布局和对齐方式。 下面用通俗的语言解释这些概念: 平凡类型 …...

PostgreSQL技术大讲堂 - 第104讲:PostgreSQL分区表应用实践

PostgreSQL从入门到精通系列课程,100+节PG技术讲解,让你从小白一步步成长为独当一面的PG专业人员,点击这里查看章节内容,持续更新,欢迎加入。 第104讲:PostgreSQL分区表应用实践--让你速度提高20倍1、什么是基于哈希的分区?2、两级分区介绍3、catalog 查找开销4、pg_has…...