几张图片来了解列存储

最近我看到了一个非常好的信息,里面的几句话伴随着几个数字就把列存储(Column-based Storage)讲清楚。牛啊!

最喜欢的就是这个很容易理解就会放亮清晰的白色背景。而不是谈论啰嗦的概念。

1 根据列存储为什么

列存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。

简单来说两者的差别就是怎样组织表(翻译不好,直接抄原文了):

?  Row-based storage stores atable in a sequence of rows.

?  Column-based storage storesa table in a sequence of columns.

以下来看一个样例:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGNfNzI2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

从上图能够非常清楚地看到。行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了。

所以它们就有了例如以下这些优缺点:


                             


行式存储


列式存储


长处


?  数据被保存在一起

?  INSERT/UPDATEeasy


?  查询时仅仅有涉及到的列会被读取

?  投影(projection)非常高效

?  不论什么列都能作为索引


缺点


?  选择(Selection)时即使仅仅涉及某几列,全部数据也都会被读取


?  选择完毕时,被选择的列要又一次组装

?  INSERT/UPDATE比較麻烦

注:关系型数据库理论回想 - 选择(Selection)和投影(Projection)



2补充:数据压缩

刚才事实上跳过了资料里提到的还有一种技术:通过字典表压缩数据。为了方面后面的解说,这部分也顺带提一下了。

以下中才是那张表本来的样子。经过字典表进行数据压缩后。表中的字符串才都变成数字了。正由于每一个字符串在字典表里仅仅出现一次了,所以达到了压缩的目的(有点像规范化和非规范化Normalize和Denomalize)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGNfNzI2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

3查询运行性能

以下就是最牛的图了,通过一条查询的运行过程说明列式存储(以及数据压缩)的长处:

关键过程例如以下:

1.     去字典表里找到字符串相应数字(仅仅进行一次字符串比較)。

2.     用数字去列表里匹配,匹配上的位置设为1。

3.     把不同列的匹配结果进行位运算得到符合全部条件的记录下标。

4.     使用该指数最终组装的结果集。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-15 00:20:51

几张图片来了解列存储的相关文章

行存储和列存储

传统的行式数据库将一个个完整的数据行存储在数据页中.这种方式在大数据量查询的时候会出现以下问题 1.在没有索引的情况下,会把一行全部查出来,查询会使用大量IO 2.虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间 但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的. 一般来说,OLTP(Online Transaction Processing,联机事务处理)应用适合采用这种方式. 一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只

Vertica: 基于DBMS架构的列存储数据仓库

介绍 Vertica(属 于HP公司),是一个基于DBMS架构的数据库系统,适合读密集的分析型数据库应用,比如数据仓库,白皮书中全名称为VerticaAnalytic Database.从命名中也可以看到,Vertica代表它数据存储是列式的,Analytic代表适合分析型需求,DB代表本身是数据库,支持 SQL. 优势 和传统关系型数据库系统以及其他列式数据(仓)库相比,Vertica存在下面三点最关键的优势. 列存储 Vertica对磁盘上的数据采用列式存储,显而易见,列存储可以在数据读取的

解读SQL Server 2014可更新列存储索引——存储机制

概述 SQL Server 2014被号称是微软数据库的一个革命性版本,其性能的提升的幅度是有史以来之最. 可更新的列存储索引作为SQL Server 2014的一个关键功能之一,在提升数据库的查询性能方面贡献非常突出.据微软统计,在面向OLAP查询统计类系统中,相比其他SQL传统版本的数据库,报表查询的性能最大可提升上十倍. 下面我们从存储的角度来了解下SQL Server 2014的可更新列存储索引. 什么是列存储 微软为了提升SQL Server的查询性能,更好的支持大数据分析,早在SQL

SQL Server 2016 —— 聚集列存储索引的功能增强

作者 Jonathan Allen,译者         邵思华         发布于     2015年6月14日 聚集列存储索引(CC Index)是SQL Server 2014中两大最引人瞩目的特性之一,设计为用于超过1千万条记录的数据表.使用者无需明确的指定索引,也能够保证分析式查询的优良性能. 但2014版本中的这一特性存在着一个缺陷,即使用者无法指定索引.虽然CC索引比起传统表的表扫描要快得多,但它还是及不上经手动调整的覆盖索引.因此,为了同时支持这两种模式,开发者不得不创建两张

SQL Server 2012笔记分享-9:理解列存储索引

优点和使用场景 SQL Server 内存中列存储索引通过使用基于列的数据存储和基于列的查询处理来存储和管理数据. 列存储索引适合于主要执行大容量加载和只读查询的数据仓库工作负荷. 与传统面向行的存储方式相比,使用列存储索引存档可最多提高 10 倍查询性能,与使用非压缩数据大小相比,可提供多达 7 倍数据压缩率. SQL 2012和SQL 2014列存储索引的比较 在SQL server 2012中,一旦启用了列存储索引,将不能够对已启用列存储索引的数据存储执行变更写入操作,也就是说列存储索引适

一种更高查询性能的列存储方式MaxMinT 第一部分

简介本文描述了一种列存储方式和对应的查询方法,这种存储方式具有更好的查询性能和更小的存储空间. And查询 本文先用直观的图形方式展示and查询时的方式,这也是算法要解决的问题核心.通常在OLAP数据查询时,需要进行and处理,例如你需要获取 year = 2017 and customer = 13 的数据,这在列存储中实际是对值 year的2017这个列和 customer的13列进行and操作,而这些列一般都使用位图的方式存储.市面上有很多位图的存储方式,比如WAH, EWAH, Conc

Hdfs的列存储和行存储

列可以分开存储,对于重复性高的数据压缩比会高,但是在元组(行shi)恢复会比较消耗性能 于传统列存储不同 是行组会存储于同一节点中,列扫描会比较快(因为只需扫描一个行组)

SQL Server 2016:内存列存储索引

作者 Jonathan Allen,译者 谢丽 SQL Server 2016的一项新特性是可以在"内存优化表(Memory Optimized Table)"上添加"列存储索引(Columnstore Index)".要理解这是什么意思,我们应该首先解释术语列存储索引和内存优化表.列存储索引是一种按照列而不是行组织数据的索引.每个数据块只存储一个列的数据,最多包含100万行.因此,如果数据为5列1000万行,那么就需要存储在50个数据块中.当只查询部分列时,这种数

如何在一个实例下并存行存储和列存储数据库

相关概念 BLU Acceleration BLU Acceleration 是 DB2 10.5 最新特性,与传统的行存储数据方式不同,数据是按照列来进行组织存储的,即采用列式存储.BLU 除了列存储表特性外,它的数据跳读,SIMD 和类哈弗曼的压缩算法等特性方便在内存中完成数据处理,简化并且加速了数据分析的工作量.同时不再需要索引.MQT 等,这样易于实施并可以自行调优,提高了 CPU 的使用率,以及降低了 IO. IBM Data Server Manager IBM 最新推出的管理多种平