什么是ClickHouse?

ClickHouse是一个面向列的数据库管理系统(DBMS),用于在线分析处理查询(OLAP)。

在“正常”面向行的DBMS中,数据按以下顺序存储:

换句话说,与行相关的所有值物理地彼此相邻地存储。

640?wx_fmt=png


面向行的DBMS的示例是MySQL,Postgres和MS SQL Server。


在面向列的DBMS中,数据存储如下:

640?wx_fmt=png

这些示例仅显示数据的排列顺序。不同列的值分别存储,同一列的数据存储在一起。



OLAP场景的关键属性


  • 绝大多数请求都是读取访问权限。

  • 数据以相当大的批次(> 1000行)更新,而不是单行更新; 或者它根本没有更新。

  • 数据已添加到数据库,但未进行修改。

  • 对于读取,从DB中提取了相当多的行,但只提取了一小部分列。

  • 表格“宽”,意味着它们包含大量列。

  • 查询相对较少(通常每台服务器数百个查询或每秒更少)。

  • 对于简单查询,允许延迟大约50毫秒。

  • 列值相当小:数字和短字符串(例如,每个URL 60个字节)。

  • 处理单个查询时需要高吞吐量(每台服务器每秒最多数十亿行)。

  • 交易不是必需的。

  • 对数据一致性要求低。

  • 每个查询有一个大表。所有表都很小,除了一个。

  • 查询结果明显小于源数据。换句话说,数据被过滤或聚合,因此结果适合单个服务器的RAM。



为什么面向列的数据库在OLAP场景中更好地工作

面向列的数据库更适合OLAP场景:它们在处理大多数查询时至少快100倍


  1. 对于分析查询,只需要读取少量表列。在面向列的数据库中,您只能读取所需的数据。例如,如果您需要100列中的5列,则可以预期I / O减少20倍。


  1. 由于数据以数据包形式读取,因此更容易压缩。列中的数据也更容易压缩。这进一步减少了I / O量。


  1. 由于I / O减少,更多数据适合系统缓存。



例如,查询“计算每个广告平台的记录数”需要读取一个“广告平台ID”列,该列占用未压缩的1个字节。如果大部分流量不是来自广告平台,则可以预期此列的压缩率至少为10倍。当使用快速压缩算法时,数据解压缩可以每秒至少几千兆字节的未压缩数据的速度进行。换句话说,可以在单个服务器上以每秒大约几十亿行的速度处理该查询。这种速度实际上是在实践中实现的。

640?wx_fmt=png



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值