一、ClickHouse是什么
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)
说到列式数据库,一定会想到行式数据库,那我们就以行式数据库与列式数据库存储形式的对比来了解下列式数据库究竟是什么样的
在行式数据库系统中,数据按如下顺序存储:
row | id | name | sex |
---|---|---|---|
1 | 8343829382 | 张三 | 男 |
2 | 3247832994 | 李四 | 男 |
3 | 1943058349 | 王五 | 女 |
N | … | … | … |
在列式数据库系统中,数据按如下顺序存储:
row | 1 | 2 | 3 | N |
---|---|---|---|---|
id | 8343829382 | 3247832994 | 1943058349 | … |
name | 张三 | 李四 | 王五 | … |
sex | 男 | 男 | 女 | … |
看到这样的表格,想必我们也就对列式存储有些认识了
其实我们一般常用的数据库MySQL、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+
二、ClickHouse特点
(1)支持线性扩展
(2)简单方便
(3)高可靠性
(4)容错
三、ClickHouse应用场景
列式数据库更适合于OLAP场景
(1)绝大多数是读请求
(2)数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。
(3)已添加到数据库的数据不能修改。
(4)对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
(5)宽表,即每个表包含着大量的列
(6)查询相对较少(通常每台服务器每秒查询数百次或更少)
(7)对于简单查询,允许延迟大约50毫秒
(8)列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
(9)处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
事务不是必须的
(10)对数据一致性要求低
(11)每个查询有一个大表。除了他以外,其他的都很小。
(12)查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中
四、ClickHouse的常用数据类型
1、整型类型
(1)有符号
Int8-[-128:127]
Int16-[-32768:32767]
Int32-[-2147483648:2147483647]
Int64-[-9223372036854775808:9223372036854775807]
(2)无符号
UInt8-[0:255]
UInt16-[0:65535]
UInt32-[0:4294967295]
UInt64-[0:18446744073709551615]
2、浮点数类型
(1)Float32
相当于 float
(2)Float64
相当于 double
3、字符串类型
(1)String
字符串可以任意长度的。它可以包含任意的字节集,包含空字节
(2)FixedString(N)
一个固定长度的N个字节的字符串(N 必须是严格的正自然数)
4、时间类型
(1)Date
[1970-01-01, 2148-12-31]
(2)Date32
[1925-01-01, 2283-11-11]
(3)DateTime
[1970-01-01 00:00:00, 2105-12-31 23:59:59]
(4)DateTime64
亚秒精度
10-precision seconds