概述

ClickHouse属性

  1. DBMS:列式存储数据库
  2. OLAP:在线分析处理查询,(OLTP:在线事务查询)
  3. 可以使用sql(不支持窗口函数和相关子查询)
  4. 支持海量数据场景
  5. 写比读性能更好

OLAP

  1. 大多数是读请求
    2. 数据总是以相当大的批(> 1000 rows)进行写入
    3. 不修改已添加的数据
    4. 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列
    5. 宽表,即每个表包含着大量的列
    鼓励冗余,不在乎磁盘(不值钱),减少join带来的性能消耗
    6. 较少的查询(通常每台服务器每秒数百个查询或更少)
    7. 对于简单查询,允许延迟大约50毫秒
    8. 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
    9. 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)
    10. 事务不是必须的
    11. 对数据一致性要求低
    12. 每一个查询除了一个大表外都很小
    13. 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中

列式存储

行式存储:
image.png
列式存储:
image.png
列式存储好处:
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、稀疏索引
不适合通过检索单行的点查询,
但是好处是索引少,查询块!