简单介绍一下Clickhouse及其引擎

一、ClickHouse 的优缺点


一、ClickHouse 的优点 ✅

1. 极致的查询性能

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

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


2. 实时写入 + 即时可查

  • 支持高并发写入(百万级/秒),数据写入后几乎立即可查询。
  • 比 Hive、Presto 这类 批处理查询引擎 要快得多。

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


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

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

👉 可以支撑 大规模集群部署


4. 丰富的数据引擎

  • MergeTree 系列:主力 OLAP 存储。
  • 外部数据源引擎:MySQL、Kafka、HDFS、S3、Postgres、MongoDB 等。
  • Buffer、MaterializedView:支持实时 ETL。

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


5. 开源 + 活跃生态

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

6. 运维成本相对较低

  • 单机就能跑得很好,部署门槛低。
  • 不依赖 Hadoop 生态(相比 Hive/Presto)。
  • 对比 Druid、Kylin,运维复杂度更低。

二、ClickHouse 的缺点 ⚠️

1. 不适合事务场景

  • 没有完整的 ACID 事务,仅支持有限的 原子性操作 (Atomic engine)
  • 不适合 OLTP(银行转账、电商订单等强一致性场景)。

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


2. 写入删除机制有限

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

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


3. 学习曲线

  • 引擎种类多(MergeTree 系列、Log、Buffer…),新手需要理解其差异。
  • SQL 方言与标准 SQL 有些差别,比如 LIMIT BYSAMPLEFINAL 等。

4. 资源消耗

  • 极致性能是通过 CPU、内存换取的

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


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

  • BI 工具支持在增强,但相比 MySQL/Postgres 还是稍弱。
  • 机器学习、流处理生态,需要依赖 Spark/Flink 来补充。

6. 集群管理复杂性

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

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

三、总结表格

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

📌 一句话总结

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


二、存储引擎 (Table Engines)


1. 核心概念

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

  • 有些引擎是 存储型(比如 MergeTree),真的把数据落盘。
  • 有些是 视图型(比如 View),不存储数据,只做查询映射。
  • 有些是 外部数据源型(比如 MySQLKafkaHDFS),数据存在别处。

2. 主流存储引擎类别

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

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

  • MergeTree:基础版本。
  • ReplacingMergeTree:支持用指定列替换重复数据。
  • SummingMergeTree:自动对相同 key 的数据做聚合(求和)。
  • AggregatingMergeTree:支持存储预聚合数据(配合 AggregateFunction)。
  • CollapsingMergeTree:支持“折叠”正负标记的数据(常用于 CDC、日志)。
  • VersionedCollapsingMergeTree:带版本号的折叠,解决数据顺序问题。
  • GraphiteMergeTree:专门为 Graphite 监控数据设计(支持 rollup)。

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


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

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

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

👉 常见于测试、小规模表。


© 内存型引擎

  • Memory:数据全在内存里,重启会丢失,适合临时计算。

(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) 分布式 / 集群引擎

  • Distributed:把表分布到多个 ClickHouse 节点,支持分布式查询。
  • Dictionary:存储字典数据(常用于维表 join)。

(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特殊场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96998.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【卷积神经网络详解与实例】8——经典CNN之VGG

1 开发背景 VGGNet是牛津大学视觉几何组(Visual Geometry Group)提出的模型,该模型在2014ImageNet图像分类与定位挑战赛 ILSVRC-2014中取得在分类任务第二,定位任务第一的优异成绩。其核心贡献在于系统性地探索了网络深度对性能的影响,并证明…

【分享】中小学教材课本 PDF 资源获取指南

很多人都不知道,其实官方提供的中小学教材课本 PDF 文档是完全免费且正版的,无需使用扫描版,清晰度和质量都非常高。 这些资源就藏在国家中小学智慧教育平台(basic.smartedu.cn)上。这个平台涵盖了从小学到高中的各个…

js趣味游戏 贪吃蛇

以下是关于JavaScript趣味游戏的系统性整理,涵盖经典案例、开发工具、教程资源及创意方向,助您快速掌握JS游戏开发的核心逻辑:一、经典JS趣味游戏案例贪吃蛇(Snake Game)核心机制:键盘控制蛇的移动方向&…

【Redis#11】Redis 在 C++ 客户端下的安装使用流程(一条龙服务)

一、安装使用 --Ubuntu 下启用 1. 前置依赖 - hiredis hiredis 是一个用 C 语言实现的 Redis 客户端库,redis-plus-plus 库基于 hiredis 实现。在开始之前,请确保已安装 libhiredis-dev,可以通过以下命令安装: sudo apt install l…

kibana+elasticsearch console查询示例

kibana console查询入口如下 http://localhost:5601/app/dev_tools#/console/shell 1 整体查询 获取index为newbook的所有数据 GET newbook/_search 2 通用查询 获取index为newbook的数据中,bookname包含“西游”的所有数据。 GET newbook/_search { "query&q…

软考系统架构设计师之软件风格篇

一、软件架构风格-数据流风格 数据-》第1步处理-》数据-》第2步处理-》数据-》第N步处理 【分步处理】 优点: 1、松耦合【高内聚-低耦合】 2、良好的重用性/可维护性; 3、可扩展性【标准接口适配】 4、良好的隐蔽性; 5、支持并行。 缺点 1、交互性较差; 2、复杂性较…

初始QML

由于项目原因,最近要进行qml相关开发,我之前也没有搞过qml,因此开一个qml系列的专栏,记录自己关于qml的相关学习新建第一个qml工程按如下图所示方法新建一个最简单的qml工程:编译运行可以看到是一个标题为“hello word…

Coze源码分析-资源库-创建知识库-基础设施/存储/安全

6. 基础设施层 基础设施层为知识库创建功能提供底层技术支撑,包括数据存储、缓存、消息队列、文档处理、向量化等核心服务。 6.1 数据存储服务 6.1.1 MySQL数据库 文件位置: backend/infra/rdb/mysql.go // MySQLConfig MySQL配置 type MySQLConfig struct {Host …

【iOS】设计模式复习

目录 观察者模式 通知机制 基本使用 注册观察者 创建一个通知 发送通知 通知与多线程 使用异步发送通知 NSNotificationQueue通知队列 在子线程中运行观察者函数 实现原理 named表 nameless表 wildcard表 添加观察者 发送通知 移除通知​ KVO机制 基本使用 …

RK3568 NPU :RKNN-ToolKit2环境搭建

1. 安装Miniconda3 下载 Linux 64 位 Miniconda 最新版安装脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh安装 Miniconda bash Miniconda3-latest-Linux-x86_64.sh -u安装完成后会自动设置环境变量。打开新的终端,发现用户名前…

Ubuntu 24.04 Server 版系统安装及配置

Ubuntu 24.04 Server 版安装及配置 文章目录Ubuntu 24.04 Server 版安装及配置一、获取安装文件二、虚拟机配置三、安装界面四、配置网络五、扩容根分区 一、获取安装文件二、虚拟机配置三、安装界面 选择English(US)问是否升级内核配置键盘手动配置ipv4…

Java 事务失效场景全解析

在 Java 开发中,事务管理是保证数据一致性的核心机制,尤其是在 Spring 框架中,Transactional注解的使用极大简化了事务配置。然而,在实际开发中,事务常常会因为一些细节问题而失效,导致数据异常。本文将详细…

【Coze搞钱实战】14. 抖音直播间自动回复机器人实战教程:三小时搭建智能客服,互动率提升150%(保姆级无代码指南)

摘要:抖音直播间高频问题重复回复、观众互动不及时是运营痛点。本文针对新手和进阶用户,提供无代码的自动回复机器人搭建方案:新手1小时完成基础配置(Coze+抖音对接),进阶用户通过促销倒计时、粉丝分层、热点借势三大策略提升互动率150%。方案基于某女装直播间实测数据(…

云计算核心知识梳理

云计算作为新一代信息技术的核心,其体系涵盖特点、定义、技术演进及分类等多个维度,以下是对相关知识的系统整合与解读。 一、云计算的核心特点 / 优势 云计算的优势围绕资源利用效率、服务灵活性和管理便捷性展开,具体可拆解为五大核心特性: 按需自助服务:用户无需人工干…

安卓13_ROM修改定制化-----安卓 13 系统 ROM 定制化与低版本系统的核心区别

安卓系统凭借其全球领先的市场占有率,开放特性为厂商和开发者提供了深度定制的空间,形成了丰富的ROM生态圈。从最初的安卓1.0到最新的安卓15,系统在功能、性能和安全方面不断迭代升级,同时也为ROM定制带来了新的机遇与挑战。特别是从安卓11开始,谷歌对系统架构和安全机制进…

【Java后端】Spring Boot 2.7.x 和 Swagger 3.0.x (springfox 3.x) 的兼容性问题

springfox 在 Spring Boot 2.6 开始就有很多兼容性 bug(主要是 Spring MVC PathPatternParser 的引入),导致在 Spring Boot 2.6/2.7 里经常出现 无法启动 / 无法访问 swagger-ui.html 的情况。🔎 问题原因Spring Boot 2.6 开始默认…

Vue3+ts使用oidc-client-ts

配置 OIDC 客户端 在项目中创建 authOptions 对象,定义 OIDC 认证所需的配置项: export const authOptions {authority: https://xxxxxxxxx/UserCenter, // 认证服务器 URLclient_id: xxxx, // 客户端 IDredirect_uri: http://localhost:3000/callbac…

从 “数据中转站“ 到 “边缘智能中枢“:区域网关的技术突围与开发范式重构

在物联网架构中,区域网关长期被视为 "边缘与云端的桥梁"—— 负责协议转换、数据转发、设备接入等基础功能。但随着边缘计算兴起与 AI 模型轻量化,区域网关正经历从 "被动转发" 到 "主动决策" 的范式跃迁。 本文将从开发视角拆解区域网关的三大…

Django全栈班v1.04 Python基础语法 20250913 早上

print 函数基本用法 print函数会自加换行符,一个print,会打印一行输出。 print("第一行") print("第二行") print("第三行")输出结果:print 输出多个值 一个print可以同时输出多个值,这多个值会在一…

面试鸭Java八股之Kafka

Kafka是什么?它的主要应用场景有哪些? Kafka是一种分布式流事件处理平台,最初由 LinkedIn 开发,现在是 Apache 基金会的一部分。它的核心功能主要包括消息队列、流处理和数据集成。Kafka以高吞吐量、低延迟、可扩展和高容错性著称。 Kafka…