• 六千字呕心沥血深度总结,为您揭秘ClickHouse为什么查询这么快!


    尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili

    1. ClickHouse设计思想和核心技术特征

    1.1 ClickHouse 全知全解

    ClickHouse 是一个用于联机分析 (OLAP) 的列式数据库管理系统 (DBMS)。来自于 2011 年在纳斯达克上市的俄罗斯本土搜索引擎企业 Yandex 公司, 诞生之初就是为了服务 Yandex 公司自家的 Web 流量分析产品 Yandex.Metrica,后来经过演变,逐渐形成为现在的 ClickHouse,全称是:Click Stream, Data WareHouse

    ClickHouse 官网:https://clickhouse.tech/,它具有 ROLAP、在线实时查询、完整的 DBMS 功能支持、列式存储、不需要任何数据预处理、支持批量更 新、拥有非常完善的 SQL 支持和函数、支持高可用、不依赖 Hadoop 复杂生态、开箱即用等许多特点。

    在 1 亿数据集体量的情况下,ClickHouse 的平均响应速度是 Vertica 的 2.63 倍、InfiniDB 的 17 倍、MonetDB 的 27 倍、Hive 的 126 倍、MySQL 的 429 倍以及Greenplum 的 10 倍。详细的测试结果可以查阅:https://clickhouse.tech/benchmark/dbms/

    ClickHouse 非常适用于商业智能领域(也就是我们所说的 BI 领域),除此之外,它也能够被广泛应用于广告流量、Web、App 流量、电信、金融、电子 商务、信息安全、网络游戏、物联网等众多其他领域。

    ClickHouse 是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。目前国内社区火热,各个大厂纷纷跟进大规模使用:

    • 今日头条内部用 ClickHouse 来做用户行为分析,内部一共几千个 ClickHouse 节点,单集群最大 1200 节点,总数据量几十 PB,日增原始数据 300TB 左右。
    • 腾讯内部用 ClickHouse 做游戏数据分析,并且为之建立了一整套监控运维体系。
    • 携程内部从 18 年 7 月份开始接入试用,目前 80% 的业务都跑在 ClickHouse 上。每天数据增量十多亿,近百万次查询请求。
    • 快手内部也在使用 ClickHouse,存储总量大约 10PB, 每天新增 200TB, 90% 查询小于 3S。

    ClickHouse 缺点:

    1. 没有完整的事务支持;
    2. 稀疏索引导致 ClickHouse 不擅长细粒度或者 key-value 类型数据的查询需求;
    3. 缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据 ;
    4. 不擅长 join 操作;

    1.2 ClickHouse 设计思路剖析

    那么一个专门用来做 OLAP 分析的存储引擎该如何设计呢?

    如何在海量数据中,针对大量数据进行查询分析呢?核心需求是 实现海量数据集中的高性能低延迟查询分析功能,一些常见的方案和手段如下:

    1. 数据排序
    2. 数据分区分片 + 分布式查询
    3. 列式存储 + 字段类型统一
    4. 列裁剪
    5. 预聚合(搜索引擎: 输入关键词,搜索引擎根据关键词到 数据库 找到这个 关键词对应的所有的 URL:这些 URL 就是提前计算出来的 )
    6. 利用CPU特性:向量化引擎,操作系统必须支持;
    7. 主键索引 + 二级索引 + 位图索引 + 布隆索引 等等各种索引技术
    8. 支持近似计算, pv 一个电商平台的 sku 总数;
    9. 定制引擎:多样化的存储引擎满足不同场景的特定需要;
    10. 多样化算法选择:Volnitsky高效字符串搜索算法 和 HyperLogLog基于概率高效去重算法;

    总结一下:单条记录的增删改查操作,通过数据横向切割,做到数据操作的快速定位,在海量数据分析中,一般就是针对大量行数据少列做分析,既然并不是全部列,那么把数据做纵向切分把表中的数据按照列来单独存储,那么在做分析的时候,同样可以快速把待查询分析的数据总量降低到原来表的 1/n,同样提高效率。而且对于常用的聚合逻辑的结果,也可以提前算出来缓存起来用来提供效率,这就是预聚合技术。

    提到预聚合,大家会想到 Kylin, Kylin 是一个把预聚合技术发挥到极致的一个 OLAP 技术,但是 Kylin 也有它的缺点:

    1. 预聚合只支持固定的分析场景,无法满足自定义分析场景,所以预聚合只能作为一种可选方案 ;
    2. 维度组合爆炸会导致数据膨胀,这样会造成不必要的计算和存储开销。无必要的维度组合的计算就属于浪费资源 ;
    3. 大概率数据都是增量生成,预聚合不能进行数据更新。所以会产生大量的重算。

    2 ClickHouse 引擎详解

    ClickHouse 是一个 OLAP 类型的分析型数据库,也有库和表的概念,而且库和表还都提供了不同类型的引擎。所以关于 ClickHouse 的底层引擎,其实可以分为 数据库引擎表引擎 两种。在此,我们重点讲解表引擎。

    2.1 ClickHouse 库引擎介绍

    关于库引擎,简单总结一下。ClickHouse 也支持在创建库的时候,指定库引擎,目前支持 5 种,分别是:Ordinary,Dictionary, Memory, Lazy, MySQL,其实 Ordinary 是默认库引擎,在此类型库引擎下,可以使用任意类型的表引擎。

    1. Ordinary引擎: 默认引擎,如果不指定数据库引擎创建的就是 Ordinary 数据库;

    2. Dictionary引擎: 此数据库会自动为所有数据字典创建表 ;

    3. Memory引擎: 所有数据只会保存在内存中,服务重启数据消失,该数据库引擎只能够创建 Memory 引擎表 ;

    4. MySQL引擎: 改引擎会自动拉取远端 MySQL 中的数据,并在该库下创建 MySQL 表引擎的数据表;

    5. Lazy延时引擎: 在距最近一次访问间隔 expiration_time_in_seconds 时间段内,将表保存在内存中,仅适用于 Log 引擎表;

    2.2 ClickHouse 表引擎介绍

    表引擎在 ClickHouse 中的作用十分关键,直接决定了数据如何存储和读取、是否支持并发读写、是否支持 index、支持的 query 种类、是否支持主备复制等。

    1. 数据的存储方式和位置,写到哪里以及从哪里读取数据
    2. 支持哪些查询以及如何支持。
    3. 并发数据访问。
    4. 索引的使用(如果存在)。
    5. 是否可以执行多线程请求。
    6. 数据复制参数。

    具体可看官网:https://clickhouse.tech/docs/zh/engines/table-engines/

    ClickHouse 的表引擎提供了四个系列(Log、MergeTree、Integration、Special)大约 28 种表引擎,各有各的用途。比如 Log 系列用来做小表数据分 析,MergeTree 系列用来做大数据量分析,而 Integration 系列则多用于外表数据集成。Log、Special、Integration 系列的表引擎相对来说,应用场景有限,功能简单,应用特殊用途,MergeTree 系列表引擎又和两种特殊表引擎(Replicated,Distributed)正交形成多种具备不同功能的 MergeTree 表引擎。



     

  • 相关阅读:
    【Excel】快速提取某个符号前面的数据内容
    【学一点RISC-V】RISC-V IMSIC
    在pandas中通过一列数据映射出另一列的几种思路和方法
    E签宝面试题
    【WPF】单例软件实现自重启
    科技新宠!拓世AI智能直播一体机揭秘,颠覆教学模式!
    JavaScript之void 0 === undefined
    分布式一致性算法 -- Raft
    【双指针+简化去重操作】Leetcode 15 三数之和
    Java使用documents4j将word和excel转pdf
  • 原文地址:https://blog.csdn.net/jmysql/article/details/126183278