学习笔记_ClickHouse
ClickHouse
学习链接
1、ClickHouse介绍
ClickHouse是什么?
由白俄罗斯Yandex公司开源的数据库,转为OLAP而设计。Yandex是俄罗斯最大的搜索引擎公司,官方称ClickHouse日处理记录数“十几亿”。发布之初跑分要超过很多流行的商业数据库软件,官方的性能测试相识比vertica快5倍,比GP快10倍。
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)
OLAP
OLAP:联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。其中F是快速性(Fast),指系统能在数秒内对用户的多数分析要求做出反应;A是可分析性(Analysis),指用户无需编程就可以定义新的专门计算,将其作为分析的一部 分,并以用户所希望的方式给出报告;M是多维性(Multi—dimensional),指提供对数据分析的多维视图和分析;I是信息性(Information),指能及时获得信息,并且管理大容量信息
- 大多数是读请求
- 数据总是以相当大的批(> 1000rows)进行写入
- 不修改已添加的数据
- 每次查询从数据库中读取大量的行,但时同时又仅需要少量的列
- 宽表,即每个表包含大量的列
- 较少的查询(通常每台服务器每秒数百个查询或更少)
- 列中的数据相对较小:数字和短字符串(例如:每个URL 60个字节)
- 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)
- 事务不是必须的
- 对数据一致性要求低
- 每一个查询除了一个大表外都很小
- 查询结果明显小于元源数据,换句话说,数据被过滤或聚合后能够盛放在单台服务器的内存中
列式数据库与行式数据库
常见的行式数据库:MySQL、Postgres、MS SQL Server
常见的列式数据库:Vertica、Paraccel(Actian Matrix, Amazon Redshift)、Sybase IQ、Exasol、Infobright、InfiniDB、MonetDB(VectorWise, Actian Vector)、LucidDB、SAP HANA、Google Dremel、Google PowerDrill、Druid、kdb+)
按行随机读取,无法并行处理
按列顺序读取,可以有效利用多核CPU
ClickHouse的特性
优势:
- 数据压缩
- 磁盘存储:机械硬盘也可以有较好的性能
- 多核心并行处理
- 多服务器分布式处理
- 支持SQL
- 向量引擎(SSE 4.2指令集)
- 实时的数据更新(持续写入)
- 稀疏索引
- 适合在线查询(不需要预处理既可以以较快的速度响应)
- 支持近似计算(Sample采样)
- 支持数据复制和数据完整性:异步多主复制
限制:
- 没有完整的事务支持
- 缺少高频率,低延迟的修改或删除已存在数据的能力
- 不适合通过主键检索单行数据
ClickHouse的性能
写入:建议每次写入不少于1000行,或每秒不超过一个写入请求。当使用TSV格式将一份数据写入到MergeTree表中时,写入速度大约为50到200MB/s
以历史数据表为例,6000w行的数据,从MySQL导入ClickHouse耗时为5min,平均每秒20w行存储(LZ4/ZSTD )
查询:参考官方数据
连接工具
clickhouse-client(TCP)
DBeaver(HTTP)
DateGrip(HTTP)
2、ClickHouse基本概念
基本术语
数据库:
- 表:表有独立的引擎,有些引擎相当于视图
- 列:不同列的数据分开存储。支持物化列
- 物化视图:物化视图可用于构建数据立方体(预聚合)、数据传输等
- 分区键:分区键分度不能太高,否则可能会导致创建的文件太多,反而降低查询性能,一般控制在1000个分区以内
- 排序键:排序键用于对数据文件的内容进行排序
- 主键:主键保存在内存中,一般与排序键一致,不另外声明
字段类型
Nullable | 默认不为空,可为空时用Nullable修饰 |
---|---|
整数 | [U]Int(8/16/32/64/128/256) |
浮点数 | Float(32/64) |
Decimal | Decimal(P,S), Decimal32(S), Decimal64(S), Decimal128(S), Decimal256(S) |
Boolean | 底层以Int8存储(0/1) |
String | 相当于其他数据库中的VARCHAR/BLOB/CLOB等类型 |
FixString(n) | 固定n个字节的字符串 |
UUID | 默认值00000000-0000-0000-0000-000000000000,可用generateUUIDv4()生成 |
Date | 支持范围 1970-01-01 ~ 2105-12-31(及2106年的一部分) |
DateTime([timezone]) | [1970-01-01 00:00:00, 2105-12-31 23:59:59] |
DateTime64(precision, [timezone]) |
时间精度为 10^(−precision)
学习笔记_ClickHouse相关推荐
最新文章
热门文章
|