OLAP场景的关键特性:

  1. 大多数数据库访问都是读请求。
  2. 数据总是以批量形式写入数据库(每次写入大于10001行)。
  3. 已添加的数据一般无需修改。
  4. 每次查询都从数据库中读取大量的行,但是同时又仅需少量的列。
  5. 数据表多为宽表,即每个表均包含大量的列。
  6. 查询量一般较少(非高并发,通常每台服务器每秒有数百个查询或者更少)。
  7. 对于简单查询,允许的延迟大约为50毫秒(响应时间要迅速)。
  8. 列中的数据相对较小,一般为数字或者短的字符串。
  9. 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)。
  10. 事务不是必须的。
  11. 对数据一致性要求低。
  12. 查询结果明显小于源数据(数据被过滤或者聚合后能够被存放在单台服务器内存中)。

可以看出,OLAP业务场景与其他业务场景如OLTP等有很大的不同,使用OLTP数据库或KeyValue数据库去处理分析查询业务将会获得非常差的性能,而且没有意义。另外相比行式数据

库,列式数据库则更适用于OLAP场景,因为对于大多数的查询而言,列式数据库的处理速度要比行式数据库快100倍。二者的性能差别很大,列式数据库明显占优,可以从以下几个方面解释:

  • 对于分析类查询,通常只需要读取数据表中的一小部分列,使用列式数据库可以很轻松实现,而使用行数据库却需要读取全部的列,这就带来了性能的损失。
  • 列式数据库按列存储数据,使得数据更容易被压缩,可以降低I/O传输的体积,从而使查询速度加快。
  • 由于I/O体积的降低,可以使得更多的查询数据被系统缓存,进一步加快了查询的速度。
  • 另外,执行一个查询一般需要处理大量的行,在整个列向量上执行所有操作将比在每一行上执行所有操作更加高效,而且还可以更加充分的利用CPU资源,从而提升了查询的性能。

ClickHouse特性:

相比其他的列式数据库,ClickHouse的以下特性决定了它更适用于OLAP场景。

  • 数据压缩:ClickHouse会自动对插入的数据进行压缩,这对于性能的提升起到了至关重要的作用。
  • 磁盘存储:ClickHouse被设计为工作在传统磁盘上,这意味着数据存储的成本较低。
  • 多核心并行处理:ClickHouse会利用服务器的一切必要资源,从而以最自然的方式并行化处理大规模查询。
  • 分布式查询:在ClickHouse中,数据可以保存在不同的分片上(shard),查询可以分布在所有分片上并行处理。
  • 支持SQL:ClickHouse的查询语言大部分情况下是与SQL标准兼容的,更容易上手。
  • 向量引擎:ClickHouse采用了列向量引擎技术,可以更为高效的使用CPU资源。
  • 实时数据更新:ClickHouse使用MergeTree引擎对数据进行增量排序,数据可以持续不断的写入到表中并进行合并,而且在整个过程中不会存在任何加锁行为。
  • 支持索引:ClickHouse按照排序键对数据进行排序并支持主键索引,可以使其在几十毫米内完成对特定值或特定范围的查找。
  • 支持近似计算:ClickHouse提供了许多在允许牺牲数据精度的情况下对查询进行加速的方法。

ClickHouse不足:

  • 不支持事务。
  • 不擅长根据主键按照行粒度进行查询(虽然支持,但不友好)故不能把ClickHouse当作Key-Value数据库来使用。
  • 不擅长按行删除数据。

这些弱点并不能视为ClickHouse的缺点,事实上其他高性能的OLAP数据库同样也不擅长上述方面。因为对于OLAP数据库而言,上述这些能力并不是重点,只能说这是为了极致查询性能所做的权衡。

ClickHouse之列式存储与数据压缩:

俗话说的好,要想让查询变得更快,最简单且有效的方法就是减少数据扫描范围和数据传输时的大小,列式存储和数据压缩即能帮助我们实现上述两点,对于一款高性能数据库来说也是必不可少的特性 。

一般来说,列式存储是数据压缩的前提。按列存储与按行存储相比,前者可以有效减少查询时所需扫描的数据量,举例如下:

index F01 F02 F03 F04 F05 F06 F07 F08 F09 F10
1 * * * * *
2 * * * * *
3 * * * * *
4 * * * * *
5 * * * * *

假设一张数据表有10个字段F01~F10,以及100行数据。现在需要查询前5个字段进行数据分析,则可以用如下SQL实现:

SELECT  F01,F02,F03,F04,F05 FROM TABLE_A

如果数据按行存储,数据库首先会逐行扫描,并获取每行数据的所有10个字段,再从每一行数据中返回F01~F05这5个字段。不难发现,尽管只需要前面5个字段,但由于数据是按行进行组织的,实际上还是扫描了所有的字段。如果数据按列存储,就不会发生这样的问题。由于数据按列组织,数据库可以直接获取F01~F05这5列的数据,从而避免了多余的数据扫描。

按列存储相比按行存储的另一个优势是对数据压缩的友好性。

压缩前:abcdefghi_bcdefghi

压缩后:abcdefghi_(9,8)

可以看到,压缩的本质是按照一定步长对数据进行匹配扫描,当发现重复部分的时候就进行编码转换。如上述示例中(9,8),表示如果从下划线开始向前移动9个字节,会匹配到8个字节长的重复项,即这里的bcdefghi。真实的压缩算法自然比这个示例更为复杂,但压缩算法的实质就是如此。数据中的重复项越多,则压缩率越高;压缩率越高,则数据体量越小;而数据体量越小,数据在网络中传输越快,对网络带宽和磁盘IO的压力也就越小。一般来说,同一个列字段的数据,因为拥有相同的数据类型和现实语义,具备重复项的特性自然也就更高。

ClickHouse是使用列式存储的数据库,数据按列进行组织,属于同一列的数据就会被保存在一起,列与列之间也会由不同的文件分别保存(主要指MergeTree表引擎)。数据默认使用LZ4算法压缩。同时,列式存储除了降低IO和存储压力之外,还为向量化执行做好了铺垫。

ClickHouse在数据存取方面,既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理)

OLAP场景之利器ClickHouse相关推荐

  1. OLAP黑马利器ClickHouse实战应用

    极简,几乎是所有工具类产品的终极目标. 对于数据库工具而言尤为如此: 应对多样化的数据分析场景,需要简洁.统一的大数据分析体系 数据查询秒级响应,以保证企业管理者和相关业务人员的工作效率 数据报表建设 ...

  2. 比MySQL快801倍,OLAP两大神器ClickHouse+Doris技术选型攻略分享

    数字化时代,数据即价值.商战即信息战,如何从海量数据中提取精准的用户群体信息成为众多企业经营的重中之重,这就对开发工程师在速度和精准度方面的要求越来越高. 海量订单如何精准获取地域.时间.来源.渠道等 ...

  3. 比MySQL快801倍,OLAP两大神器ClickHouse和Doris到底怎么选?

    对于匠人而言,一项手艺,如果学不会,结果只有两种:一是低头求人,二是花钱买成品. 对于程序员而言,一款热门软件,如果玩不转,结果也是两种:一是向高手求教,二是看着别人升职加薪. 2021年4月程序员薪 ...

  4. 数仓选型必列入考虑的OLAP列式数据库ClickHouse(上)

    概述 定义 ClickHouse官网地址 https://clickhouse.com/ 最新版本22.4.5.9 ClickHouse官网文档地址 https://clickhouse.com/do ...

  5. 数据源管理 | OLAP查询引擎,ClickHouse集群化管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.列式库简介 ClickHouse是俄罗斯的Yandex公司于2016年开源的列式存储数据库(DBMS),主要用于OLAP在线分析处理查询, ...

  6. postgres两条结果集合并无法区分那个表的数据结果集_Hulu在OLAP场景下数据缓存技术实战...

    点击hadoop123关注我哟 知名的大数据中台技术分享基地,涉及大数据架构(hadoop/spark/flink等),数据平台(数据交换.数据服务.数据治理等)和数据产品(BI.AB测试平台)等,也 ...

  7. 开源OLAP引擎测评:Clickhouse vs TiDB vs Palo

    作者:gzp1 原文来源: https://tidb.net/blog/9068e79b 附一条 Clickhouse vs TiDB vs Palo的测评文章,底下有传送门链接,有需要的自取~ 主要 ...

  8. clickhouse mysql引擎_ClickHouse为啥能做到变态快,超 MySQL 801倍?

    原标题:ClickHouse为啥能做到变态快,超 MySQL 801倍? 阿里.腾讯.字节跳动这种大厂每天数据规模达到千亿.万亿级别,中小企业手里要是没点儿数据,根本不好意思说自己是互联网公司. 有数 ...

  9. 比MySQL快801倍,字节阿里争相 部署,真香!

    信息化时代,数据即价值.前瞻未来,数据价值的挖掘和沉淀是大数据领域重要的发展方向,是大数据广大开发工程师进阶的必备技能和职业素养. OLAP(Online Analysis Processing)联机 ...

  10. ClickHouse 来自战斗民族的OLAP利器

    # 什么是ClickHouse? ClickHouse是一个用于联机分析(OLAP)的列式数据库.列存这种设计可将同一列的数据存储在一起,不同列的数据也总是分开存储,更适合OLAP场景.早期有人简称它 ...

最新文章

  1. php object添加到数组,PHP Object转换为数组array
  2. Java微信公众号开发-外网映射工具配置 - 星星满天 - 博客园
  3. ad证书服务器在ADgroup,ACS 5.x :根据AD组成员配置示例和Authorization命令的TACACS+认证...
  4. Intel开发工具之VTune
  5. spring的部分注释
  6. tracepro中文pojie版-tracepro附安装教程
  7. 微信小程序-轮播图实现
  8. 2020-04-03-功能性光学脑成像
  9. 人脸识别门禁应用方案
  10. 不值一提?开源CRM是否值得应用
  11. 卸载奇安信天擎,流氓软件
  12. Pytorch训练问题:AssertionError: Invalid device id
  13. flea-db使用之JPA分库分表实现
  14. Java日期:今天,昨天,某一天,某一天的前一天
  15. 老少恋中的愉悦和不安
  16. 树莓派学习(三)基于OpenCv的人脸识别
  17. 蚂蚁金服通讯框架学习一
  18. Oracle修改用户名密码
  19. Android开发艺术探索——第十四章:JNI和NDK编程
  20. 使用innobackupex备份mysql数据库

热门文章

  1. 【Computeshader】个人总结
  2. 『 文件操作 』HTML文件转MD文件
  3. 28张高清数据分析全知识地图,强烈建议收藏
  4. 判断是否为回文——判断用户输入的字符串是否为回文。回文是指正反拼写形式都是一样的词,譬如“racecar”。
  5. hadoop3.3.0集群搭建(详细教程)
  6. 信息学奥赛一本通:1097:画矩形
  7. Nacos注册中心AP架构源码(Distro)上篇
  8. 关于微信各名词的英文翻译
  9. 美国程序员平均工资排行榜
  10. 【文献心得】关于内核在不同芯片平台移植的相关整理