前言
- 首先Clickhouse在大方向上属于OLAP,列式存储,MPP。也就是指这三者的基础概念,属于前置知识,如果未曾了解,那么关于接下来对ClickHouse的认知与学习则事倍功半。
- 固穿插一部分前置知识,如果已经有所了解则跳过。
OLAP
OLAP与OLTP
提到OLAP,总是会与OLTP做比较。
OLTP联机事务分析
联机事务分析,强调事务性,并发。微量查询,每秒钟的查询次数较多,数百个甚至过千。SQL语句提交频繁,强调ACID。大多应用于传统的银行证券交易行为,针对某行数据的增删改查。
数据块变化频繁,随着数据量的增长以及计算型的函数参与SQL,消耗大量的CPU时间。
强调三范式。
一定程度上OLAP分析的数据都是由OLTP所产生的。
OLAP联机分析处理
OLAP又分为ROLAP与MOLAP与HOLAP
ROLAP关系型联机分析
关系型联机分析,以关系数据库为核心,以关系型结构进行多维数据的表示和存储。R即表示关系型(Relational)。
比较经典的有Doris,百度开源的产品,已经捐献至apache
将分析用的多维数据存储在关系数据库中,将常用的,频繁需求的直接封装入视图。减少了数据冗余,同时提高了应用的灵活性,模型轻量化。
######Doris
MOLAP多维联机分析
多维联机分析,所用到的多维数据物理上存储为多维数组的形式,形成"立方体"的结构。
kylin,Druid就是最经典MOLTP,核心理念空间换取时间。
主要通过一些软件工具或中间软件实现,维的属性值被映射成多维数组的下标值或下标的范围,而总结数据作为多维数组的值存储在数组的单元中。
缺点是配置过程繁琐(需要专业程度较高),需要配置模型设计,并配合适当的“剪枝”策略(kylin中的强制维度等),以实现计算成本与查询效率的平衡。
HOLAP混合数据模型
对于查询频繁而稳定但又耗时的那些SQL,通过预计算来提速;对于较快的查询、发生次数较少或新的查询需求,像ROLAP一样直接通过SQL操作事实表和维度表。
目前似乎没有开源的OLAP系统属于这个类型
列式存储
列式存储与行式存储
行式存储
所谓行式存储,顾名思义,数据在磁盘上的存储以行为最小单位。适应场景,也就是数据按行读写。
Mysql,Oracle为其中典例
行式存储,列数是固定的,字段没有数据,也就是空行,依旧会占用空间。每行数据的类型也不一致,所以压缩的效率不会太高。
适用于随即查询,通常行式存储也就是关系型数据库,都提供二级索引,在整行的读取上,效率较优。
缺点是,范围读取性能不佳,如果只取某几个字段则需要全表扫描。应用于BI的场景,如果不设计视图,效率注定不佳。
列式存储
所谓列式存储,也就是在磁盘上的数据按列存储,按列读写。更像一个Map,K,V。
国内知名度较高的有HBase,国外知名度较高的有Cassandra。
字段中没有数据,不会占用空间。每列的数据类型基本是一致的,所以压缩的效率极高。
适用于范围查询,批量查询,大规模数据的聚合操作。
例如HBase,弱化了列的概念,但并非完全不要求结构,列族需要提前定义。
缺点是,顺序读写效率低,表关联关系较为复杂。
Cassandra数据结构
HBase数据结构
MPP
大规模并行处理系统
多个SQL数据库节点搭建的数据仓库系统。执行查询的时候,查询可以分散到多个SQL数据库节点上执行,然后汇总返回给用户.
比较经典的有Impala,Clickhouse,GreenPlum
每个节点都有自己独立的CPU,内存和磁盘资源。任务执行能力强,充分发挥本地计算的能力,数据无共享,无IO冲突,无锁资源竞争,计算速度快
缺点是,如果某个节点的计算迟迟无法完成,就出现短板效应。
Clickhouse
易观针对目前市面上OLAP所作报告 满分5分
ClickHouse特性之数据压缩
数据压缩支持标记压缩,列级压缩。也就是指可以针对不同的列,采用不同的压缩,较为灵活。创表时实现。
create table database.db_name(
security_id String CODEC(LZ4),
gross_profit float64 CODEC(Gorilla,LZ4),
rang_pc float32 CODEC(T64,LZ4),
trade_date Date CODEC(DoubleDelta,LZ4)
)
ENGINE = ReplacingMergeTree
PARTITION BY toYYYYMMDD(trade_date)
ORDER BY (security_id,
trade_date)