什么是ClickHouse?
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。Online analytical processing
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。on-line transaction processing
谁在用?
今日头条 内部用ClickHouse来做用户行为分析,内部一共几千个ClickHouse节点,单集群最大1200节点,总数据量几十PB,日增原始数据300TB左右。
腾讯内部用ClickHouse做游戏数据分析,并且为之建立了一整套监控运维体系。
携程内部从18年7月份开始接入试用,目前80%的业务都跑在ClickHouse上。每天数据增量十多亿,近百万次查询请求。
快手内部也在使用ClickHouse,存储总量大约10PB, 每天新增200TB, 90%查询小于3S。
在国外,Yandex内部有数百节点用于做用户点击行为分析,CloudFlare、Spotify等头部公司也在使用。
米哈游也有专门的数据分析部门在用
实现了什么?
数据有序存储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制
数据有序存储:
ClickHouse支持在建表时,指定将数据按照某些列进行sort by。
排序后,保证了相同sort key的数据在磁盘上连续存储,且有序摆放。在进行等值、范围查询时,where条件命中的数据都紧密存储在一个或若干个连续的Block中,而不是分散的存储在任意多个Block, 大幅减少需要IO的block数量。另外,连续IO也能够充分利用操作系统page cache的预取能力,减少page fault。
使用了什么存储结构,为什么是LSM-Tree?
Google提出的BIGTable又叫LSM-Tree全称是Log Structured Merge Tree,是一种分层,有序,面向磁盘的数据结构,其核心思想是充分利用了磁盘顺序写,磁盘批量的顺序写要远比随机写性能高出很多.
标志的就是kafka,把磁盘顺序写提升到了极致。
和传统的B+树进行对比,和传统的B+树进行对比,随机写PK顺序写
LSM-Tree的设计思路是,将数据拆分为几百M大小的Segments,并是顺序写入。不浪费时间。
B+Tree则是将数据拆分为固定大小的Block或Page, 一般是4KB大小,和磁盘一个扇区的大小对应,Page是读写的最小单位。
在数据的更新和删除方面,B+Tree可以做到原地更新和删除,这种方式对数据库事务支持更加友好,因为一个key只会出现一个Page页里面
但由于LSM-Tree只能追加写,并且在L0层key的range会重叠,所以对事务支持较弱,只能在Segment Compaction的时候进行真正地更新和删除。
因此LSM-Tree的优点是支持高吞吐的写(可认为是O(1)),这个特点在分布式系统上更为看重,当然针对读取普通的LSM-Tree结构,读取是O(N)的复杂度,在使用索引或者缓存优化后的也可以达到O(logN)的复杂度。
而B+tree的优点是支持高效的读(稳定的OlogN),但是在大规模的写请求下(复杂度O(LogN)),效率会变得比较低,因为随着insert的操作,为了维护B+树结构,节点会不断的分裂和合并。操作磁盘的随机读写概率会变大,故导致性能降低。
关键特征提取:
1:适应场景为绝大多数都是读请求
2:数据大批次更新,每次(1000行),而不是高频率,低行数更新。(这样就能列存储就能应用上,将1000条插入,拆分成对x列的插入(行数>列数))
3:已添加到数据库的数据不能修改(不建议修改,会影响到排序和聚合)
4:对于读取,行数大于列数(这样才能将行的读取转换为列的读取,要是行数等于列数,这个优势就不复存在)
5:宽表,即每个表存在大量的列
6:查询相对较少(高频率用ES更适合,有查询缓存),适用报表,做低频率的数据聚合分析
7:简单查询,可能也会有50ms左右的延时
8:列中的数据相对较小,方便聚合,如果超过60的大JSON,建议拆分成多列进行聚合
9:单个查询高吞吐量(并发虽然不适合,但适合对大数据的处理,单服务器每秒10亿行的处理速度)
10:不支持事务 (大数据的事务处理,会浪费多余的性能去维护数据的完整性,这会丧失他的快速分析优势),关于事务其实参考上面的存储结构就能发现了。
11:同上,数据一致无法保证
12:单个查询最好是大表拖小表
13:查询结果小于源数据,全量查询,啥都顶不住
14:灵活多变,适用于非预先建模的场景(如业务要做实时分析,条件也是随机的,就很适合使用)
参考文章:
https://cloud.tencent.com/developer/article/1441835
https://developer.aliyun.com/article/739804