OLAP数据库ClickHouse,补充你的弹药库

戏子无情 提交于 2020-10-20 04:13:54


ClickHouse是由俄罗斯搜索引擎公司Yandex公司开源的OLAP数据库,性能表现优异,官方的基准测试中,平响速度是Hive的126倍,MySQL的429倍。


从2016年开源以来,飞速发展,在官网的使用者列表里,你会发现有许多国内互联网公司在用,有云产品、日志产品、银行数据分析等等。每个后面都会有相对应的PPT或视频。


官网在介绍ClickHouse是什么时,用下面两张图形象的来传达一个「列式」数据库带来的查询速度的提升,以及在OLAP是多么的合适。





短短几年的发展,从DB-Engines上的这条红线就能看出势头迅猛




除了基础数据类型外,ClickHouse还提供了对复合数据类型的支持,像数组、元组、枚举和嵌套,通过array、json、tuple、set等复合数据类型,业务Schema 能更灵活。


由于ClickHouse设计之初,就是OLAP的需求,所以提供的特性,自然契合和满足OLAP的场景,比如下面的特点:

读多于写

不同于事务处理(OLTP)的场景,比如电商场景中加购物车、下单、支付等需要在原地进行大量insert、update、delete操作,数据分析(OLAP)场景通常是将数据批量导入后,进行任意维度的灵活探索、BI工具洞察、报表制作等。数据一次性写入后,分析师需要尝试从各个角度对数据做挖掘、分析,直到发现其中的商业价值、业务变化趋势等信息。这是一个需要反复试错、不断调整、持续优化的过程,其中数据的读取次数远多于写入次数。这就要求底层数据库为这个特点做专门设计,而不是盲目采用传统数据库的技术架构。

大宽表,读大量行但是少量列,结果集较小

在OLAP场景中,通常存在一张或是几张多列的大宽表,列数高达数百甚至数千列。对数据分析处理时,选择其中的少数几列作为维度列、其他少数几列作为指标列,然后对全表或某一个较大范围内的数据做聚合计算。这个过程会扫描大量的行数据,但是只用到了其中的少数列。而聚合计算的结果集相比于动辄数十亿的原始数据,也明显小得多。

数据批量写入,且数据不更新或少更新

OLTP类业务对于延时(Latency)要求更高,要避免让客户等待造成业务损失;而OLAP类业务,由于数据量非常大,通常更加关注写入吞吐(Throughput),要求海量数据能够尽快导入完成。一旦导入完成,历史数据往往作为存档,不会再做更新、删除操作。

无需事务,数据一致性要求低

OLAP类业务对于事务需求较少,通常是导入历史日志数据,或搭配一款事务型数据库并实时从事务型数据库中进行数据同步。多数OLAP系统都支持最终一致性。

灵活多变,不适合预先建模

分析场景下,随着业务变化要及时调整分析维度、挖掘方法,以尽快发现数据价值、更新业务指标。而数据仓库中通常存储着海量的历史数据,调整代价十分高昂。预先建模技术虽然可以在特定场景中加速计算,但是无法满足业务灵活多变的发展需求,维护成本过高。


和MySQL支持多种存储引擎类似,ClickHouse 也提供了丰富的表引擎,像合并树、外部存储、文件、接口等六大类20多种表引擎。



官网之外,市面上关于ClickHouse成体系的书籍不多,这本『ClickHouse 原理解析与应用实践』首本讲解ClickHouse书籍,作者朱凯,是ClickHouse贡献者之一,书籍从ClickHouse的产生时代背景、运行原理,实践指导等多个维度来解析ClickHouse 的架构、原理和使用,运维等。






例行送书,感谢华章IT的赞助,上面『ClickHouse 原理解析与应用实践,送出四本。截止到9.13,「分享最多」与「阅读最多」的列表里各取前两个。



相关阅读

MySQL: 喂,别走,听我解释一下好吗?

免安装,还原生产环境,运行中切换版本,这不是我认识的MySQL

多表查询用什么联接?别信感觉,用数据说话

一个数据库SQL查询的数次轮回

数据库是咋工作的?(一)

凭什么让日志先写?

Java七武器系列长生剑 -- Java虚拟机的显微镜 Serviceability Agent

Java七武器系列霸王枪 -- 线程状态分析 jstack

Java七武器系列孔雀翎-- 问题诊断神器BTrace

嵌套事务、挂起事务,Spring 是怎样给事务又实现传播特性的?

怎样阅读源代码?




源码|实战|成长|职场


这里是「Tomcat那些事儿

请留下你的足迹

我们一起「终身成长」


本文分享自微信公众号 - Tomcat那些事儿(tomcat0000)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!