联机分析的列式数据库 clickHouse

              

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

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

RowWatchIDJavaEnableTitleGoodEventEventTime
#0893543506621Investor Relations12016-05-18 05:19:20
#1903295099580Contact us12016-05-18 08:10:20
#2899537060541Mission12016-05-18 07:38:00
#N

处于同一行中的数据总是被物理的存储在一起。

常见的行式数据库系统有:MySQLPostgresMS SQL Server

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

Row:#0#1#2#N
WatchID:893543506629032950995889953706054
JavaEnable:101
Title:Investor RelationsContact usMission
GoodEvent:111
EventTime:2016-05-18 05:19:202016-05-18 08:10:202016-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)。查询应该只包含隐式循环,允许进行优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网管小王的工具包

我是一名网管,工作主要是维护单位的网络线路和电话线路,今天闲来没事,把工具包中的工具show一下吧。笔记本电脑打线器,用来维修模块和打线用的两根长短不同的网线和一根电话线螺丝刀,什么扁口,十字花&#…

python回复邮件_在Python中通过Outlook回复电子邮件

我试图回复电子邮件与关键字在主题,但我需要做这一切通过outlook。我当前的代码可以正常工作,但是如果它可以直接回复而不是创建新消息,那就更好了。在希望这是问这个问题的正确地方:)outlook win32com.client.Dispatch("Ou…

.NET之生成数据库全流程

开篇语本文主要是回顾下从项目创建到生成数据到数据库(代码优先)的全部过程。采用EFCore作为ORM框架。本次示例环境:vs2019、net5、mysql创建项目本次事例代码是用过vs2019创建的ASP.NET Core Web API项目可以通过可视化界面创建或者通过命令行创建dotnet new webap…

delphi 7 学习步骤

delphi 7 学习步骤:先学做界面,主要是控件,之后学数据库连接方式ADO或者BDE,以及SQL语句,学完了这些再做个系统基本就入门了实践是最重要的,首先是掌握基本方法,然后自己取创意、逐个实现&#…

进军人工智能,数学基础很重要?

随着科技的快速发展,人工智能的重要性日渐显现。对于大多数新手来说,弄清楚入门人工智能需要哪些数学基础、需要熟悉什么框架等,都至关重要。机器学习是一个异常丰富的研究领域,有大量未解决的问题:公正、可解释性、易…

修改正文中参考文献标注_论文写作中怎样正确插入参考文献,引用文献如何标注?...

论文写作中怎样正确插入引文文献,引用文献如何标注?不管是大学毕业生还是期刊/评职称的我们在面对撰写论文时,参考文献的引用是必不可少的。参考文献的引用可以给论文增添很多的光彩。正确的在论文中引用参考问下你会在论文编写的同时省去很大…

.Net之多语言配置

开篇语首先非常感谢各位朋友或技术爱好者的关注。介绍支持多语言使网站可以覆盖更广泛的受众。ASP.NET Core 提供的服务和中间件可将网站本地化为不同的语言。本次示例环境:vs2019、net5配置无需引用Nuget包即可实现以下功能。注入容器services.AddLocalization(t &…

转载.Android HAL实现的三种方式(1) - 基于JNI的简单HAL设计

现在在Android上的HAL开发总的来说还是随意性比较大,Android也并没有规范好一个具体的框架,下面我将根据Jollen的Mokoid工程,自己做了一些改动,分别给大家介绍一下三种实现方式。 这篇先介绍最简单的一种实现方式 - Java应用程序直…

21张GIF动图让你秒懂数学原理

全世界有3.14 % 的人已经关注了数据与算法之美数学是很难的科学,但因为它是科学家用数学来解释宇宙的语言,我们无可避免的要学习它。看看下面的这些GIF动图,它们提供了视觉的方式来帮助你理解各种数学技巧。推荐阅读《12堂魔力数学课》。1.椭…

表格过滤器_记录和管理零散信息,什么软件比 Excel 表格更方便

SeaTable 的目标是帮助大家更好的组织和管理各种零散的信息,团队的请假信息就属于这样一类零散的信息。下面我们来看一下 ,SeaTable 相比于 Excel 是如何更好的帮助我们来组织和管理这样的信息的。用 Excel 记录的团队请假信息下面两张表是比较常见的请假…

使用 Source Generator 代替 T4 动态生成代码

使用 Source Generator 代替 T4 动态生成代码Intro在 Source Generator 出现之前有一些重复性的代码,我会使用 T4 去生成,这样就可以一定程度上避免复制粘贴和可维护性也会更好一些。在了解了一些 Source Generator 之后,就想尝试把现在项目里…

海量数据处理方法的分析

本文可以认为是http://blog.csdn.net/v_JULY_v/article/details/6279498的读后感,我是按照我理解的语言重新表述了一下而已。 海量数据处理的常用方法包括一下几种: 1.分而治之/hash映射 hash统计 堆/快速/归并排序;2.双层桶划分3.Bloom fi…

资料分享 | 数据挖掘实例资料分享来袭

小编从大学开始,便开启资料收集功能。随着大数据时代的来临,计算机发展进入新的阶段,再加上日常的深入研究,小编收集整理了丰富的数据挖掘资料,内容涵盖“程序”,“数据”、“文档”等。这次小编再次把所有…

修改图层的范围_【PS|第39期】数字绘画 使用填充图层

惟有悲观净化而成的乐观,才是真正的乐观。——尼采)填充图层是一种只承载纯色、渐变和图案的特殊图层,其特点是填充内容可以修改。另外,设置成不同的混合模式和不透明度后,可用于修改其他图层的颜色或生成图像混合效果。填充图层都…

我的注释那去了?

当我们用nuget引用三方库时,在类型,或类型成员上会有注释,如下图,是MySql官方包,command的ExecuteNonQuery的注释我们自己写一个类库项目CommentsLibrary,给类,构造函数,方法添加xml…

[原] jQuery EasyUI 1.2.6源码、Demo合集、离线API

下载地址: http://files.cnblogs.com/purediy/jquery-easyui-1.2.6.zip 兄弟版本: jQuery EasyUI 1.3.4 离线API、Demo jQuery EasyUI 1.3.2 离线API、Demo jQuery EasyUI 1.3.0 Demo合集、离线API、动态换肤 相信关注过jQuery UI 的大部分都查到过easyu…

ubuntu14安装python_ubuntu14.04 安装python3.7

下载源码:https://www.python.org/downloads/release/python-373/一、先安装需要的包zlib1g,libffisudo apt-get updatesudo apt-get install zlib1g-devsudo apt-get install libffi-dev二、在ubuntu上创建/usr/local/python3.7的目录,将压缩包放到该目…

CCNA第二章

第二章 交换机的基本概念和配置: Ethernet/802.3网络的关键要素: 载波侦听多路访问/冲突检测(CSMA/CD) CSMA/CD 仅用于集线器中常用的半双工通信。全双工交换机不使用 CSMA/CD。载波侦听:在 CSMA/CD 接入方法中&#x…

看书的一点小建议!

阅读本文大概需要6分钟。昨天看见小北写了一篇:「看书的一点小建议」,写的很不错,今天也分享一下自己看书的心得。其实不少读者问过我怎么看计算机经典大厚书、怎么看产品运营经典大厚书、怎么提高看书效率:电影教父里有台词&…

技巧:Excel用得好,天天没烦恼

全世界有3.14 % 的人已经关注了数据与算法之美Excel是Office三大神器当中最神秘、但也是最能提高你效率的工具了。而我们中的太多小伙伴,却一直把它当做是个“电子表格工具”。今天一起涨姿势,学会下面这些神技,你的Excel分分钟超过90%的同事…