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

 

3、安装客户端

docker pull yandex/clickhouse-client

 

4、启动clickhouse-server

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

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

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

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值