暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
ClickHouse Documentation Stub
291
429页
7次
2020-09-02
免费下载
什么是ClickHouse
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)
在传统的行式数据库系统中,数据按如下顺序存储:
row watchID JavaEnable title GoodEvent EventTime
#0 89354350662 1 投资者关系 1 2016-05-18 05:19:20
#1 90329509958 0 联系我们 1 2016-05-18 08:10:20
#2 89953706054 1 任务 1 2016-05-18 07:38:00
#N
处于同一行中的数据总是被物理的存储在一起。
常见的行式数据库系统有 MySQLPostgresMS SQL Server
在列式数据库系统中,数据按如下的顺序存储:
row: #0 #1 #2 #N
watchID: 89354350662 90329509958 89953706054
JavaEnable: 1 0 1
title: 投资者关系 联系我们 任务
GoodEvent: 1 1 1
EventTime: 2016-05-18 05:19:20 2016-05-18 08:10:20 2016-05-18 07:38:00
该示例中只展示了数据在列式数据库中数据的排列方式。
对于存储而言,列式数据库总是将同一列的数据存储在一起,不同列的数据也总是分开存储。
常见的列式数据库有: Vertica Paraccel (Actian MatrixAmazon Redshift) Sybase IQ Exasol Infobright InfiniDB MonetDB (VectorWise Actian
Vector) LucidDB SAP HANA Google Dremel Google PowerDrill Druid kdb+
不同的数据存储方式适用不同的业务场景,数据访问的场景包括:进行了何种查询、多久查询一次以及各类查询的比例; 种查询读取多少数据———行、列和字节;读取数
据和写入数据之间的关系;使用的数据集大小以及如何使用本地的数据集;是否使用事,以及它们是如何进行隔离的;数据的复制机制与数据的完整性要求;每种类型的查询要
求的延迟与吞吐量等等。
系统负载越高,依据使用场景进行定制化就越重要,并且定制将会变的越精细。没有一个系统能够同时适用所有明显不同的业务场景。如果系统适用于广泛的场景,在负载高的情
况下,要兼顾所有的场景,那么将不得不做出选择。是要平衡还是要效率
OLAP场景的关键特
大多数是读请求
数据总是以相当大的批(> 1000 rows)进行写入
不修改已添加的数据
每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列
宽表,即每个表包含着大量的列
较少的查询(通常每台服务器每秒数百个查询或更)
对于简单查询,允许延迟大约50毫秒
列中的数据相对较小: 数字和短字符(例如,每URL 60字节)
处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行
事务不是必须的
对数据一致性要求低
每一个查询除了一个大表外都很小
查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中
很容易可以看出,OLAP场景与其他通常业务场景(例如,OLTPK/V)有很大的不同, 此想要使用OLTPKey-Value数据库去高效的处理分析查询场景,并不是非常完美的适
方案。例如,使用OLAP数据库去处理分析请求通常要优于使MongoDBRedis去处理分析请求。
列式数据库更适合OLAP场景的原因
列式数据库更适合于OLAP场景(对于大多数查询而言,处理速度至少提高了100),下面详细解释了原因(通过图片更有利于直观理解)
行式行式
列式列式
看到差别了么?下面将详细介绍为什么会发生这种情况。
输入/输出
1. 针对分析类查询,通常只需要读取表的一小部分列。在列式数据库中你可以只读取你需要的数据。例如,如果只需要读取100中的5列,这将帮助你最少减少20I/O
耗。
2. 由于数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储这也更容易压缩。这进一步降低I/O的体积
3. 由于I/O的降低,这将帮助更多的数据被系统缓存。
例如,查询«统计每个广告平台的记录数量»需要读取«广告平ID»这一列,它在未压缩的情况下需1个字节进行存储。如果大部分流量不是来自广告平台,那么这一列至少可以
以十倍的压缩率被压缩。当采用快速压缩算法,它的解压速度最少在十亿字节(未压缩数据)每秒。换句话说,这个查询可以在单个服务器上以每秒大约几十亿行的速度进行处理。
这实际上是当前实现的速度。
CPU
由于执行一个查询需要处理大量的行,因此在整个向量上执行所有操作将比在每一行上执行所有操作更加高效。同时这将有助于实现一个几乎没有调用成本的查询引擎。如果你不
这样做,使用任何一个机械硬盘,查询引擎都不可避免的停止CPU进行等待。所以,在数据按列存储并且按列执行是很有意义的。
有两种方法可以做到这一点:
1. 向量引擎:所有的操作都是为向量而不是为单个值编写的。这意味着多个操作之间的不再需要频繁的调用,并且调用的成本基本可以忽略不计。操作代码包含一个优化的内
部循环。
2. 代码生成:生成一段代码,包含查询中的所有操作。
这是不应该在一个通用数据库中实现的,因为这在运行简单查询时是没有意义的。但是也有例外,例如,MemSQL使用代码生成来减少处理SQL查询的延迟(只是为了比较,分析
型数据库通常需要优化的是吞吐而不是延迟)
请注意,为了提高CPU率,查询语言必须是声明型的(SQLMDX) 者至少一个向(JK) 询应该只包含隐式循环,允许进行优化。
来源文章
ClickHouse用户
公司简介公司简介 行业行业 用例用例 群集大小群集大小 (Un)压缩数据大小压缩数据大 (of
single replica)
参考资料参考资料
2gis 地图 监测 俄文,20197
Aloha 浏览 移动应用
浏览器后
俄文幻灯片20195
阿玛迪斯 旅行 分析 闻稿,四月2018
Appsflyer 移动分析 主要产品 俄文,20197
ArenaData 数据平台 主要产品 俄文幻灯片,十二月2019
免责声
如下使用ClickHouse公司和他们的成功案例来源于公开资源,因此和实际情况可能有所出入。如果您分享您公司使用ClickHouse的故事,我们将不胜感激 将其添加到列将其添加到列
,但请确保你这样做不会有任何保密协议的问题。也欢迎提供来自其他公司的出版物的更新。
*
of 429
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜