【ClickHouse】深入浅出系列之初识ClickHouse

ClickHouse是什么?

先看官方怎么说:

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

用通俗易懂的中文(人话)解释下:

  • 联机分析(OLAP):在线分析查询,可以理解成平时在MySQL上执行SQL查询数据。
  • 列式储存:咱们平时用的MySQL、PgSQL等每行进行存储,而ClickHouse是按照列进行存储,优点是压缩率高、节省服务器资源、查询效率高。
  • 数据库管理系统:这个大家都不陌生,类似于MySQL、SQLSever等。
  • 业界有些人会简称ClickHouse为CH或CK,我们后面的文章默认以CK代替ClickHouse

ClickHouse的优势

完备的DBMS功能

  • DDL(数据定义语言):可通过ddl快速操作ck,如增、删、改、查库表,动态修改冷热存储策略,无需重启服务。
  • DML(数据操作语言):即常见的SQL语句,如Insert、Update、Select、Delete、Drop等。
  • 分布式管理:自身提供了丰富的System表,可查询集群、磁盘存储情况、操作日志等。
  • 数据备份和恢复功能:可通过CVS等文件快速进行文件的导入导出。

写入性能

由于ck内部采用稀疏索引和列式存储,以及ck内部的优化,以至于写入数据非常快。如果再加上程序本身的优化(自定义规则写入本地表,不写入分布式表)会使得ck写入性能非常客观,根据多个技术博客(文末会挂载相关链接)的对写入性能的测试单节点单表可达到50W/S以上。

根据ck使用经验,以下做法会对ck的写入性能有极大的提升:

  • 利用ck自身提供的冷热存储方案实现冷热分离,即热数据使用SSD磁盘存储,冷数据使用SATA磁盘存储(对于日志场景来说热数据一般存储7天,冷数据一般存储180天)
  • 大批量的数据写入,如每批次10000-20000条数据写入更佳
  • 编写程序时采用轮训写入ck集群节点的方式写入本地表,避免写入分布式表(会导致ck压力增加很多,如CPU使用率100%等问题)
  • 磁盘IO尽可能高,尽量保持在30M/S以上,磁盘IO测试命令:
dd if=/dev/zero of=/data/text.txt bs=10k count=10000 oflag=direct

查询性能:

对于单表的查询非常快,基本都是毫秒级响应,特别适合数据分析。查询速率es性能的5倍以上。

一些优化查询性能的方法:

  • 尽可能的避免join查询,对于ck而言更期望的是建立大宽表查询,而非多张表的关联查询。
  • 可建立物化视图,会大大减少扫描磁盘的时间,从而提高查询效率。

节省成本:

相比ES而言,在日志场景下能节省很多成本。

  • 采用列式存储,压缩比很高,基本在35%以上。
  • 磁盘空间占用少,不需要像es一样建立倒排索引和正排索引之类的。
  • 节省维护成本,单节点宕机时不影响其他集群节点,且数据恢复快。

使用场景

  • 大数据量的日志场景
  • 金融行业的交易分析场景
  • 大屏的实时分析场景

目前在用的一些大厂:滴滴,京东,携程,微信,阿里云等

京东OLAP亿级查询高可用实践

ClickHouse在阿里云实时广告圈人业务最佳实践

滴滴基于 Clickhouse 构建新一代日志存储系统

从携程性能测试case中重新认识clickhouse - 简书

ClickHouse物化视图在微信的实战经验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

william.zhang(张)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值