
clickhouse
文章平均质量分 72
clickhouse
悟世者
希望用技术改变世界的程序员,资深数据库内核架构师,长期在一线从事数据库核心模块开发。有希望咨询和交流的问题可以直接私信或者留言,看到后会及时回复。
展开
-
2023-02-14 clickhouse-写入聚合数据-分析
clickhouse-写入聚合数据-分析, 本文着重分析聚合数据的写入上下文参考: https://adofsauron.blog.csdn.net/article/details/128973952原创 2023-02-14 14:19:16 · 258 阅读 · 0 评论 -
2023-02-14 clickhouse的聚合相关的反思
最近在做一个基于brighthouse的列存储引擎的聚合, 主要在其中聚合过程中对于内存的使用,会导致发生OOM。从这个方面开始借鉴clickhouse的聚合处理, 不仅仅限于ch聚合对于OOM的策略,而且还要关注聚合本身的架构设计。原创 2023-02-14 10:55:59 · 315 阅读 · 0 评论 -
2023-02-10 clickhouse-聚合-临时数据写入磁盘-分析
clickhouse-聚合-临时数据写入磁盘-分析。原创 2023-02-10 17:11:19 · 688 阅读 · 0 评论 -
2023-02-10 clickhouse-编译
clickhouse-编译。原创 2023-02-10 16:38:35 · 590 阅读 · 0 评论 -
2023-02-10 clickhouse导入tpch数据-记录
clickhouse导入tpch数据-记录。原创 2023-02-10 14:47:29 · 397 阅读 · 0 评论 -
2023-01-28 clickhouse-聚合函数sum执行分析
以聚合函数sum为切入点,分析clickhouse的聚合执行流程。原创 2023-01-28 17:24:51 · 1237 阅读 · 0 评论 -
2023-01-28 clickhouse-聚合函数的源码再梳理
笔者在源码笔记1之中分析过的聚合函数的实现,但是对于各个接口函数的实际如何共同工作的源码,回头看并没有那么明晰,所以决定重新再完成一篇聚合函数的源码梳理的文章,帮助大家进一步的理解ClickHouse之中聚合函数的工作原理。本系列文章的源码分析基于ClickHouse v19.16.2.2的版本。原创 2023-01-28 16:15:25 · 893 阅读 · 0 评论 -
2023-01-18 ClickHouse之聚合功能源码分析
本来想再写详细一点的,但是发现现在这个程度已经2w多字了,再往下写就是一些过于细节繁杂的内容,写了估计也没耐心看,把握住框架,需要的时候再看细节吧。聚合分析这部分代码充分说明了这样一个事实:ClickHouse之所以有如此优秀的性能,不是因为在某个或者某几个地方采用了特别牛逼的优化技巧和方法,而是作为一个软件系统,它能够将大部分常见的工程优化整合到系统的各个链路上下游中,并且还能保证一定的代码质量和合理的抽象水平,避免随着不断迭代开发导致代码完全屎山化。原创 2023-01-18 17:35:08 · 1666 阅读 · 0 评论 -
2023-01-10 clickhouse-聚合流程的实现
到这里,整个聚合计算的核心流程算是完成了,后续就是将result的结果通过上面的convertToBlock的方式转换为BlockStream流,继续返回给上层的调用方。这是一个很重要的类,实现的也并不复杂。Block类作为ClickHouse的核心,后续的工作都是基于Block类展开的。除了聚合计算外,其他的物理执行操作符也是同样通过流的方式依次对接处理的,源码阅读的步骤也可以参照笔者的分析流程来参考。来实现的,数据库都会通过Batch的形式,一次性提交一组需要操作的数据来减少虚函数调用的开销。原创 2023-01-10 20:47:15 · 684 阅读 · 0 评论 -
2023-01-04 clickhouse-Group By 为什么这么快
ClickHouse 会根据 Group By 的最终类型,选择一个最优的 hashtable 或数组,作为分组基础数据结构,使内存和计算尽量最优。这个”最优解“是怎么找到的?从 test 代码可以看出,是不停的尝试、测试验证出来的,浓厚的 bottom-up 哲学范。原创 2023-01-04 21:34:12 · 783 阅读 · 0 评论 -
2022-10-24 ClickHouse 源码解析-查询引擎经典理论
向量化执行,在业界比较早的落地来自于。向量化模型的思路非常简单,如果 Next() 函数只返回一个 Tuple() 的 Overhead 过大,那就每次多返回一些数据,多么简单朴素的 Batch 思想,当然实现复杂度会比原始的迭代模型高一些。示例如下:可以重新对照上文提到的迭代模型看一下差别:不再每次仅返回一个 Tuple,而是返回一组 Tuple (Tuple Batch)因为每次需要返回一组,因此算子内部要维护一个 Buffer,缓存数据后在一并输出。原创 2022-10-24 15:02:07 · 1521 阅读 · 1 评论 -
2022-09-05 ClickHouse的IN操作符说明
如果您已经为此情况做好准备,并且已经将数据分散到群集服务器上,以便单个用户Id的数据完全驻留在单个服务器上,则这将正常和最佳地工作。IN子句中的子查询始终只在单个服务器上运行一次。运算符的右侧可以是一组常量表达式、一组带有常量表达式的元组(如上面的示例所示),或括号中的数据库表或SELECT子查询的名称。如果运算符的右侧是具有Set引擎的表名(始终位于RAM中的准备好的数据集),则不会为每个查询重新创建数据集。换句话说,IN子句中的数据集将在每台服务器上独立收集,仅在每台服务器上本地存储的数据中收集。原创 2022-09-05 14:15:18 · 3513 阅读 · 0 评论 -
2022-08-04 clickhouse的select子句
SELECT子句决定了一次查询语句最终返回哪些列字段或表达式。与直观的感受不同,虽然SELECT位于SQL语句的起始位置,但它却是在上述一众子句之后执行的。在其他子句执行之后,SELECT会将选取的字段或表达式作用于每行数据之上。............原创 2022-08-04 13:58:01 · 478 阅读 · 0 评论 -
2022-08-04 clickhouse的join子句
ASOF JOIN会从 table_2 中的用户事件时间戳找出和 table_1 中用户事件时间戳中最近的一个时间戳,来满足最接近匹配的条件。如果有得话,则相等的时间戳值是最接近的值。在此例中,event_1_1 可以 JOIN event_2_1,event_1_2 可以JOIN event_2_3,但是 event_2_2 不能被JOIN。如果你需要一个 JOIN 对于连接维度表(这些是包含维度属性的相对较小的表,例如广告活动的名称), JOIN 由于每个查询都会重新访问正确的表,因此可能不太方便。..原创 2022-08-04 10:27:47 · 747 阅读 · 0 评论 -
2022-07-08 clickhouse架构概述
ClickHouse 是一个真正的列式数据库管理系统(DBMS)。在 ClickHouse 中,数据始终是按列存储的,包括矢量(向量或列块)执行的过程。只要有可能,操作都是基于矢量进行分派的,而不是单个的值,这被称为«矢量化查询执行»,它有利于降低实际的数据处理开销。通常有两种不同的加速查询处理的方法:矢量化查询执行和运行时代码生成。在后者中,动态地为每一类查询生成代码,消除了间接分派和动态分派。这两种方法中,并没有哪一种严格地比另一种好。运行时代码生成可以更好地将多个操作融合在一起,从而充分利用 CPU原创 2022-07-09 11:27:54 · 533 阅读 · 0 评论 -
2022-07-08 clickhouse向量化column
记录clickhouse向量化columesrc/Functions/FunctionUnaryArithmetic.h:295关键点:关键点:原创 2022-07-08 19:25:32 · 824 阅读 · 0 评论