ClickHouse是什么

ClickHouse是一个存储计算一体的工具,其与spark,flink等大数据框架不同的在于它有自己的存储层,在数据压缩,存储上做了更多的优化,所以导致它在某些数据处理能力上比其他工具上了不少,毕竟一般框架只是在计算层面上下功夫做优化。

为什么选择ClickHouse

ClickHouse有非常多的特点,但这里我只选择我认为比较重要的说:

  • 灵活多变:分析场景下,随着业务变化要及时调整分析维度、挖掘方法,以尽快发现数据价值、更新业务指标。而数据仓库中通常存储着海量的历史数据,调整代价十分高昂。预先建模技术虽然可以在特定场景中加速计算,但是无法满足业务灵活多变的发展需求,维护成本过高。
  • 存储优化:首先与普通数据库存储不同在于,它采用列式存储,分析场景中往往需要读大量行但是少数几个列。在行存模式下,数据按行连续存储,所有列的数据都存储在一个block中,不参与计算的列在IO时也要全部读出,读取操作被严重放大。而列存模式下,只需要读取参与计算的列即可,极大的减低了IO cost,加速了查询。其次因为采用了列式存储一列数据的类型一般都是一样的,所以在数据压缩上,效果更好,这样就可以将数据存储空间压缩的更小,可以存更多的数据,也意味着可以在内存中放更多的数据,那么速度自然就更快。上述存储优化前提都是基于采用其merge tree为引擎的,它还有其他引擎应对特殊情况,比如integrations引擎可以获取外部数据等等
  • 计算快:ClickHouse将数据划分为多个partition,每个partition再进一步划分为多个index granularity,然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。除了优秀的单机并行处理能力,ClickHouse还提供了可线性拓展的分布式计算能力。ClickHouse会自动将查询拆解为多个task下发到集群中,然后进行多机并行处理,最后把结果汇聚到一起。ClickHouse不仅将数据按列存储,而且按列进行计算。ClickHouse实现了向量执行引擎,对内存中的列式数据,一个batch调用一次SIMD指令(而非每一行调用一次),不仅减少了函数调用次数、降低了cache miss,而且可以充分发挥SIMD指令的并行能力,大幅缩短了计算耗时。向量执行引擎,通常能够带来数倍的性能提升。

ClickHouse怎么读写

ClickHouse数据写入时直接落盘,同时也就省略了传统的写redo日志阶段。ClickHouse是依赖于ZooKeeper做异步的磁盘文件同步.

ClickHouse存储中的最小单位是DataPart,一次批量写入的数据会落盘成一个DataPart。DataPart内部的数据存储是完全有序的状态(按照表定义的order by排序),这种有序存储就是一种默认聚簇索引可以用来加速数据扫描。ClickHouse也会对DataPart进行异步合并,

其合并也是用来解决两个问题:

1)让数据存储更加有序;

2)完成主键数据变更。

DataPart在合并存储数据时表现出的是merge-sorted的方式,合并后产生的DataPart仍然处于完全有序状态。

高吞吐写入能力

ClickHouse采用类LSM Tree的结构,数据写入后定期在后台Compaction。通过类LSM tree的结构,ClickHouse在数据导入时全部是顺序append写,写入后数据段不可更改,在后台compaction时也是多个段merge sort后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在HDD上也有着优异的写入性能。

官方公开benchmark测试显示能够达到50MB-200MB/s的写入吞吐能力,按照每行100Byte估算,大约相当于50W-200W条/s的写入速度。

关于clickhouse的读能力,首先关乎到其计算能力,clickhouse的计算引擎特点则是极致的向量化,完全用c++模板手写的向量化函数和aggregator算子使得它在聚合查询上的处理性能达到了极致。配合上存储极致的并行扫描能力,轻松就可以把机器资源跑满。

ClickHouse是完全列式的存储计算引擎,而且是以有序存储为核心,在查询扫描数据的过程中,首先会根据存储的有序性、列存块统计信息、分区键等信息推断出需要扫描的列存块,然后进行并行的数据扫描,像表达式计算、聚合算子都是在正规的计算引擎中处理。从计算引擎到数据扫描,数据流转都是以列存块为单位,高度向量化的。

ClickHouse,只有一个面向IO的UnCompressedBlockCache和系统的PageCache,ClickHouse立足于分析查询场景,分析场景下的数据和查询都是多变的,查询结果等Cache都不容易命中,所以ClickHouse的做法是始终围绕磁盘数据,具备良好的IO Cache能力。

clickhouse的分布式系统每台机器都是相对独立了可以去做查询,同时可以任意扩展副本到服务器上。

在读数据时,它会分发子查询给各个机器,然后汇总进行查询

ClickHouse是否支持大数据量

clickhouse的存储就决定了其支持海量数据,具体存储过程如下图:

需要注意的是稀疏主键索引就是,它将每列数据按照index granularity(默认8192行)进行划分(分成图中的block),每个index granularity的开头第一行被称为一个mark行。(这里有点像操作系统中虚拟内存的页表那种概念,也就是图中的.mrk)主键索引存储该mark行对应的primary key的值。对于where条件中含有primary key的查询,通过对主键索引进行二分查找,能够直接定位到对应的index granularity,避免了全表扫描从而加速查询。

ClickHouse的主键索引与MySQL等数据库不同,它并不用于去重

ClickHouse是否支持定时淘汰

可以前提是使用merge-tree表引擎

数据Partitioning

ClickHouse支持PARTITION BY子句,在建表时可以指定按照任意合法表达式进行数据分区操作,比如通过toYYYYMM()将数据按月进行分区、toMonday()将数据按照周几进行分区、对Enum类型的列直接每种取值作为一个分区等。

数据Partition在ClickHouse中主要有两方面应用:

  • 在partition key上进行分区裁剪,只查询必要的数据。灵活的partition expression设置,使得可以根据SQL Pattern进行分区设置,最大化的贴合业务特点。
  • 对partition进行TTL管理,淘汰过期的分区数据。

数据TTL

在分析场景中,数据的价值随着时间流逝而不断降低,多数业务出于成本考虑只会保留最近几个月的数据,ClickHouse通过TTL提供了数据生命周期管理的能力。

ClickHouse支持几种不同粒度的TTL:

1) 列级别TTL:当一列中的部分数据过期后,会被替换成默认值;当全列数据都过期后,会删除该列。

2)行级别TTL:当某一行过期后,会直接删除该行。

3)分区级别TTL:当分区过期后,会直接删除该分区。

在建表的时候可以自定义TTL时间:

ClickHouse的优势、劣势

高性能读取

  • 数据有序存储:任意表达式SORTBY,灵活适应业务

  • 稀疏索引:Block级别、任意表达式、多种索引类型

高吞吐写入

  • LSMtree:200MB/S

  • 线性拓展:P2P架构、多点可写

  • 多种Sharding策略:rand/任意表达式hash/自定义比例

  • 支持Delete/Update高压缩比

  • 列存:定长存储、词典编码

  • 列级压缩算法、丰富的编码算法

高可用存储

  • 任意副本数量

  • Multi-Master多点可写、多点可查、双向同步

  • 不同shard支持不同副本数

分析场景下(where过滤后的记录数较多),ClickHouse凭借极致的列存和向量化计算会有更加出色的并发表现。

ClickHouse并发处理能力立足于磁盘吞吐

ClickHouse更加适合低成本、大数据量的分析场景,它能够充分利用磁盘的带宽能力。

有一个弊端就是对于单条查询使用多cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务,ClickHouse 并不是强项。

ClickHouse测试对比

关于ck和mysql,hive的测试对比

https://clickhouse.com/benchmark/dbms/#[100000000,[%22ClickHouse%22,%22Hive%22,%22MySQL%22],[%221%22,%222%22]]

ClickHouse同类对比Doris,Hologres

doris是百度开源的,其基于内存计算速度更快,holo是阿里配套的解决方案,可以直接基于maxcompute存储,同时支持列存储和行存储,更加灵活,但同行吐槽在flink读kafka写入holo,用flink消费holo的binglog场景性能可能没那么高,clickhouse是性价比较高,它尽可能的去压榨服务器的资源。

阅读相关文章:
官方文档:https://clickhouse.com/docs/zh

微信ck实时数仓实践:https://baijiahao.baidu.com/s?id=1717387409459384676&wfr=spider&for=pc

深入理解什么是LSM-Tree:https://blog.csdn.net/u010454030/article/details/90414063

clickhouse和Elasticsearch的对比:https://developer.aliyun.com/article/783804?spm=5176.20128342.J_6302206100.2.27137ba2a3mxh2&groupCode=clickhouse

details/90414063

clickhouse和Elasticsearch的对比:https://developer.aliyun.com/article/783804?spm=5176.20128342.J_6302206100.2.27137ba2a3mxh2&groupCode=clickhouse

clickhouse表引擎简介:https://developer.aliyun.com/article/762461?spm=5176.20128342.J_6302206100.3.27137ba2a3mxh2&groupCode=clickhouse

一文了解Clickhouse相关推荐

  1. 全网最细最全OLAP之clickhouse笔记|clickhouse文档|clickhouse揭秘文档(三)--clickhouse单机安装和clickhouse集群安装

    免费视频教程 https://www.51doit.com/ 或者联系博主微信 17710299606 https://apppunf4gqb9193.h5.xiaoeknow.com/v1/cour ...

  2. 全网最细最全OLAP之clickhouse笔记|clickhouse文档|clickhouse揭秘文档(一)--clickhouse简介

    免费视频教程 https://www.51doit.com/ 或者联系博主微信 17710299606 1 简介 ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP ...

  3. ClickHouse | MergeTree引擎之数据分区

    前言 前面通过 一文了解ClickHouse  介绍过ClickHouse,特性,结构,使用场景.自己并未完全深入学习clickhouse,因为公司打算小范围使用ClickHouse,所以有必要深入学 ...

  4. clickhouse官方文档_clickhouse分析:chproxy使用

    点击上方蓝字关注我们 " 什么是chproxy?从名字就能了解ch代表clickhouse,proxy为代理,即专为clickhouse使用的代理.在clickhouse集群中,每一台机器都 ...

  5. 一文解密 Netflix 的快速事件通知系统是如何工作的

    Netflix 拥有超过 2.2 亿活跃会员,他们会使用各种功能执行大量操作.近乎实时地对这些操作做出反应以保持跨设备的体验一致,这对于确保最佳会员体验至关重要.考虑到支持的设备种类繁多以及会员执行的 ...

  6. ClickHouse入门基础教程

    问题导读: 1. ClickHouse是什么? 2. ClickHouse有哪些特性? 3. ClickHouse的使用场景有哪些? 一.what is clickhouse? clickhouse ...

  7. OLAP(四):ClickHouse

    引言 什么是ClickHouse? | ClickHouse文档 ClickHouse是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域.目前国内各个大厂纷纷跟进大规模使用: 今日头条 ...

  8. 大数据应用之【ClickHouse】

    学习资料 官网 深度好文:Clickhouse 实践之路 尚硅谷ClickHouse课程文档: ClickHouse入门 ClickHouse高级 ClickHouse监控及备份 背景: 工作中,突然 ...

  9. 我看过的数据库方面的好文章

    本文不定期更新,最后更新于2019-5-18 数据库 数据库事务隔离级别与并发事务控制(悲观锁与乐观锁) 浅谈数据库事务 记住,永远不要在MySQL中使用"utf8" B树和B+树 ...

  10. 在大厂的数据工程师工作日常工作分享

    目录 一.本人大数据工作内容? 二.高级/资深大数据架构涉及哪些内容? 三.大数据学习路线 四.送给在学习路上的小伙伴一些建议 首先说明一下数据类的岗位在大厂是会再细分,具体有数据工程.数据分析.数据 ...

最新文章

  1. Science | 化学合成文献数字化自动执行通用系统
  2. vue使用命令行构建完项目后_vue-cli 构建项目在IE中无法运行解决方式(build之后可运行)...
  3. xml在线解析_python-jsonpath 解析神器
  4. JStorm2.1.1集群的安装和使用
  5. termux安装gcc
  6. 喜欢蓝蓝的天空白白的云。这首《 Blue Skies》就是啦。
  7. STM32外设驱动库分析与实现
  8. gtp怎么安装系统_gpt格式硬盘如何安装win7系统教程
  9. 【ERROR】ValueError: Of the four parameters: start, end, periods, and freq, exactly three must be spec
  10. MySQL 修改frm文件_mysql 之 frm+ibd文件还原data
  11. 微麦投影仪android遥控器,投影仪遥控器如何使用 投影仪遥控器使用方法【详解】...
  12. android 禁止媒体扫描,Android通过.nomedia文件禁止多媒体库扫描指定文件夹下的多媒体文件...
  13. warn - Attempted to load @next/swc-linux-x64-
  14. 【蓝桥杯】【Python】次数差
  15. 把ipa包上传入AppStore
  16. 灵活提取Excel数据工具
  17. 神州租车,致力于提供更加便利的出行方式
  18. 华师大 OJ 2897
  19. 计算机常用的辅助存储器,计算机常用的辅存储器有哪些
  20. Java 使用Tailer类监听文件

热门文章

  1. UNITY性能优化✨MeshBaker在Unity中的使用教程
  2. 计算机桌面无法中英文切换,输入法无法切换到中文怎么办_输入法失效只能打英文的解决方法...
  3. 【六袆 - Java】跟WebService说Hola;入门WebService;
  4. c 语言 如何优化cpu占用率,C#程序优化-有效减少CPU占用率
  5. 12306刷票工具(简单易学)
  6. 大秦帝国和芈月传对比
  7. win7计算机excel快捷键,excel快捷键大全 公式
  8. 将RDL报表转换成RDLC报表的函数
  9. 侨鑫集团:不一样的CIO,不一样的数字化转型之路
  10. 明源软件热忱欢迎您的加入---2011年校园招聘