目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

ClickHouse

OLTP

全称 OnLine Transaction Processing,联机事务处理系统, 就是对数据的增删改查等操作。存储的是业务数据,来记录某类业务事件的发生,比如下单、支付、注册、等等。
典型代表有Mysql、 Oracle等数据库,对应的网站、系统应用后端数据库 针对事务进行操作,对响应时间要求高,面向前台应用的,应用比较简单,数据量相对较少,是GB级别的。
面向群体:业务人员

OLAP

当数据积累到一定的程度,需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取想要的信息,为公司做决策提供支持,这个就是做OLAP了。
OnLine Analytical Processing,联机分析处理系统,存储的是历史数据,对应的风控平台、BI平台、数据可视化等系统就属于OLAP。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策,并且提供直观易懂的查询结果
典型代表有 Hive、ClickHouse
针对基于查询的分析系统,基础数据来源于生产系统中的操作数据,数据量非常大,常规是TB级别的
面向群体:分析决策人员

OLAP 场景的关键特征

基本业务量到达这个分库分表量级,则离不开数据大屏、推荐系统、画像系统等搭建
需要搭建上面的系统,则离不开海量数据进行存储-分析-统计
海量数据下 TB、PB级别数据存储,靠Mysql进行存储-分析-统计无疑是灾难

• 绝大多数是读请求
• 数据以相当大的批次(> 1000 行)更新,而不是单行更新;或者根本没有更新。
• 已添加到数据库的数据不能修改。
• 对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
• 宽表,即每个表包含着大量的列
• 查询相对较少(通常每台服务器每秒查询数百次或更少)
• 对于简单查询,允许延迟大约 50 毫秒
• 列中的数据相对较小:数字和短字符串(例如,每个 URL 60 个字节)
• 处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
• 事务不是必须的
• 对数据一致性要求低
• 每个查询有一个大表。除了他以外,其他的都很小。
• 查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的 RAM 中

很容易可以看出,OLAP场景与其他通常业务场景(例如,OLTP或K/V)有很大的不同, 因此想要使用OLTP或Key-Value数据库去高效的处理分析查询场景,并不是非常完美的适用方案。例如,使用OLAP数据库去处理分析请求通常要优于使用MongoDB或Redis去处理分析请求。

列式数据库更适合 OLAP 场景的原因
列式数据库更适合于OLAP场景(对于大多数查询而言,处理速度至少提高了100倍),下面详细解释了原因(通过图片更有利于直观理解):

行式

列式

行式存储

传统的OLTP关系型数据库 都是行存储。
一行中的数据在存储介质中以连续存储形式存在。
适合随机的增删改查操作,或者在行中选取所有属性的查询操作,结合索引提升性能。

缺点
查询的全部记录的某几个字段,但由于这些字段在各行数据单元中,而整个行特别大(字段特别多),程序必须不断读取每一条的行记录取对应的字段,使得读取效率大大降低。

例子
找某个订单的话,就很方便,订单的全部信息都能获取
但找全部订单总金额就需要遍历多个数据

列式存储

存储结构化数据时,在底层的存储介质上,数据是以列的方式来组织
存储完若干条记录的首个字段后,再存储这些记录的第二个字段,然后再第三个字段、第四个字段...
查询时只有涉及到的列会被读取,而不需要全表扫描,可以显著减少IO消耗,并降低查询响应时间

缺点
列存储数据更新成本较高,一般适合读多写少的场景,适合 OLAP 分析型系统。

例子
查询全部成交额,只需要把订单金额拿出来即可

行/列存储对比

  • 行/列存储描述的是底层存储介质上,数据的组织形式,哪种组织对应哪种业务需求
  • 列存储在聚合、统计等操作性能会优于行存储
  • 列存储将多行记录的列连续存储在一起,一列接着一列
  • 列式存储是同个数据类型,会进行数据压缩率更高更省空间
  • 列存储数据更新成本较高,一般适合读多写少的场景,适合 OLAP 分析型系统

ClickHouse

特点
• 不依赖 Hadoop 生态、安装和维护简单
• 擅长对列的聚合、计数等统计操作性能强劲
• 对列存储和压缩的采用更好的算法,更好节省成本
• 拓展性强,在生产中经过实战测试,从单服务器部署到具有数千个节点的集群的线性水平可扩展性
• 具有企业级安全功能和故障安全机制,可防止数据因应用程序错误和人为错误而损坏
• 支持主流的大部分 SQL 语法和函数
• 吞吐能力强,官方测试支持,支持多种存储引擎,满足多数业务场景

应用场景
• 互联网电商
• 在线教育
• 金融等领域用
• 户行为数据记录和分析
• 搭建数据可视化平台

性能对比

有谁在用
• 国内:阿里、字节、腾讯 、虎牙、青云、新浪等
• 国外:优步、Ebay、Spotify、思科、等

支持多种部署方式
• Linux:源码部署、Docker 部署
• Window:安装 Docker、安装 Linux 虚拟机


作者:Soulboy