ClickHouse
文章平均质量分 94
介绍 ClickHouse 数据库的方方面面,包括机制、原理、使用技巧、源码分析等。
dbkernel
目前从事云数据库MySQL数据库内核研发工作,曾做过Postgres-XC、Greenplum等分布式数据库的内核开发。热衷于研究主流数据库架构、源码,对关系型数据库 MySQL/PostgreSQL及分布式数据库有深入研究。
展开
-
源码分析 | ClickHouse和他的朋友们(9)MySQL实时复制与实现
很多人看到标题还以为自己走错了夜场,其实没有。ClickHouse 可以挂载为 MySQL 的一个从库 ,先全量再增量的实时同步 MySQL 数据,这个功能可以说是今年最亮眼、最刚需的功能,基于它我们可以轻松的打造一套企业级解决方案,让 OLTP 和 OLAP 的融合从此不再头疼。目前支持 MySQL 5.6/5.7/8.0 版本,兼容 Delete/Update 语句,及大部分常用的 DDL 操作。代码已经合并到 upstream master 分支,预计在20.8版本作为experimental 功能转载 2022-07-07 14:27:31 · 160 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(15)Group By 为什么这么快
本文首发于 2021-01-26 21:31:12在揭秘 ClickHouse Group By 之前,先聊聊数据库的性能对比测试问题。在虎哥看来,一个“讲武德”的性能对比测试应该提供什么信息呢?首先要尊重客观事实,在什么场景下,x 比 y 快?其次是为什么 x 会比 y 快?如果以上两条都做到了,还有一点也比较重要: x 的优势可以支撑多久? 是架构等带来的长期优势,还是一袋烟的优化所得,是否能持续跟上自己的灵魂。如果只是贴几个妖艳的数字,算不上是 benchmark,而是 benchmarket。好了转载 2022-07-11 17:33:29 · 766 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(14)存储计算分离方案与实现
本文首发于 2020-09-21 22:01:12如果多个 ClickHouse server 可以挂载同一份数据(分布式存储等),并且每个 server 都可写,这样会有什么好处呢?首先,我们可以把副本机制交给分布式存储来保障,上层架构变得简单朴素;其次,clickhouse-server 可以在任意机器上增加、减少,使存储和计算能力得到充分发挥。本文就来探讨一下 ClickHouse 的存储计算分离方案,实现上并不复杂。ClickHouse 运行时数据由两部分组成:内存元数据和磁盘数据。我们先看写流程:转载 2022-07-11 17:27:46 · 468 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(13)ReplicatedMergeTree表引擎及同步机制
本文首发于 2020-09-15 20:15:14在 MySQL 里,为了保证高可用以及数据安全性会采取主从模式,数据通过 binlog 来进行同步。在 ClickHouse 里,我们可以使用 ReplicatedMergeTree 引擎,数据同步通过 zookeeper 完成。本文先从搭建一个多 replica 集群开始,然后一窥底层的机制,简单吃两口。搭建一个 2 replica 测试集群,由于条件有限,这里在同一台物理机上起 clickhouse-server(2个 replica) + zookee转载 2022-07-11 17:23:37 · 461 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(12)神奇的物化视图(Materialized View)与原理
本文首发于 2020-09-03 21:22:14在 ClickHouse 里,物化视图(Materialized View)可以说是一个神奇且强大的东西,用途别具一格。本文从底层机制进行分析,看看 ClickHouse 的 Materalized View 是怎么工作的,以方便更好的使用它。对大部分人来说,物化视图这个概念会比较抽象,物化?视图?。。。为了更好的理解它,我们先看一个场景。假设你是 一个“幸福”的小程序员,某天产品经理有个需求:实时统计每小时视频下载量。用户下载明细表:计算每小时下载量:转载 2022-07-11 17:20:36 · 260 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(11)MySQL实时复制之GTID模式
本文首发于 2020-08-28 20:40:14MySQL实时复制原理篇几天前 ClickHouse 官方发布了 v20.8.1.4447-testing,这个版本已经包含了 MaterializeMySQL 引擎,实现了 ClickHouse 实时复制 MySQL 数据的能力,感兴趣的朋友可以通过官方安装包来做体验,安装方式参考 https://clickhouse.tech/#quick-start,需要注意的是要选择 testing 分支。MaterializeMySQL 在 v20.8.1.444转载 2022-07-11 17:18:27 · 176 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(10)MergeTree Write-Ahead Log
本文首发于 2020-08-20 19:55:14数据库系统为了提高写入性能,会把数据先写到内存,等“攒”到一定程度后再回写到磁盘,比如 MySQL 的 buffer pool 机制。因为数据先写到内存,为了数据的安全性,我们需要一个 Write-Ahead Log (WAL) 来保证内存数据的安全性。今天我们来看看 ClickHouse 新增的 MergeTreeWriteAheadLog 模块,它到底解决了什么问题。对于 ClickHouse MergeTree 引擎,每次写入(即使1条数据)都会在磁盘转载 2022-07-11 17:15:28 · 194 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(1)编译、开发、测试
本文首发于 2020-06-05 19:37:10一次偶然的机会,和ClickHouse团队做了一次线下沟通,Alexey提到ClickHouse的设计哲学:用工程思维解决商业问题的典范啊!对用户来说,他们关心的不是什么天花乱坠、上天入地的高科技,只是需要一个能很好解决自己问题的方案,这在开源社区是非常难得的,靠实力“野蛮式”生长。于是,我对这个散发着伏特加味道的利器充满了好奇,并参与到ClickHouse的社区中一探究竟,第一感觉是开放、友好、战斗力强(AK47 vs CK16, ClickHouse 2转载 2022-07-10 21:06:42 · 220 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(2)MySQL Protocol和Read调用栈
本文首发于 2020-06-07 17:17:10作为一个 OLAP 的 DBMS 来说,有2个端非常重要:这样内外互通,多条朋友多条路,以实现“数据”级的编排能力。今天谈的是入口端的 MySQL 协议,也是本系列 ClickHouse 的第一个好朋友,用户可通过 MySQL 客户端或相关 Driver 直接链接到 ClickHouse,进行数据读写等操作。本文通过 MySQL的 Query 请求,借用调用栈来了解下 ClickHouse 的数据读取全过程。入口文件在:MySQLHandler.cppMy转载 2022-07-10 21:17:41 · 208 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(3)MySQL Protocol和Write调用栈
本文首发于 2020-06-08 19:57:10上篇的MySQL Protocol和Read调用里介绍了 ClickHouse 一条查询语句的调用栈,本文继续介绍写的调用栈,开整。建表:写入数据:调用栈分析1. 获取存储引擎 OutputStream2. 从 SQL 组装 InputStream 如何组装成 inputstream 结构呢?然后通过 NullAndDoCopyBlockInputStream的 copyData 方法构造出 Block:3. 组装 OutputSt转载 2022-07-10 21:21:48 · 76 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(4)Pipeline处理器和调度器
本文首发于 2020-06-12 20:57:10最后更新: 2020-08-15本文谈下 ClickHouse 核心科技:处理器 Processor 和有向无环调度器 DAG Scheduler。这些概念并不是 ClickHouse 首创,感兴趣的同学可以关注下 materialize 的 timely-dataflow,虎哥用 golang 也写过一个原型。拼的是实现细节,正是这些模块的精良设计,才有了 ClickHous e整体的高性能。在传统数据库系统中,一个 Query 处理流程大体是:其中在 P转载 2022-07-10 21:26:02 · 421 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(5)存储引擎技术进化与MergeTree
本文首发于 2020-06-22 21:55:1021 世纪的第二个 10 年,虎哥已经在存储引擎一线奋战近 10 年,由于强大的兴趣驱动,这么多年来几乎不放过 arXiv 上与存储相关的每一篇 paper。尤其是看到带有 draft 的 paper 时,有一种乞丐听到“叮当”响时的愉悦。看paper这玩意就像鉴宝,多数是“赝品”,需要你有“鉴真”的本领,否则今天是张三的算法超越xx,明儿又是王二的硬件提升了yy,让你永远跟不上节奏zz,湮灭在这些没有营养的技术垃圾中,浪费大好青春。言归正传,接下来的3篇,转载 2022-07-11 16:56:37 · 171 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(6)MergeTree存储结构
本文首发于 2020-06-30 21:41:12上篇的 存储引擎技术进化与MergeTree 介绍了存储算法的演进。存储引擎是一个数据库的底盘,一定要稳和动力澎湃。接下来我们将一起来探索下 ClickHouse MergeTree 列式存储引擎,解构下这台“跑车”最重要的部件。所有的存储引擎,无论精良与粗制滥造,最终都是要把数据回写到磁盘,来满足存储和索引目的。磁盘文件的构造可以说是算法的物理体现,我们甚至可以通过这些存储结构反推出其算法实现。所以,要想深入了解一个存储引擎,最好的入手点是它的磁盘存储结构转载 2022-07-11 17:05:42 · 174 阅读 · 0 评论 -
源码分析 | ClickHouse和他的朋友们(8)纯手工打造的SQL解析器
本文首发于 2020-07-26 21:55:10现实生活中的物品一旦被标记为“纯手工打造”,给人的第一感觉就是“上乘之品”,一个字“贵”,比如北京老布鞋。但是在计算机世界里,如果有人告诉你 ClickHouse 的 SQL 解析器是纯手工打造的,是不是很惊讶!这个问题引起了不少网友的关注,所以本篇聊聊 ClickHouse 的纯手工解析器,看看它们的底层工作机制及优缺点。枯燥先从一个 SQL 开始:token首先对 SQL 里的字符逐个做判断,然后根据其关联性做 token 分割:比如连续的 Word转载 2022-07-11 17:10:00 · 336 阅读 · 0 评论