源码分析 | ClickHouse和他的朋友们(1)编译、开发、测试

C++开源项目学习指南:从入门到精通的实战路径 C++作为一门支撑操作系统、游戏引擎、数据库等核心系统的基础编程语言,其高性能和底层控制能力是构建复杂软件系统的基石。理解其核心原理,如内存管理、编译过程和并发模型,对于掌握系统级编程至关重要。现代C++标准(C++11/14/17/20)引入了智能指针、移动语义等特性,极大地提升了开发效率和代码安全性,其技术价值在于能够构建出既高效又可靠的大型软件。在实际应用场景中,无论是开发**高性能网络服务器**、**实时图形渲染引擎**,还是构建分布式存储系统,深入学习和借鉴优秀的开源项目都是快速提升工程能力的捷径 阅读详情

本文首发于 2020-06-05 19:37:10

《ClickHouse和他的朋友们》系列文章转载自圈内好友 BohuTANG 的博客,原文链接:
https://bohutang.me/2020/06/05/clickhouse-and-friends-development/
以下为正文。

一次偶然的机会,和ClickHouse团队做了一次线下沟通,Alexey提到ClickHouse的设计哲学:

  1. The product must solve actual problem
  2. And do it better than others

用工程思维解决商业问题的典范啊!

对用户来说,他们关心的不是什么天花乱坠、上天入地的高科技,只是需要一个能很好解决自己问题的方案,这在开源社区是非常难得的,靠实力“野蛮式”生长。

于是,我对这个散发着伏特加味道的利器充满了好奇,并参与到ClickHouse的社区中一探究竟,第一感觉是开放、友好、战斗力强(AK47 vs CK16, ClickHouse 2016年开源)。

本文先从编译和测试入手,再到如何为社区贡献Patch,希望对那些想参与CK社区的同学有所帮助。

如何本地编译和测试ClickHouse?

源码获取

git clone --recursive https://github.com/ClickHouse/ClickHouse

编译准备

sudo apt install build-essential
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

sudo apt-get install gcc-9 g++-9 git python ninja-build
sudo snap install cmake

开始编译

cd ClickHouse
mkdir build
cd build
export CC=gcc-9
export CXX=g++-9
cmake ..
ninja

测试方法

ClickHouse的测试在官方development/tests文档里有详细的介绍,这里列举3个常用的测试模式:

1. Functional Tests

功能测试,主要用于ClickHouse内部功能测试,方式:输入一个sql文件,输出一个result,类似MySQL里的mtr,测试集合

cd tests
./clickhouse-test -c "../build/programs/clickhouse-client" 00001_select_1
2. Integration Tests

集成测试,主要用于涉及第三方服务的测试,比如MySQL/Postgres/MongoDB等,以容器化方式编排调度(pytest)运行,测试集合

由于涉及模块较多,集成测试环境的搭建有一定的难度,建议使用官方的docker镜像。比如要跑test_mysql_protocol下的集成测试集:

cd tests/integration
docker pull yandex/clickhouse-integration-tests-runner
./runner --binary /your/ClickHouse/build/programs/clickhouse  --bridge-binary /your/ClickHouse/build/programs/clickhouse-odbc-bridge --configs-dir /your/ClickHouse/programs/server/ 'test_mysql_protocol/test.py::test_java_client -ss -vv'
3. Unit Tests

单元测试,主要用于代码模块的测试,测试集在各个模块的tests目录,比如: Core/tests

如果大家想了解某个模块是如何工作的,强烈建议去翻翻该模块的tests目录,比如想了解processor的工作机制,跟踪调试 Processors/tests/ 即可。

如何给ClickHouse社区提Patch?

1. fork

首先在自己的github上fork一份ClickHouse代码,比如 https://github.com/BohuTANG/ClickHouse

2. clone到本地

git clone --recursive https://github.com/BohuTANG/ClickHouse
git checkout -B mysql_replica(branch名字)

3. 创建新的分支

git checkout -B mysql_replica(branch名字)

4. 功能开发

开发者可以提交一个Draft Pull Request到官方,github会显示这个Pull Request处于Draft状态,官方是无法Merge的

5. can be testd标签

等待Upstream打[can be tested]标签,一旦被标记CI狂魔们就强势开跑,跑一轮大概需要几十个小时。
协助开发者发现一些代码Style、编译以及测试等错误,这样开发者就可以在自己的分支不停的迭代、修正。

如果只是修改typo,这个标签Upstream通常不会添加。

6. 开发完毕

开发完成,测试OK,把Draft提升为正式Pull Request,等待Upstraem Review。

7. Merge到Master

如果Upstream通过,你的代码会被Merge到Master,恭喜你成为ClickHouse贡献者

8. 注意事项

ClickHouse Upstream迭代非常快,一定要多关注master分支进度,尽量保持自己的分支代码与master同步。否则Upstream Docker更新,自己的test可能就过不了。

建议把doc/development读一遍。


欢迎关注我的微信公众号【数据库内核】:分享主流开源数据库和存储引擎相关技术。

标题网址
GitHubhttps://dbkernel.github.io
知乎https://www.zhihu.com/people/…
思否(SegmentFault)https://segmentfault.com/u/db…
掘金https://juejin.im/user/5e9d3e…
开源中国(oschina)https://my.oschina.net/dbkernel
博客园(cnblogs)https://www.cnblogs.com/dbkernel
Clickhouse系列六:源码解读GroupBy 单机Clickhouse GroupBy的功能是被业界津津乐道的。那么它又是怎么能达到这么好的性能的呢?优化点在哪里呢。这里我们来去探索下Clickhouse关于GroupBy的秘密。 说到GroupBy那就不能不提聚合函数了,在Clickhouse里面关于GroupBy的设计是非常优秀的,Clickhouse计算引擎是通过火山模型来实现的,但是火山模型有一个非常大的性能损耗就是虚函数调用的开销 阅读详情

相关推荐

Kettle9.4支持Clickhouse数据源插件开发以及性能测试

最近业务这边有个指标需要用到大数据这边的列式数据库进行处理,由于kettle不支持clickhouse数据源驱动,这里查了一下网上的相关资料,发现了一些别人开发好的驱动包,下载下来后使用效果不尽人意。总结下来有以下几个问题:不支持schema目录展示生成的DDL语句无法执行,右键预览数据报错查询数据出现错误。

sharehoo的博客 1132

ClickHouse 最简单的编译环境搭建方法

本文主要介绍如何搭建 ClickHouse 的开发环境。虽然 ClickHouse 官方文档对不同系统提供了相应的配置方法,但是在安装依赖时又常会出现各种各样的问题,所以本文给出一种非常快速的环境配置方法来方便读者更好的了解 ClickHouse。虽然 ClickHouse 支持 MacOS 编译,但是 MacOS 不能很好对支持 ClickHouse 所有组件的编译,所以建议还是使用 Linux 进行编译调试。本文是在 CentOS 7 中进行环境配置的。

一只努力的微服务 1939

clickHouse_note:ClickHouse笔记

clickHouse_note 学习顺序 - 1.README // clickhouse是什么 - 2.Installation // 简单的3台clickhouse集群搭建 - 3.Interfaces // clickhouse接口 -> clickhouse第三方工具 - 4.Engines // clickhouse MergeTree 系列引擎原理 学习计划进度表 周 日期 大标题 小标题 进度 小结 2020年49周 11.30〜12.6 合并树 储存 30% 2020年50周 12.7〜12.13 合并树 索引 30% Clickhouse笔记 Clickhouse是什么? 通俗而言,Clickhouse是一个面向列的数据库管理系统,用于OLAP:查询的联机分析处理。 对于面向行的数据库管理系统而言,一行物理存储在一起。 对于面向列的数据库管理系统而言,针对列:一列

如何调试ClickHouse源码

如何调试ClickHouse源码 本文介绍ClickHouse源码的编译安装,并介绍了如何通过lldb来调试Clickhouse。 安装依赖的包和工具 $ brew install cmake ninja libtool gettext 下载源码 源码比较大,可能时间比较长一些。 $ git clone --recursive https://github.com.cnpmjs.org/ClickHouse/ClickHouse.git # 若是中断可以使用以下命令 $ git fetch --rec

zg_hover的专栏 1677

快速了解ClickHouse原理

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

ClickHouse中文翻译文档 (开源分析性数据库--高速查询,大数据实时分析时代黑马)

ClickHouse,开源的数据分析性的数据库。 Clickhouse的具体特点(不支持事务,不同于关系型数据库): Ø  1.真正的面向列的DBMS Ø  2.数据高效压缩 Ø  3.磁盘存储的数据 Ø  4.多核并行处理 Ø  5.在多个服务器上分布式处理 Ø  6.SQL语法支持 Ø  7.向量化引擎 Ø  8.实时数据更新 Ø  9.索引 Ø  10.适合在线查询 Ø  11.支持近似预估计算 Ø  12.支持嵌套的数据结构 Ø  支持数组作为数据类型 Ø  13.支持限制查询复杂性以及配额 Ø  14.复制数据复制和对数据完整性的支持 ClickHouse的不完美: Ø 1.不支持事物。 Ø 2.不支持Update/Delete操作。 Ø 3.支持有限操作系统。

odbc 编译 linux,Clickhouse ODBC在Centos6下的编译方法

Clickhouse ODBC github地址:由于需要在CentOS 6下使用Clickhouse ODBC,但是提供的编译版本是在CentOS 7下编译的,就需要自己编译了。0.检查先在CentOS 6下检查下,报缺乏依赖包ldd libclickhouseodbc.so./libclickhouseodbc.so: /lib64/libc.so.6: version `GLIBC_2.14...

weixin_42308697的博客 504

【从零搭建到实战运行】基于PX4-1.13与XTDrone的FAST-LIVO2 Gazebo仿真全流程解析

本文详细解析了从零开始搭建基于PX4-1.13飞控、XTDrone仿真框架与Gazebo的FAST-LIVO2无人机仿真平台的全流程。内容涵盖环境配置、Livox雷达插件定制、算法部署与参数调试,旨在帮助开发者快速构建完整的激光-惯性-视觉SLAM仿真环境,并解决集成过程中的常见问题。

weixin_29218509的博客 522

ClickHouse源码简析

ClickHouse源码简析

driftingman的专栏 1787

VisionMaster位置修正功能深度解析:如何让找圆工具自动跟随移动目标?

本文深度解析海康威视VisionMaster平台的位置修正功能,重点介绍如何通过模板匹配与找圆工具的智能联动实现移动目标的动态追踪。文章详细阐述了工业视觉检测中的坐标系同步原理、模板匹配配置技巧及异常处理策略,为工程师提供了一套完整的工业级解决方案。

uu89012的博客 287

STM32F4+FreeRTOS实战:手把手教你移植LWIP2.1.2(含LAN8720配置避坑指南)

本文提供了一份详尽的实战指南,手把手教你如何在STM32F4平台结合FreeRTOS实时操作系统,成功移植轻量级TCP/IP协议栈LWIP 2.1.2。文章重点剖析了硬件驱动层LAN8720 PHY芯片的配置要点与常见“坑点”,并深入讲解了LWIP与FreeRTOS的深度整合、关键配置及稳定性优化策略,旨在帮助开发者构建稳定可靠的产品级嵌入式网络功能。

ik678901234的博客 1064

2023-01-18 ClickHouse之聚合功能源码分析

本来想再写详细一点的,但是发现现在这个程度已经2w多字了,再往下写就是一些过于细节繁杂的内容,写了估计也没耐心看,把握住框架,需要的时候再看细节吧。聚合分析这部分代码充分说明了这样一个事实:ClickHouse之所以有如此优秀的性能,不是因为在某个或者某几个地方采用了特别牛逼的优化技巧和方法,而是作为一个软件系统,它能够将大部分常见的工程优化整合到系统的各个链路上下游中,并且还能保证一定的代码质量和合理的抽象水平,避免随着不断迭代开发导致代码完全屎山化。

悟世之路 2014

ESP32+MAX7219二进制时钟设计与嵌入式时间映射实践

二进制时钟是嵌入式系统中数据表示与物理呈现深度耦合的典型范例,其核心在于将时间语义(年月日时分秒)解构为比特位,并通过LED点阵的空间权重布局实现直观识别。该设计依托RTC模块提供时间基准,依赖SPI协议完成微控制器与专用驱动芯片(如MAX7219)的可靠通信,涉及寄存器级配置、位图坐标变换、软硬件时序对齐等关键原理。技术价值体现在低资源占用下的高可读性人机交互,适用于教学演示、极客项目及嵌入式UI原型开发。本文聚焦ESP32平台在MicroPython环境下,结合MAX7219驱动8×8点阵实现高可靠性二

weixin_42160645的博客 304

Clickhouse源码分析

继承IFunctionpublic::定义返回类型:实现函数逻辑继承IStoragepublic:read:定义数据读取逻辑write:定义数据写入逻辑(可选)alter:支持表结构修改});继承IDataTypepublic::序列化逻辑:反序列化逻辑:创建对应列类型});

Made In SQL 1286

BurpSuite实战:5分钟搞定DVWA的CSRF漏洞测试(附详细截图)

本文详细介绍了如何使用BurpSuite在DVWA靶场中进行CSRF漏洞测试,包括环境配置、攻击原理剖析、分步攻击演示及企业级防御方案。通过实战案例,帮助读者深入理解CSRF漏洞的危害与防护措施,提升Web应用安全防护能力。

weixin_30879169的博客 495

Windows下Python安装geopandas全攻略:解决GDAL依赖问题的5个关键步骤

本文详细解析了在Windows系统下安装Python地理空间分析库geopandas时,如何有效解决其核心依赖GDAL的编译难题。文章提供了五个关键步骤,包括理解依赖关系、获取预编译wheel文件、顺序安装及环境验证,旨在帮助用户绕过复杂的C++编译环境,顺利完成geopandas的安装部署。

weixin_28221501的博客 286

源码分析 | ClickHouse和他的朋友们(9)MySQL实时复制与实现

很多人看到标题还以为自己走错了夜场,其实没有。ClickHouse 可以挂载为 MySQL 的一个从库 ,先全量再增量的实时同步 MySQL 数据,这个功能可以说是今年最亮眼、最刚需的功能,基于它我们可以轻松的打造一套企业级解决方案,让 OLTP 和 OLAP 的融合从此不再头疼。目前支持 MySQL 5.6/5.7/8.0 版本,兼容 Delete/Update 语句,及大部分常用的 DDL 操作。 代码已经合并到 upstream master 分支,预计在20.8版本作为experimental 功能

dbkernel 的博客 236

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2351

诺禾-ClickHouse

ClickHouse源码笔记1:聚合函数的完成 由于工作的需求,后续笔者工作需求和开源的OLAP数据库ClickHouse打交道。ClickHouse是Yandex在2016年6月15日开源了一个剖析型数据库,以强悍的单机处置才能被称道。 笔者在实践测试ClickHouse和阅读ClickHouse的源码过程之中,对"战役民族"开发的数据库非常观赏。ClickHouse不只是一个很好的数据库学习资料,而且同时应用了大量的CPP17的新特性停止开发,也是一个大型的Modern CPP的教诲材料。 笔者接下来会

yyone123的博客 491

K8s-K8s部署Zookeeper+Kafka+ELFK+持久化数据

K8s环境下容器化部署`Zookeeper+Kafka+ELFK`日志收集系统

✅ 专注企业级 Linux/DevOps 运维的实战派 ✅ 已输出上百篇可落地方案 ✅ Shell 脚本开箱即用 ✅ K8s/YAML 环境验证 ✅ 故障排查链路完整复现 1917

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

建立交叉编译环境arm-linux-gcc

安装arm-linux-gccsudo tar xvzf arm-linux-gcc-4.4.3.tgz –C /添加环境变量,在.bashrc最后一行添加export PATH=$PATH:/opt/toolschain/4.4.3/bin 管理员在2009年8月13日编辑了该文章文章。 -->

科学边界 305

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

技术文章系列整理(持续更新)

本博客有很多关于性能及测试开发的文章。我试着对你可能感兴趣的一些重要文章进行分类。

7DGroup,让技术更有价值! 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AI时代C++进阶指南:2024-2026核心方向与学习路线

在当今技术领域,编程语言的选择往往决定了开发者的职业路径。从底层原理来看,系统级编程语言的核心价值在于对硬件资源的直接控制和高性能计算能力。C++作为一门支持零成本抽象和手动内存管理的语言,其技术价值在于为开发者提供了对程序性能和行为的极致掌控力,这在需要确定性和低延迟的场景中至关重要。这种能力使其在AI基础设施、自动驾驶、金融科技等对实时性要求极高的应用场景中成为不可替代的选择。本文聚焦于C++在AI时代的核心价值,探讨了其在**高性能计算**和**实时系统**中的关键作用,并提供了从基础到进阶的实战学习

weixin_30416871的博客 427

程序员技术成长的动态闭环:从知识输入到认知校准

技术成长不是线性积累,而是一个涉及阅读、实践、表达与反馈的动态系统。理解‘知识加工-输出-反馈’的延迟性与耦合性,是突破‘学了不会用’‘写了没提升’困境的关键。本文聚焦程序员最常失真的两个环节——技术博客写作与论坛互动,揭示其本质是元认知训练与可证伪假设的构建过程。通过决策快照表、反流量写作、四段式提问等实操方法,将抽象能力转化为可测量、可迭代的行为单元。适用于希望摆脱无效勤奋、提升技术判断力与架构思辨能力的中高级开发者。

SailingAptech的专栏 468

clickhouse源码分析

clickhouse源码分析(一) 简单介绍 clichouse是由俄罗斯yandex公司的大数据引擎团队开发的分析型数据库。在2016年发布,经过几年的跌代现在被国内外很多大小公司在各种场景使用。clickhouse的轻量级,多种协议接口,SQL兼容性,优秀的导入和查询速度等等特性。被国内外的企业和数据分析从业人员所喜欢。 代码下载 clickhouse github链 接https://github.com/ClickHouse/ClickHouse.git 下载的时候最好使用git下载(下载的代码的

a615549958的专栏 1528

Clickhouse源码分析-TTL执行流程

如果没有ttl_only_drop_parts的配置,过期数据的删除(这里是删除,是将过期的数据从这个part删除,并将过期的数据构成一个part,这个过期的part标记为inactive,没过期的变为新part)会在TTL Merge任务中进行。示例如下,ttl_only_drop_parts = 0:插入数据:SELECT。

qq_51950769的博客 1106
上一篇: 特性介绍 | MySQL select count(*) 、count(1)、count(列) 详解(1):概念及区别
下一篇: 源码分析 | ClickHouse和他的朋友们(2)MySQL Protocol和Read调用栈
dbkernel
博客等级 码龄4年 60粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值