ClickHouse 为什么这么快

ClickHouse 为何如此之快 我们都知道,框架的设计可以分为自顶向下和自下而上,在传统观念中,或者说在我的观念中,做架构设计首先自然做的是顶层设计: 事先应该做高层次的抽象设计; 规划好各个模块的职责、切分的界面; 分配好工程结构、包结构,最好能再来一些设计图,等等。 而ClickHouse的设计,则采用了 自下而上。 他们是如何实践 自下而上 设计的呢? 从硬件功能层面着手设计,在设计伊始,就至少需要想清楚这么几个问题: 我们将要使用的硬件水平是怎样的?包括CPU、内存、硬盘、网络等等; 在这样的硬件上,我们需要达到怎样的性能?包括延 阅读详情

ClickHouse 作为一款开源列式数据库管理系统(DBMS)主要用于数据分析(OLAP)领域。

近年来国内开源社区非常火热,各个大厂纷纷跟进大规模使用。而提到 ClickHouse 最先想到的就是它极致的性能,计算速度开源公开 benchmark 显示比传统方法快 100~1000 倍,提供 50MB~200MB/s 的高吞吐实时导入能力。所谓“天下武功为快不破”,那 ClickHouse 到底是如何做到快速查询的呢?今天我们就来一起了解一下。

一、自下而上的设计

早在 2019 年年末,ClickHouse 项目的创始人兼开源社区创始人 — Alexey Milovidov,就在北京举行的中国大数据技术大会(BDTC 2019)上分享过自下而上的设计理念,那他们是如何实现这种设计的呢?

1. 着眼硬件,先想后做

从硬件功能层面着手设计,包括 CPU、内存、硬盘、网络等等,基于将硬件功效最大化的目的,ClickHouse 会在内存中进行 GROUP BY,并且使用 HashTable 装载数据。与此同时,他们非常在意 CPU L3 级别的缓存,因为一次 L3 cache miss 会带来 70~100 纳秒的延迟,这意味着,在单核 CPU 上,它会浪费 4000 万/每秒的运算;而在一个 32 线程的 CPU 上,则可能会浪费 5 亿/每秒的运算。

2. 算法在前,抽象在后

实现性能的最大化,算法的选择是重中之重。有时候,选择比努力更重要,以字符串搜索算法为例,针对不同的场景,ClickHouse 最终选择了这些算法:

  • 对于常量,使用 Volnitsky 算法;

  • 对于非常量,使用 CPU 的向量化执行 SIMD,暴力优化;

  • 正则匹配使用 re2 和 hyperscan 算法。

3. 特定场景,特殊优化

针对同一个场景的不同状况,使用不同的实现方式,尽可能地将性能最大化。例如去重计数 uniqCombined 函数,根据数据量的不同,会选择不同的实现方式:

  • 当数据量较小的时候,会选择 Array 保存;

  • 当数据量中等时候,则会选择 HashSet;

  • 而当数据量很大的时候,则使用 HyperLogLog 算法。

4. 勇于尝鲜,不行就换

除了字符串之外,在很多场景下 ClickHouse 会使用最合适、最快的算法。如果市面上出现了号称性能强大的新算法,ClickHouse 也会将其纳入并进行验证,如果效果可行,就保留使用。

5. 持续测试,持续改进

实践是检验真理的唯一标准,ClickHouse 还拥有一个能够持续验证、持续改进的机制。

由于 Yandex 的天然优势,ClickHouse 经常会使用真实的数据做测试,这一点很好地保证了测试场景的真实性。与此同时,ClickHouse 是发版速度非常快的开源软件了,每个月都至少能发布一个版本,这得力于一个可靠的持续集成环境。也正是因为拥有这样的发版频率,ClickHouse 才得以在快速迭代、快速改进中逐渐强大起来。

二、列式存储

相比于行式存储,列式存储在分析场景下有着许多优良的特性。

1)分析场景中往往需要读大量行但是少数几个列。在行存模式下,数据按行连续存储,所有列的数据都存储在一个 block 中,不参与计算的列在 IO 时也要全部读出,读取操作被严重放大。而列存模式下,只需要读取参与计算的列即可,极大地减低了 IO,加速了查询。

2)同一列中的数据属于同一类型,压缩效果显著。列存往往有着高达十倍甚至更高的压缩比,节省了大量的存储空间,降低了存储成本的同时,从磁盘中读取相应数据耗时也更短。

3)自由的压缩算法选择。不同列的数据具有不同的数据类型,适用的压缩算法也就不尽相同。可以针对不同列类型,选择最合适的压缩算法。

4)高压缩比,意味着同等大小的内存能够存放更多数据,系统 cache 效果更好。

官方数据显示

clickhouse为什么快 它们分别表示在此段数据区间内,在对应的 .bin 压缩文件中,压缩数据块的起始偏移量,以及将该数据压缩块解压后,其未压缩数据的起始偏移量。解决删除场景,CollapsingMergeTree 引擎要求在建表语句中指定一个标记列 Sign(插入的时候指定为 1,删除的时候指定为 -1),后台 Compaction 时会将主键相同、Sign 相反的行进行折叠,也即删除。总的来说:一级索引和标记文件一一对齐,两个索引标记之间的数据就是一个数据区间,在数据文件中,这个数据区间的所有数据,生成一个压缩数据块。 阅读详情

相关推荐

ClickHouse为什么那么快

为啥他能这么快呢?设计如此=-=

GaleZhang的博客 695

为什么ClickHouse比传统数据库快100倍?

ClickHouse是一款专为OLAP场景设计的开源列式数据库,由俄罗斯Yandex公司开发。其核心优势包括列式存储、向量化执行引擎和MergeTree存储引擎,可高效处理PB级数据,实现亚秒级查询响应。与OLTP系统相比,ClickHouse特别适合读多写少、大宽表、复杂查询的海量数据分析场景。通过列式存储减少I/O开销,向量化执行提升计算效率,以及分区键优化数据访问,ClickHouse在互联网、金融、物联网等领域都有广泛应用,帮助企业大幅降低数据分析成本,提升处理效率。

AI时代光年 2271

ClickHouse为何那么快?逻辑数据模型/物理存储模型/核心特性/不足

ClickHouse 架构 集群架构 ClickHouse 采用典型的分组式的分布式架构,具体集群架构如上图所示: Shard:集群内划分为多个分片或分组(Shard 0 … Shard N),通过 Shard 的线性扩展能力,支持海量数据的分布式存储计算。 Node:每个 Shard 内包含一定数量的节点(Node,即进程),同一 Shard 内的节点互为副本,保障数据可靠。ClickHouse 中副本数可按需建设,且逻辑上不同 Shard 内的副本数可不同。 ZooKe

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 2878

strsearch:实现 Volnitsky 字符串搜索算法,参考 http

搜索 实现 Volnitsky 字符串搜索算法,参考

快速了解ClickHouse原理

ClickHouse原理解析。关键字:BigTable,大数据。 Yandex公司大佬出得教程。

开源libmodbus编译为32位和64位动态库

libmodbus 是支持Linux,Mac OS X,window 的一个开源库,支持modbus TCP和RTU 两种模式。

lemontree1945的博客 1922

windows10系统上安装最新版mysql 8.0详细步骤

windows10系统上安装最新版mysql 8.0详细步骤

glei20的博客 6715

Argoverse轨迹预测实战:从数据加载到地图API应用全解析

本文详细解析了Argoverse数据集在轨迹预测中的应用,从数据加载到地图API的实战技巧全涵盖。通过具体代码示例展示如何高效处理轨迹数据、实现可视化及基础预测模型,帮助开发者快速掌握自动驾驶轨迹预测的核心技术。特别介绍了Argoverse地图API的深度应用和性能优化经验。

weixin_29182481的博客 241

计算文本相似度的常用算法

NLP、数据挖掘领域中,文本分析是一个很重要的领域,这有助于我们去让计算机理解语言的作用和使用。文本分析是数据挖掘的重要手段,利用文本分析,我们将很快的读取到一本书、一篇文章、一段话中的关键词和核心思想,而文本相似度就是我们用来剔除无用信息或者重复信息的重要手段,让计算机去找文本中的不同。 在生活中,信息检索、数据挖掘、机器翻译、文档复制检测等领域都应用到“文本相似度”。文本不仅仅是文字,文本相似度的应用更广,除了文字的匹配,还可以是图片、音频等,因为它们的实质都是在计算机中都是以二进制的方式存在的。相.

氧小氢的博客 2万+

实战指南:如何用Elasticsearch+Milvus搭建十亿级多模态搜索系统(含性能调优)

本文详细介绍了如何利用Elasticsearch和Milvus构建十亿级多模态搜索系统,包括架构设计、性能调优和实战部署。通过混合架构实现高效文本检索与向量相似度计算,显著提升查询性能与扩展能力,适用于大规模多模态数据处理场景。

x8y9z0的博客 1171

Allegro17.2 出gerber文件详细流程 - 干货

Allegro17.2 出gerber文件详细流程 - 干货

u010614434的博客 1万+

VSCode 搭建C/C++编程环境 2025新版图文安装教程(VSCode安装 + C/C++环境搭建 + 运行测试 + 背景图设置)

100%搭建成功,VSCode 搭建C++编程环境 2025新版图文安装教程(VSCode安装+C++环境搭建+运行测试+背景图设置)

Code_流苏:在代码中寻诗意,在实践中觅真知 2974

【教程4>第10章>第13节】基于FPGA的图像双边滤波开发——单通道双边滤波Verilog实现

本文介绍了基于Vivado 2022.2的单通道高斯滤波FPGA实现方案。主要内容包括:1)采用3×3窗口像素提取、高斯权值计算、exp指数运算等模块构建双边滤波系统;2)详细分析了Verilog HDL实现的顶层设计文件,包含窗口数据生成、指数计算、混合权重、归一化处理等关键模块;3)展示了图像双边滤波器的RTL结构图。该设计为后续实现RGB三通道图像高斯滤波及MATLAB联合仿真奠定了基础。

FPGA/MATLAB学习教程/源码/项目合作开发 262

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: ClickHouse 核心引擎 MergeTree 解读
下一篇: Hive千亿级数据倾斜解决方案
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值