一个比 MySQL 快 800 多倍的数据库...

JavaGuide

共 5298字,需浏览 11分钟

 ·

2021-09-22 22:10

大家好呀!这里是爱学习的 Guide!今天给大家科普一个速度快到飞起的数据库——ClickHouse。

你可能没有用过 ClickHouse ,但是一定听过它的名字。

为了拓展一下自己的知识面,前段时间,我找到了 《ClickHouse 原理解析和应用实践》这本书来看。写的真心不错!

这篇文章我简单从一个 ClickHouse 初学者的角度,给小伙伴们科普一下 OLAP、OLTP 以及 ClickHouse 的前世今生和应用场景。

个人能力有限。如果文章有任何需要补充/完善/修改的地方,欢迎在评论区指出,共同进步!

OLAP 介绍

为了将企业的数据有效整合,快速制作出报表以供数据分析/决策使用,诞生了一个叫做 OLAP(Online Analytical Processing,联机分析处理)系统的概念,也叫做现代 BI(Business Intelligence,商业智能)系统。

与 OLAP 相对应的还有一个叫做 OLTP(Online Transaction Processing ,联机事务处理)的概念。这个我们平时日常接触的就比较多了,像企业的 ERP,CRM,OA 等系统都属于 OLTP 系统。

OLTP & OLAP

简单总结一下:

  • OLTP :可以保证操作的事务性,通常需要用到传统的关系型数据库比如 MySQL,主要操作是增删改查(比如添加用户、用户之间转账)。OLTP 通常处理的数据量不会很大,因为数据量大了之后 OLTP 数据库的响应一般会非常慢。
  • OLAP :对数据做分析然后得出一些结果比如数据报表,主要操作是查询(比如生成网站的流量分析报告)。OLAP 处理的数据量往往很大,并且 OLAP 处理的数据对象是数据仓库(data warehouse)中的数据。

数据仓库

OLAP 系统一般以数据仓库作为基础。数据仓库是为了将分散的数据汇聚到一处,将它们统一存储起来。

数据仓库的构建通常还会涉及到 ETL 的过程。ETL 即数据抽取(Extract)、转换(Transform)、装载(Load)。

下面这张图片来自:What is a Data Warehouse? | IBM[1]

大部分用于 OLTP 的数据库都可以执行 OLAP 相关的操作,只不过,效率通常都比较低,毕竟, 这不是它们所擅长的地方。

OLAP 分类

主流的 OLAP 可以分为 3 类 ROLAP、MOLAP、HOLAP。

ROLAP ( Relational OLAP,关系型 OLAP )

对数据不进行预处理,实时聚合计算,灵活性更好!适用于 对查询模式不固定、查询灵活性要求高的场景。常见的 ROLAP 有 Presto,Impala,Clickhouse 等等。

MOLAP ( Multi-dimensional OLAP ,多维 OLAP)

会对数据预处理,这提高了查询性能,同时也降低了灵活性。适用于查询场景相对固定并且对查询性能要求非常高的场景。常见的 MOLAP 有 Druid,Kylin,Doris 等等。

HOLAP ( Hybrid OLAP ,混合型 OLAP)

混合类型 OLAP。通常情况下,查询聚合性数据的时候,使用 MOLAP 技术;当查询明细数据时,使用 ROLAP 技术。在给定使用场景的前提下,以达到查询性能的最优化。

相关阅读推荐:《什么是 OLAP?主流八大开源 OLAP 技术架构对比》[2]

ClickHouse

简介

ClickHouse 是 Yandex(俄罗斯的一家做搜索引擎的公司)公司的一个产品,诞生于自家的在线流量分析产品—Yandex.Metrica。

根据 ClickHouse 官方文档[3]介绍:ClickHouse 是一个用于联机分析(OLAP)的 MPP 架构的列式数据库管理系统(DBMS)。

目前的话,国内有很多公司都在使用 ClickHouse ,比如腾讯、字节、金数据、B 站。

下面是腾讯音乐对 ClickHouse 实践:

Github 地址:https://github.com/ClickHouse/ClickHouse 。

腾讯云云数据库仓库ClickHouse

前世今生

其实,ClickHouse 的诞生也是一步一步改进现有系统之后得到的产物!

Yandex.Metrica 的第一版架构其实是基于 MySQL(ROLAP) 来做的。

后来,这一版架构出现了瓶颈,数据量过多(5800 亿)导致分析报告的耗费时间过长。即使对这一版架构进行了大量优化之后,耗费时间也仅仅是提高到了 26 秒。

于是,Yandex.Metrica 的研发团队开始另辟蹊径了!

他们自研了一个叫做 Metrage(MOLAP) 的新系统。Metrage 的架构设计和 MySQl 差别很大,就比如它使用的是 LSM 树作为索引结构而不是 B+ 树。

Metrage 虽然解决了性能问题,但是,产品方面又有了新的需求。

Metrage 只支持聚合数据查询,因此只有固定的报表分析功能,非常不灵活。我们希望可以有一个系统支持处理自定义报告这类。

于是,Yandex.Metrica 又自主研发出了 OLAPServer(HOLAP) 系统。并且,OLAPServer 使用 SQL 作为查询语言。

OLAPServer 系统专为非聚合数据使用,实时聚合性能非常强!

不过,OLAPServer 也有缺陷比如缺少对数据类型的支持(只支持一种数据类型)。并且,功能也比较简陋,仅仅支持一些简单的功能,并没有一个 DBMS 应该有的基本管理功能比如 DDL 查询。

于是,Yandex.Metrica 继续在 OLAPServer 的基础上进一步完善,最终打造出了 ClickHouse(ROLAP)。

为什么这么快?

ClickHouse 官方给出了一份非常详细的 ClickHouse 性能测试图,并提供了和其他常见数据库的对比。

性能报告地址:https://clickhouse.tech/benchmark/dbms/ 。

通过这份报告,可以非常直观地感受到 ClickHouse 到底是有多快!

这么说吧,ClickHouse 在相同的服务器配置与数据量(1000 万)下,平均响应速度是 MySQL 的 400 多倍,当数据量达到 1 亿的话,平均响应速度是 MySQL 的 800 多倍。

不谈具体的技术与架构,ClickHouse 之所以能够这么快主要得益于下面几点(结合《ClickHouse 原理解析与应用实践》所做的总结):

  • 特殊场景特殊对待 :同一个场景的不同状况,选择使用不同的实现方式,尽可能将性能最大化。比如去重计数 uniqCombined() 函数,会根据数据量的不同选择不同的算法:当数据量较小的时候,会选择 Array 保存;当数据量中等的时候,会选择HashSet;而当数据量很大的时候,则使用 HyperLogLog 算法。
  • 勇于尝鲜,不行就换 : ClickHouse 会优先使用最合适、最快的算法。如果市面上出现了可能会更好用的新算法的话,ClickHouse 通常会立即将其纳入并进行验证。效果不错的话,就继续用着。效果不行的话,就直接踢掉。
  • 持续测试,持续改进 :优秀的软件不是一朝一夕形成的,需要不断的测试改进。

适用场景

ClickHouse 虽然性能很强,查询速度和 MySQL 这类关系型数据库完全不是一个量级。

但是,ClickHouse 并不可以取代 MySQL 这类关系型数据库,它们是互补的关系。

ClickHouse 作为一款 OLAP 数据库,其应用场景主要就是数据分析比如广告流量分析,不适用于 OLTP 事务性操作的场景,因为,它不支持事务并且对按行删除数据不够友好!

文章推荐

推荐一些不错的好文和书籍,方便大家继续深入学习。

中文

  • OLAP 数仓入门问答-基础篇[4] (写的非常好 👍)
  • 秒级去重:ClickHouse 在腾讯海量游戏营销活动分析中的应用[5]
  • 数据分析引擎黑马 ClickHouse 最新技术的实践与应用[6]
  • ClickHouse 在有赞的实践之路[7]
  • 伴鱼事件分析平台:设计篇[8] :伴鱼的事件分析平台用到了 ClickHouse 来存储数据。
  • ClickHouse 官方文档(中文版)[9]
  • 漫谈 ClickHouse 在实时分析系统中的定位与作用[10] :《 ClickHouse 原理解析与应用实践》作者朱凯[11]大佬的一次视频分享。

英文

  • How ClickHouse saved our data[12]
  • Introducing ClickHouse -- The Fastest Data Warehouse You've Never Heard Of (Robert Hodges, Altinity)[13] :油管上的一个视频。

参考资料

[1]

What is a Data Warehouse? | IBM: https://www.ibm.com/cloud/learn/data-warehouse

[2]

《什么是 OLAP?主流八大开源 OLAP 技术架构对比》: https://segmentfault.com/a/1190000040428093

[3]

ClickHouse 官方文档: https://clickhouse.tech/docs/zh/

[4]

OLAP 数仓入门问答-基础篇: https://zhuanlan.zhihu.com/p/144926830

[5]

秒级去重:ClickHouse 在腾讯海量游戏营销活动分析中的应用: https://segmentfault.com/a/1190000037699772

[6]

数据分析引擎黑马 ClickHouse 最新技术的实践与应用: https://segmentfault.com/a/1190000040054934

[7]

ClickHouse 在有赞的实践之路: https://tech.youzan.com/clickhouse-zai-you-zan-de-shi-jian-zhi-lu/

[8]

伴鱼事件分析平台:设计篇: https://tech.ipalfish.com/blog/2021/06/21/event-analytics-design/

[9]

ClickHouse 官方文档(中文版): https://clickhouse.tech/docs/zh/

[10]

漫谈 ClickHouse 在实时分析系统中的定位与作用: https://www.bilibili.com/video/BV11y4y1C7Us

[11]

朱凯: https://github.com/nauu

[12]

How ClickHouse saved our data: https://mux.com/blog/from-russia-with-love-how-clickhouse-saved-our-data/

[13]

Introducing ClickHouse -- The Fastest Data Warehouse You've Never Heard Of (Robert Hodges, Altinity): https://www.youtube.com/watch?v=fGG9dApIhDU

< END >

也许你还想看
  | 我在 B 站淘了 2 个 Java 实战项目! 小破站,YYDS!
  | 我常用的20+个学习编程的网站!芜湖起飞!
  | 1w+字的 Dubbo 面试题/知识点总结!(2021 最新版)
  | 7年前,24岁,出版了一本 Redis 神书
  | 京东二面:为什么需要分布式ID?你项目中是怎么做的?
  | 和 Github 在一起 5 年多了......
  | 一键生成数据库文档,堪称数据库界的Swagger
  | 来看看这个超好用的项目脚手架吧!5分钟搭建一个Spring Boot 前后端分离系统!
  | Spring 官宣,干掉 Spring 5.3.x!

我是 Guide哥,一个工作2年有余,接触编程已经6年有余的程序员。大三开源 JavaGuide,目前已经 100k+ Star。未来几年,希望持续完善 JavaGuide,争取能够帮助更多学习 Java 的小伙伴!共勉!凎!点击即可了解我的个人经历

欢迎点赞分享。咱们下期再会!

浏览 62
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报