概述
ClickHouse属性
- DBMS:列式存储数据库
- OLAP:在线分析处理查询,(OLTP:在线事务查询)
- 可以使用sql(不支持窗口函数和相关子查询)
- 支持海量数据场景
- 写比读性能更好
OLAP
- 大多数是读请求
2. 数据总是以相当大的批(> 1000 rows)进行写入
3. 不修改已添加的数据
4. 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列
5. 宽表,即每个表包含着大量的列
鼓励冗余,不在乎磁盘(不值钱),减少join带来的性能消耗
6. 较少的查询(通常每台服务器每秒数百个查询或更少)
7. 对于简单查询,允许延迟大约50毫秒
8. 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
9. 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)
10. 事务不是必须的
11. 对数据一致性要求低
12. 每一个查询除了一个大表外都很小
13. 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中
列式存储
行式存储:
列式存储:
列式存储好处:
1. 对于列的聚合,计数,求和等统计操作原因优于行式存储。
2. 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
3. 由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于cache也有了更大的发挥空间。
多样化引擎
合并树引擎
高吞吐写入能力
LSM Tree 结构,log sort merge ,
预写日志, —>快的原因
按照key排序,写到文件定期合并—>后台进行
顺序读写(50-200M/s)
分区和线程并行
partition
类似于hbase,查询的时候会在某个分区进行查询
充分利用cpu性能,可以同时读取多个分区
indes(稀疏索引)
优势:一条sql利用多个cpu
劣势:因为一个sql利用了多个cpu,所以不适合多条sql的需求
限制
1、不支持事务
2、缺少高频率低延迟的删改数据的能力,仅能用于批量删除或修改数据
例如:要删除一条数据,需要读取一整个分区的数据到内存,删完那条数据后将其他数据写回
3、稀疏索引
不适合通过检索单行的点查询,
但是好处是索引少,查询块!