第01期:一文了解 ClickHouse

image

1、简介

1.1 ClickHouse 是什么?

ClickHouse 是 Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库,其处理数据的速度比传统方法快 100-1000 倍。ClickHouse 的性能超过了目前市场上可比的面向列的 DBMS,每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。html

1.2 ClickHouse的一些特性:

  1. 快速:ClickHouse 会充分利用全部可用的硬件,以尽量快地处理每一个查询。单个查询的峰值处理性能超过每秒 2 TB(解压缩后,仅使用的列)。在分布式设置中,读取是在健康副本之间自动平衡的,以免增长延迟。
  2. 容错:ClickHouse 支持多主机异步复制,而且能够跨多个数据中心进行部署。全部节点都相等,这能够避免出现单点故障。单个节点或整个数据中心的停机时间不会影响系统的读写可用性。
  3. 可伸缩:ClickHouse 能够在垂直和水平方向上很好地缩放。ClickHouse 易于调整以在具备数百或数千个节点的群集上或在单个服务器上,甚至在小型虚拟机上执行。当前,每一个单节点安装的数据量超过数万亿行或数百兆兆字节。
  4. 易用:ClickHouse 简单易用,开箱即用。它简化了全部数据处理:将全部结构化数据吸取到系统中,而且当即可用于构建报告。SQL 容许表达指望的结果,而无需涉及某些 DBMS 中能够找到的任何自定义非标准 API。
  5. 充分利用硬件:ClickHouse 与具备相同的可用 I/O 吞吐量和 CPU 容量的传统的面向行的系统相比,其处理典型的分析查询要快两到三个数量级。列式存储格式容许在 RAM 中容纳更多热数据,从而缩短了响应时间。
  6. 提升 CPU 效率:向量化查询执行涉及相关的 SIMD 处理器指令和运行时代码生成。处理列中的数据会提升 CPU 行缓存的命中率。
  7. 优化磁盘访问:ClickHouse 能够最大程度地减小范围查询的次数,从而提升了使用旋转磁盘驱动器的效率,由于它能够保持连续存储数据。
  8. 最小化数据传输:ClickHouse 使公司无需使用专门针对高性能计算的专用网络便可管理其数据。

什么时候使用 ClickHouse:
用于分析结构良好且不可变的事件或日志流,建议将每一个此类流放入具备预链接维度的单个宽表中。
什么时候不使用 ClickHouse:
不适合事务性工做负载(OLTP)、高价值的键值请求、Blob 或文档存储。git

1.3 为何 ClickHouse 速度这么快?

首先咱们了解一下 OLAP 场景的特色:github

  1. 读多于写。
  2. 大宽表,读大量行可是少许列,结果集较小。
  3. 数据批量写入,且数据不更新或少更新。

针对分析类查询,一般只须要读取表的一小部分列。在列式数据库中你能够只读取你须要的数据。例如,若是只须要读取 100 列中的 5 列,这将帮助你最少减小 20 倍的 I/O 消耗。算法

因为数据老是打包成批量读取的,因此压缩是很是容易的。同时数据按列分别存储这也更容易压缩。这进一步下降了 I/O 的体积。因为 I/O 的下降,这将帮助更多的数据被系统缓存。数据库

例如,查询《统计每一个广告平台的记录数量》须要读取《广告平台 ID》这一列,它在未压缩的状况下须要 1 个字节进行存储。若是大部分流量不是来自广告平台,那么这一列至少能够以十倍的压缩率被压缩。当采用快速压缩算法,它的解压速度最少在十亿字节(未压缩数据)每秒。换句话说,这个查询能够在单个服务器上以每秒大约几十亿行的速度进行处理。这其实是当前实现的速度。缓存

ClickHouse 从 OLAP 场景需求出发,定制开发了一套全新的高效列式存储引擎服务器

image

column-oriented  图片来源见水印相比于行式存储,列式存储在分析场景下有着许多优良的特性。网络

  1. 如前所述,分析场景中每每须要读大量行可是少数几个列。在行存模式下,数据按行连续存储,全部列的数据都存储在一个 block 中,不参与计算的列在 IO 时也要所有读出,读取操做被严重放大。而列存模式下,只须要读取参与计算的列便可,极大的减低了 IO cost,加速了查询。
  2. 同一列中的数据属于同一类型,压缩效果显著。列存每每有着高达十倍甚至更高的压缩比,节省了大量的存储空间,下降了存储成本。
  3. 更高的压缩比意味着更小的 data size,从磁盘中读取相应数据耗时更短。
  4. 自由的压缩算法选择。不一样列的数据具备不一样的数据类型,适用的压缩算法也就不尽相同。能够针对不一样列类型,选择最合适的压缩算法。
  5. 高压缩比,意味着同等大小的内存可以存放更多数据,系统 cache 效果更好。

2、安装实践

2.1 安装

sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client
本案例安装的是单机版本。yum 安装会自动建立 clickhouse 用户。

2.2 修改配置文件

yum 安装完成以后,配置文件,数据文件日志目录设置以下:运维

配置文件目录:/etc/clickhouse-server/
数据文件目录:/var/lib/clickhouse/
日志文件目录:/var/log/clickhouse-server/

clickhouse 相关的各个目录能够在配置文件 /etc/clickhouse-serverconfig.xml 中进行修改。异步

启动

sudo /etc/init.d/clickhouse-server start

链接

clickhouse-client -m #默认以 default 用户登陆

在 /etc/clickhouse-server/users.xml 中能够设置其余用户的访问权限等。

clickhouse-client [--user=xxx --password=xxx --host=xxx]

2.3 速度测试

localhost :) SELECT
:-]     C_CITY,
:-]     S_CITY,
:-]     toYear(LO_ORDERDATE) AS year,
:-]     sum(LO_REVENUE) AS revenue
:-] FROM lineorder_flat
:-] WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND year >= 1992 AND year <= 1997
:-] GROUP BY
:-]     C_CITY,
:-]     S_CITY,
:-]     year
:-] ORDER BY
:-]     year ASC,
:-]     revenue DESC;

SELECT 
    C_CITY, 
    S_CITY, 
    toYear(LO_ORDERDATE) AS year, 
    sum(LO_REVENUE) AS revenue
FROM lineorder_flat
WHERE ((C_CITY = 'UNITED KI1') OR (C_CITY = 'UNITED KI5')) AND ((S_CITY = 'UNITED KI1') OR (S_CITY = 'UNITED KI5')) AND (year >= 1992) AND (year <= 1997)
GROUP BY 
    C_CITY, 
    S_CITY, 
    year
ORDER BY 
    year ASC, 
    revenue DESC

┌─C_CITY─────┬─S_CITY─────┬─year─┬────revenue─┐
│ UNITED KI1 │ UNITED KI1 │ 1992 │ 5776096629 │
│ UNITED KI5 │ UNITED KI1 │ 1992 │ 5555883901 │
│ UNITED KI5 │ UNITED KI5 │ 1992 │ 5348705805 │
│ UNITED KI1 │ UNITED KI5 │ 1992 │ 5326870427 │
│ UNITED KI1 │ UNITED KI1 │ 1993 │ 5892974670 │
│ UNITED KI1 │ UNITED KI5 │ 1993 │ 5490859451 │
│ UNITED KI5 │ UNITED KI1 │ 1993 │ 5468354303 │
│ UNITED KI5 │ UNITED KI5 │ 1993 │ 5089909647 │
│ UNITED KI5 │ UNITED KI1 │ 1994 │ 5437315108 │
│ UNITED KI1 │ UNITED KI1 │ 1994 │ 5348775917 │
│ UNITED KI5 │ UNITED KI5 │ 1994 │ 5310936695 │
│ UNITED KI1 │ UNITED KI5 │ 1994 │ 5237461110 │
│ UNITED KI1 │ UNITED KI1 │ 1995 │ 5737551920 │
│ UNITED KI5 │ UNITED KI5 │ 1995 │ 5657584590 │
│ UNITED KI5 │ UNITED KI1 │ 1995 │ 5260093556 │
│ UNITED KI1 │ UNITED KI5 │ 1995 │ 5213763257 │
│ UNITED KI5 │ UNITED KI1 │ 1996 │ 5522325005 │
│ UNITED KI1 │ UNITED KI1 │ 1996 │ 5451244409 │
│ UNITED KI5 │ UNITED KI5 │ 1996 │ 5231759057 │
│ UNITED KI1 │ UNITED KI5 │ 1996 │ 5203962897 │
│ UNITED KI1 │ UNITED KI1 │ 1997 │ 5340760807 │
│ UNITED KI5 │ UNITED KI1 │ 1997 │ 5295685214 │
│ UNITED KI1 │ UNITED KI5 │ 1997 │ 5188428156 │
│ UNITED KI5 │ UNITED KI5 │ 1997 │ 5024634475 │
└────────────┴────────────┴──────┴────────────┘

24 rows in set. Elapsed: 1.723 sec. Processed 546.67 million rows, 4.46 GB (317.28 million rows/s., 2.59 GB/s.)

扫描 1.7 秒处理 546w 的数据量,每秒处理 317w 行数据,速度是至关快了。

3、和其余列式存储的对比

没有银弹,各类数据存储类型仍是要结合具体的场景使用。

image

图片来自 新浪 高鹏的 ppt 目前大量使用 ClickHouse 的互联网公司:
1. 今日头条内部用 ClickHouse 来作用户行为分析,内部一共几千个 ClickHouse 节点,单集群最大 1200 节点,总数据量几十 PB,日增原始数据 300TB 左右。
2. 腾讯内部用 ClickHouse 作游戏数据分析,而且为之创建了一整套监控运维体系。
3. 携程内部从 18 年 7 月份开始接入试用,目前 80% 的业务都跑在 ClickHouse 上。天天数据增量十多亿,近百万次查询请求。
4. 快手内部也在使用 ClickHouse,存储总量大约 10PB, 天天新增 200TB, 90% 查询小于 3S。
5. 在国外,Yandex 内部有数百节点用于作用户点击行为分析,CloudFlare、Spotify 等头部公司也在使用。固然还有一些没有关注到的公司也在大量使用,有兴趣的朋友能够积极尝试。

4、小结

本文是浅出的介绍了 Clickhouse 的是什么,有哪些新特性。须要深刻学习仍是要看官方文档,纸上来得终觉浅,绝知此事要躬行。

参考文章

  1. https://www.cnblogs.com/zhouj...
  2. https://clickhouse.tech/docs/zh/
  3. https://zhuanlan.zhihu.com/p/...
  4. https://github.com/ClickHouse...
    • *

关于 ClickHouse 的技术内容,大家还有什么想知道的吗?赶忙留言告诉小编吧!

image

相关文章
相关标签/搜索