面试官: ClickHouse 为什么这么快?

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 面试官: ClickHouse 为什么这么快?

数据加速查询处理的方法

  • 矢量化查询执行
  • 运行时代码生成

在后者中,动态地为每一类查询生成代码,消除了间接分派和动态分派。

这两种方法中,并没有哪一种严格地比另一种好。运行时代码生成可以更好地将多个操作融合在一起,从而充分利用 CPU 执行单元和流水线。矢量化查询执行不是特别实用,因为它涉及必须写到缓存并读回的临时向量。如果 L2 缓存容纳不下临时数据,那么这将成为一个问题,如果我们要尽量使块的大小足够小,从而 CPU 缓存能够容纳下临时数据。在这个假设下,与其他计算相比,读写临时数据几乎是没有任何开销的(相比后者优点:拆分流水线使得中间数据缓存、获取同时运行的类似查询的中间数据以及相似查询的流水线合并等功能很容易实现,并且矢量化查询执行更容易利用 CPU 的 SIMD 功能)。论文表明,将两种方法结合起来是更好的选择,clickhouse 使用了矢量化查询执行,同时初步提供了有限的运行时动态代码生成。

mpp 架构

MPP ( Massively Parallel Processing ),即大规模并行处理,在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过专用网络或者商业通用网络互相连接,彼此协同计算,作为整体提供数据库服务。

mpp 理念

1、消除共享资源

2、并行(单机多核并行 sse 指令,多节点并行)

与批处理引擎 spark 的区别

ck 每个 executor 运行完全相同的数据处理逻辑,处理从本地存储加载的私有数据块。在执行步骤间有一些为数据交换而实现的同步点 shuffle(例如 Apache Spark 和 MapReduce 的 shuffle 步骤)

3df5095ee1d0e573bdc4f1b01287833c.png

  • 区别 1 单 node 性能制约

受限与单 executor 性能制约(木桶原理),所以 mpp 架构数据库节点不宜太多,建议 50 以下,这也是与 spark 等批处理引擎的一个区别,具体来说,基于 HDFS 的 MapReduce task 数量等于输入分片,通常等于输入文件的 HDFS 块数量。在同步点之间,根据 executor 的可用性,task 被随机分配给 executor,如果 executor 经常失败,性能低下,这时预测执行将起效——慢节点上的 task 将在其他节点上重启,重新调度(注意这里是移动数据,走网络)

  • 区别 2 并发性

并发性是指有多少个查询可以有效地被并行执行。MPP 是完全对称的,一旦开始执行,集群中的每个节点并行执行相同的任务。这意味着 MPP 方案的并发级别完全与集群节点的数量无关。具体来说,无论集群是 4 个节点还是 400 个节点,并发性是一样的,它们的性能衰退也会在同一点体现,但是对于 spark 来说,无限制,取决于你的集群规模。

总结

ClickHouse 在计算层做了非常细致的工作,竭尽所能榨干硬件能力,提升查询速度。它实现了单机多核并行、分布式计算、向量化执行与 SIMD 指令、代码生成等多种重要技术。根据经验,主流 MPP 系统与 Apache Spark 比较性能的话——同样硬件集群规模——Apache Spark 通常会慢 3-5 倍。所以合理的把 MPP 集群规模限制在 50 台,将和 250 台规模的 Apache Spark 集群性能一致,但是呢 Apache Spark 可以超过 250 个节点,MPP 就望尘莫及了。

相关文章
|
1月前
|
存储 SQL 缓存
StarRocks常见面试问题(一)
StarRocks常见面试问题(一)
|
1月前
|
存储 缓存 NoSQL
2023春招面试题:Redis数据库面试题整理
2023春招面试题:Redis数据库面试题整理
|
10月前
|
SQL BI OLAP
【面试必问】窗口函数全解-HIVE
【面试必问】窗口函数全解-HIVE
|
存储 搜索推荐 关系型数据库
55.【clickhouse】ClickHouse从入门到放弃-概念场景
【clickhouse】ClickHouse从入门到放弃-概念场景
55.【clickhouse】ClickHouse从入门到放弃-概念场景
|
SQL 运维 关系型数据库
PolarDB-X源码解读:DDL的一生(下)
在《DDL的一生(上)》中,我们以添加全局二级索引为例,从DDL开发者的视角介绍了如何在DDL引擎框架下实现一个逻辑DDL。在本篇,作者将从DDL引擎的视角出发,向读者介绍DDL引擎的架构、实现,以及DDL引擎与DDL Job的交互逻辑。
PolarDB-X源码解读:DDL的一生(下)
|
SQL 缓存 算法
14.【clickhouse】ClickHouse从入门到放弃-实战
【clickhouse】ClickHouse从入门到放弃-实战
14.【clickhouse】ClickHouse从入门到放弃-实战
|
SQL 消息中间件 机器学习/深度学习
面试官:谈谈Redis缓存和MySQL数据一致性问题
对于Web来说,用户量和访问量增一定程度上推动项目技术和架构的更迭和进步。可能会有以下的一些状况:
294 0
面试官:谈谈Redis缓存和MySQL数据一致性问题
|
SQL 前端开发 关系型数据库
PolarDB-X 源码解读:事务的一生
本文将主要解读 PolarDB-X 中事务部分的相关代码,着重解读事务的一生在计算节点(CN)中的关键代码:从开始、执行、到最后提交这一整个生命周期。
909 2
|
SQL 缓存 Java
PolarDB-X源码解读系列:DDL的一生(上)
本文主要解读了 PolarDB-X 中 CN 端的DDL Job定义相关的代码,以添加全局二级索引为例,对DDL Job定义和执行的整体流程进行了梳理,并着重阐述了DDL job定义中涉及online和crash safe特性的关键逻辑。
|
存储 关系型数据库 MySQL
面试突击54:MySQL 常用引擎有哪些?
面试突击54:MySQL 常用引擎有哪些?
211 0