clickhouse底层知识

clickhouse:列式存储,一个用于(OLAP–>联机分析)的列式数据库管理系统(DBMS)

clickhouse为啥快:

​ 1.有多少CPU吃多少资源

​ 2.Clickhouse不支持事务,不存在隔离级别

​ 3.IO方面,mysql是行存储,Clickhouse是列存储.mysql需要大量的随机io.clickhouse基本是顺序io.(顺序io,磁头顺序访问.随机IO,需要先寻址===通俗就是顺序io,找到第一块数据后,其他数据都在这块数据后就不需要寻址了,依次获取即可,随机IO重复到不同的扇区找不同的数据,所以慢)

​ 4.列式存储,向量化引擎

数据处理:

​ OLAP:联机分析处理,—->数据的聚合,上钻,下钻等==>上,获取数据上一级数据,下,获取更细节的数据

​ OLTP:联机事务处理,—>数据的增删改查等

#####按行存储和按列存储

1
2
3
4
5
1.只访问查询的列,大大降低IO
2.由于查询是通过列实现的,整个数据库是自动索引化的
3.按行存储没有索引会使用大量的IO,而建立索引有需要花费大量时间和资源
4.按列存储有效减少了扫描的数据量.,按行扫描会获取所有字段,而按列则只获取指定字段
5.列式存储除了降低了IO和存储的压力(数据压缩),还为向量化做好了铺垫
基础数据类型
1
2
3
4
5
Int:Int8,Int16,Int32,Int64                                     toInt32
Float:Float32,Float64 toFloat32
Decimal:Decimal32,Decimal64,Decimal128======>保留小数位数 toDecimal32
String: String,FixedString 定长,UUID 直接定义为主键 toString
Date:DateTime,DateTime64,Date 时间精度不同,Date到天,DateTime到秒,DateTime64到亚秒 toDate
复合数据类型
1
2
3
4
5
6
7
数组 Array ,数组内的数据类型可以不同,但是不能冲突,如int和float是可以的,但是不能和String组成

元组 Tuple ,比array强一点,可以支持不同的数据类型,即元组内可以同时出现整形和字符串===但是定义的时候还是需要指定数据类型,如果插入数据类型不匹配仍会出错

枚举 Enum ,键值对的形式,a=2,b=3等

嵌套 Nested 可以让多个字段嵌套在一个字段下,如dept.id,dept.name,dept.age这种形成字段,字段内为数组,且长度都得一致,且一一对应

#####特殊数据类型

1
2
3
4
5
Nullable===>辅助修饰,让某些字段可以写入NULL值如:Nullable(String)----->慎用,会影响性能.只能和基础数据类型搭配不能搭配符合数据类型 Nullable(Array(String))不可行.Array(Nullable(String)) 可行

Domain====>分为IPv4和IPv6两种,直接定义数据类型即可
ip IPv4
用处:自带检查功能,是否符合规范