ClickHouse简介(一)

一、clickhouse产生和背景:

ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++

语言编写,主要用于在线分析处理查询(OLAP) ,能够使用 SQL 查询实时生成分析数据报

告。于2016年开源,凭借优秀的性能,市场反应非常热烈。

什么事列式存储数据库??

相对行式数据库,像MySQL、Oracle、SqlServer等都是行式存储,是把同一行的数据放到相邻同一数据块种,而列式存储是把同一列的数据放到相邻同一数据块种,这样在进行计算类查询时,可以大大减少IO,返回结果更快。

官方网站:https://clickhouse.yandex/docs/en

clickhouse的前世今生:

第一阶段:MySQL时期

    Mysql作为它的数据存储和分析引擎的解决方案。

    表引擎只用的MyISAM(不支持事务)

顺序读写性能更高

  1. 读取顺序文件会用更少的磁盘寻道和旋转延迟时间(这里主要指机械磁盘)
  2. 操作系统可以预读取

MyISAM表引擎使用B+树结构存储索引,而数据则使用另外单独的存储文件,

MySQL中的InnoDB表引擎使用B+树同时存储索引和数据,数据直接挂载在叶子节点中

缺点:实际只有单线程写入,且没有删除修改,才会顺序读写。随着数据量大,性能明显下降。

第二阶段:Metrage时期

   由于MySQL的局限性,Yandex自研了MOLAP架构的Metrage。 使用LSM树代替B+树索引(顺序写,提高了写吞吐)。 LSM树本质是将大树切成很多小树,小树构建的过程完全基于内存(辅助写预写日志),然后内存 达到某个阈值后进行合并并flush到磁盘,并形成一个小的数据段(Segment),数据段中数据局 部有序。这样的优点是磁盘顺序读取、预读缓存、稀疏索引等 Metrage对需要分析的数据进行预先聚合,类似Kylin Cube,然后把聚合数据按照KV存储。 但是同时也带来了维度爆炸的问题。

第三阶段:OLAPServer时期

       MOLAP的分析需要进行预计算,系统无法满足Yandex面向个人的自定义分析功能。 从而又回归到ROLAP,因为相比Key-Value模型,关系模型拥有更好的描述能力。所以又 自研了OLAPServer,分别吸取了MyISAM和LSM树的长处。
在索引方面,使用稀疏索引了。 在数据文件上,沿用LSM树的数据段内数据有序,借助稀疏索引定位数据段。 在存储方面,类似MyISAM,将索引文件和数据文件分开,同时引入列存,将索引文件和数据文件按照列字段粒度进行拆分,每个列独立存储,以此进一步减少数据读取的范围
但是,从功能的完备性角度来看,OLAPServer可称之为数据库,不能成为数据库管理系统,没有DBMS应有的基本管理功能(DDL查询等)

第四阶段:ClickHouse时代

• 数据实时更新的SQL交互式查询 • 无法进行预聚合的SQL查询场景

clickhouse可以做用户行为分析,流批一体

线性扩展和可靠性保障能够原生支持 shard + replication

clickhouse没有走hadoop生态,采用 Local attached storage 作为存储

clickhouse不适用的场景

• 不支持事务

• 不擅长低延迟的Update/Delete操作

• 稀疏索引使得ClickHouse不擅长通过其键检索单行的点查询

• 不擅长大数据量Join

clickhouse索引
是稀疏索引,每一个对象对应着每一个偏移量
默认是8192行作为一个粒度
主键索引不作为唯一建,但是需要排序,真正的主键就是排序键(利用内部的MergeTree来维护排序键)

clickhouse为什么快呢??

• 列存和数据压缩 • 向量化和SIMD • 动态代码生成 • 多线程和分布式 • 多种表引擎 • 细节优化 • 算法优化 • 充分测试 • 持续改进 clickhouse社区会持续的改进更新,并且进行充分地测试和算法的优化,clickhouse算是一种黑科技的存在

二、clickhouse的简单应用

mac环境下: 安装好docker,可参考本人博客 presto学习(一)中的docker安装部分 1、打开docker Desktop 2、安装clickhouse服务端 docker pull yandex/clickhouse-server

ClickHouse简介(一)

 

3、安装客户端

docker pull yandex/clickhouse-client ClickHouse简介(一)

 

4、启动clickhouse-server

docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 yandex/clickhouse-server

ClickHouse简介(一)

5、使用clickhouse-client连接server
docker run -it --rm --link some-clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server 

ClickHouse简介(一)

表示已经进入到clickhouse终端,可以执行一些select命令

ClickHouse简介(一)  

 

上一篇:分布式技术:限流、通讯、缓存,全部一锅端,浦发银行Java开发面试


下一篇:boost项目复盘(二)