什么是ClickHouse?

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

在传统的行式数据库系统中,数据按如下顺序存储:

Row WatchID JavaEnable Title GoodEvent EventTime
#0 89354350662 1 Investor Relations 1 2016-05-18 05:19:20
#1 90329509958 0 Contact us 1 2016-05-18 08:10:20
#2 89953706054 1 Mission 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: Investor Relations Contact us Mission
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 Matrix,Amazon Redshift)、 Sybase IQ、 Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb+。

不同的数据存储方式适用不同的业务场景,数据访问的场景包括:进行了何种查询、多久查询一次以及各类查询的比例;每种类型的查询(行、列和字节)读取多少数据;读取数据和更新之间的关系;使用的数据集大小以及如何使用本地的数据集;是否使用事务,以及它们是如何进行隔离的;数据的复制机制与数据的完整性要求;每种类型的查询要求的延迟与吞吐量等等。

系统负载越高,依据使用场景进行定制化就越重要,并且定制将会变的越精细。没有一个系统能够同时适用所有不同的业务场景。如果系统适用于广泛的场景,在负载高的情况下,要兼顾所有的场景,那么将不得不做出选择。是要平衡还是要效率?

OLAP场景的关键特征

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

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

列式数据库更适合OLAP场景的原因

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

行式

列式

看到差别了么?下面将详细介绍为什么会发生这种情况。

输入/输出

  1. 针对分析类查询,通常只需要读取表的一小部分列。在列式数据库中你可以只读取你需要的数据。例如,如果只需要读取100列中的5列,这将帮助你最少减少20倍的I/O消耗。
  2. 由于数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储这也更容易压缩。这进一步降低了I/O的体积。
  3. 由于I/O的降低,这将帮助更多的数据被系统缓存。

例如,查询«统计每个广告平台的记录数量»需要读取«广告平台ID»这一列,它在未压缩的情况下需要1个字节进行存储。如果大部分流量不是来自广告平台,那么这一列至少可以以十倍的压缩率被压缩。当采用快速压缩算法,它的解压速度最少在十亿字节(未压缩数据)每秒。换句话说,这个查询可以在单个服务器上以每秒大约几十亿行的速度进行处理。这实际上是当前实现的速度。

CPU

由于执行一个查询需要处理大量的行,因此在整个向量上执行所有操作将比在每一行上执行所有操作更加高效。同时这将有助于实现一个几乎没有调用成本的查询引擎。如果你不这样做,使用任何一个机械硬盘,查询引擎都不可避免的停止CPU进行等待。所以,在数据按列存储并且按列执行是很有意义的。

有两种方法可以做到这一点:

  1. 向量引擎:所有的操作都是为向量而不是为单个值编写的。这意味着多个操作之间的不再需要频繁的调用,并且调用的成本基本可以忽略不计。操作代码包含一个优化的内部循环。

  2. 代码生成:生成一段代码,包含查询中的所有操作。

这是不应该在一个通用数据库中实现的,因为这在运行简单查询时是没有意义的。但是也有例外,例如,MemSQL使用代码生成来减少处理SQL查询的延迟(只是为了比较,分析型数据库通常需要优化的是吞吐而不是延迟)。

请注意,为了提高CPU效率,查询语言必须是声明型的(SQL或MDX), 或者至少一个向量(J,K)。 查询应该只包含隐式循环,允许进行优化。

官方文档

官网tp直达-》》:    (点这里)

<<<可以顺手关注一波我的博客站呗top8488大数据    海量分享学习内容,资源。>>>>

ClickHouse中文官方文档相关推荐

  1. dubbo官方文档中文_Pandas中文官方文档:基础用法5

    本文授权转载自Python大咖谈禁止二次转载 大家好,我是老表 阅读文本大概需要 16 分钟 建议从头开始学习,本系列前四篇 Pandas中文官方文档:基础用法1 Pandas中文官方文档:基础用法2 ...

  2. python官方文档中文下载-python中文官方文档 PDF 下载

    Python 2 教程 Python是一门简单易学,功能强大的编程语言.它具有高效的高级数据结构和简单而有效的 面向对象编程方法.Python优雅的语法和动态类型以及其解释性的性质,使它在许多领域和 ...

  3. Dubbo中文官方文档

    Dubbo中文官方文档 由于市面并没有dubbo相关的书籍,最好的自学方式除了看教学视频就只能看官方文档了,小伙伴找不到中文官方文档的,可以用我的url,一起学习! http://dubbo.apac ...

  4. springboot中文官方文档

    springboot中文官方文档 https://www.breakyizhan.com/springboot/3028.html spring框架 https://www.breakyizhan.c ...

  5. opencv4.1中文官方文档

    我用阿里云盘分享了「opencv 4.1中文官方文档v1.1版.pdf」,你可以不限速下载

  6. Spring Framework 中文官方文档

    Spring Framework 中文官方文档 目前为最新版 5.3.11. 其他spring文档不断更新中 1.历史.设计理念.反馈.入门. Overview 2.IoC 容器.事件.资源.i18n ...

  7. k8s1.18多master节点高可用集群安装-超详细中文官方文档

    kubernetes安装系列文章 kubernetes1.17.3安装-超详细的安装步骤 安装kubernetes1.17.3多master节点的高可用集群 k8s1.18单master节点高可用集群 ...

  8. vue3.0(包含中文官方文档)

    vue3.0 官方文档 一.工程创建 1.安装node 2. 安装vue3.0 方式一:npm i -g @vue/cli 方式二:cnpm install -g @vue/cli 这个需要安装淘宝镜 ...

  9. qmake中文官方文档

    qmake QMake提供了一个用于管理应用程序,库,其他组件的构建过程的面向工程系统 QMake扩展了每个工程文件的信息,生成一个执行编译和连接过程的Makefile 本文翻译自Qt 4.8官方文档 ...

最新文章

  1. 37. 两个链表的第一个公共结点
  2. mysql+翻页性能,mysql 翻页优化
  3. Linux下LAMP环境的安装之编译安装过程(五)
  4. TensorFlow(三)常用函数
  5. 进程中的信号赋值与变量赋值
  6. oracle exp 00006,Oracle 12.1新特性----使用RMAN从备份中实现recover table
  7. php中sisson用法,thinkPHP中session()方法用法详解
  8. SPS2003升级到MOSS2007相关资料及问题总结
  9. jinja2模板注入_Flask jinja2 模板注入思路总结
  10. pip安装gluonts
  11. 千万不要被这些手机充电的谣言给误导了!现在了解还来得及
  12. HDU 1012 u Calculate e(简单阶乘计算)
  13. spring mvc controller间跳转 重定向 传参 (转)
  14. (day 11 - 模拟)剑指 Offer 29. 顺时针打印矩阵
  15. 数据提取软件----GetData
  16. 清理autodesk产品注册表_如何清理卸载Inventor产品
  17. PS Adobe软件使用 快捷键
  18. 算法岗和开发岗有什么区别?
  19. C盘扩容-Win10
  20. opencv-python Shi-Tomasi角点检测和特征追踪

热门文章

  1. 重庆师范大学计算机技术排名,2017年重庆师范大学专业排名
  2. {转帖]图纸A0,A1,A2,A3,A4实际尺寸是多少?长和宽怎么分
  3. Windows查看ios手机日志
  4. C# openfiledialog文件单选和多选
  5. 修改服务器后打印机,怎样改打印机服务器的ip地址
  6. 2020年书法落款_2020鼠年书法落款怎么写?
  7. HDU 5804 Price List(水~)
  8. 让人眼花缭乱的视错觉,太酷炫了!
  9. 远程控制软件开发_软件开发人员的远程工作
  10. golang web 服务器 request 与 response 处理