一、clickhouse产生和背景:
ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++
语言编写,主要用于在线分析处理查询(OLAP) ,能够使用 SQL 查询实时生成分析数据报
告。于2016年开源,凭借优秀的性能,市场反应非常热烈。
什么事列式存储数据库??
相对行式数据库,像MySQL、Oracle、SqlServer等都是行式存储,是把同一行的数据放到相邻同一数据块种,而列式存储是把同一列的数据放到相邻同一数据块种,这样在进行计算类查询时,可以大大减少IO,返回结果更快。
官方网站:https://clickhouse.yandex/docs/en
clickhouse的前世今生:
第一阶段:MySQL时期
Mysql作为它的数据存储和分析引擎的解决方案。
表引擎只用的MyISAM(不支持事务)
顺序读写性能更高
- 读取顺序文件会用更少的磁盘寻道和旋转延迟时间(这里主要指机械磁盘)
- 操作系统可以预读取
MyISAM表引擎使用B+树结构存储索引,而数据则使用另外单独的存储文件,
MySQL中的InnoDB表引擎使用B+树同时存储索引和数据,数据直接挂载在叶子节点中
缺点:实际只有单线程写入,且没有删除修改,才会顺序读写。随着数据量大,性能明显下降。
第二阶段:Metrage时期
第三阶段:OLAPServer时期
在索引方面,使用稀疏索引了。在数据文件上,沿用LSM树的数据段内数据有序,借助稀疏索引定位数据段。在存储方面,类似MyISAM,将索引文件和数据文件分开,同时引入列存,将索引文件和数据文件按照列字段粒度进行拆分,每个列独立存储,以此进一步减少数据读取的范围
第四阶段:ClickHouse时代
• 数据实时更新的SQL交互式查询• 无法进行预聚合的SQL查询场景
clickhouse可以做用户行为分析,流批一体
线性扩展和可靠性保障能够原生支持 shard + replication
clickhouse没有走hadoop生态,采用 Local attached storage 作为存储
clickhouse不适用的场景:
• 不支持事务
• 不擅长低延迟的Update/Delete操作
• 稀疏索引使得ClickHouse不擅长通过其键检索单行的点查询
• 不擅长大数据量Join
clickhouse索引:
是稀疏索引,每一个对象对应着每一个偏移量
默认是8192行作为一个粒度
主键索引不作为唯一建,但是需要排序,真正的主键就是排序键(利用内部的MergeTree来维护排序键)
clickhouse为什么快呢??
二、clickhouse的简单应用
3、安装客户端
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命令