首页 首页 大数据 查看内容

列式数据库的几大特点

木马童年 2019-5-16 22:11 11 0

最早的商业列式是在1995年发布的Sybase IQ,但是一直到1999年左右才慢慢稳定到能够投入生产环境。现在的大多数分析型都是在2003-2005年从Postgresql 分支出来的。其中尤其是Vertica 为代表的列已经在大规模数据仓库环 ...

最早的商业列式是在1995年发布的Sybase IQ,但是一直到1999年左右才慢慢稳定到能够投入生产环境。现在的大多数分析型都是在2003-2005年从Postgresql 分支出来的。其中尤其是Vertica 为代表的列已经在大规模数据仓库环境中证明其特别为数据仓库环境设计的思路在一些领域具有竞争优势。这篇文章解释介绍列式的几大特点。

高效的储存空间利用率

传统的行式由于每个列的长度不一,为了预防更新的时候不至于出现一行数据跳到另一个block 上去, 所以往往会预留一些空间。而面向列的数据库由于一开始就完全为分析而存在,不需要考虑少量的更新问题,所以数据完全是密集储存的。

行式为了表明行的id 往往会有一个伪列rowid 的存在。列式一般不会保存rowid.

列式数据库由于其针对不同列的数据特征而发明的不同算法使其往往有比行式数据库高的多的压缩率,普通的行式数据库一般压缩率在3:1 到5:1 左右,而列式的压缩率一般在8:1到30:1 左右。(InfoBright 在特别应用可以达到40:1 , Vertica 在特别应用可以达到60:1 , 一般是这么高的压缩率都是网络流量相关的)

列式数据库由于其特殊的IO 模型所以其数据执行引擎一般不需要索引来完成大量的数据过滤任务(Sybase IQ 除外) .这又额外的减少了数据储存的空间消耗。

列式数据库不需要物化视图,行式为了减少IO 一般会有两种物化视图,常用列的不聚合物化视图和聚合的物化视图。列式本身列是分散储存所以不需要第一种,而由于其他特性使其极为适合做普通聚合操作。(另外一种物化视图是不能实时刷新的,比如排名函数,不规则连接connect by 等等,这部分列数据库不包括。)

不可见索引

列式数据库由于其数据的每一列都按照选择性进行排序,所以并不需要行式里面的索引来减少IO 和更快的查找值的分布情况。如下图所示: 当执行引擎进行where 条件过滤的时候。只要它发现任何一列的数据不满足特定条件,整个block 的数据就都被丢弃。最后初步的过滤只会扫描可能满足条件的数据块。

列式数据库的几大特点

(from InfoBright : Blazing Queries Using an Open Source Columnar Database for High Performance Analytics and Reporting )

另外在已经读取了可能的数据块之后,对于类似age < 65 或 job = 'Axx' 的,列式并不需要扫描完整个block,因为数据已经排序了。如果读到第一个age=66 或者 Job = 'Bxx' 的时候就会停止扫描了。这相当与行式索引里的范围扫描。[page]

数据迭代 (Tuple Iteration)

现在的多核CPU 提供的L2 缓存在短时间执行同一个函数很多次的时候能更好的利用CPU 的二级缓存和多核并发的特性。而行式由于其数据混在一起没法对一个数组进行同一个简单函数的调用,所以其执行效率没有列式高。

压缩算法

列式由于其每一列都是分开储存的。所以很容易针对每一列的特征运用不同的压缩算法。常见的列式数据库压缩算法有Run Length Encoding , Data Dictionary , Delta Compression , BitMap Index , LZO , Null Compression 等等。根据不同的特征进行的压缩效率从10W:1 到10:1 不等。而且数据越大其压缩效率的提升越为明显。

延迟物化

列式由于其特殊的执行引擎,在数据中间过程运算的时候一般不需要解压数据而是以指针代替运算,直到最后需要输出完整的数据时。

列式数据库的几大特点

(from McKnight : Columnar Database : Data Does the Twist and Analytics Shout)

传统的行式运算, 在运算的一开始就解压缩所有数据,然后执行后面的过滤,投影,连接,聚合操作

而列式的执行计划却是这样的。

列式数据库的几大特点

(from McKnight : Columnar Database : Data Does the Twist and Analytics Shout)[page]

在整个计算过程中, 无论过滤,投影,连接,聚合操作,列式都不解压数据直到最后数据才还原原始数据值。这样做的好处有减少CPU 消耗,减少内存消耗,减少网络传输消耗,减少最后储存的需要。

列式数据库优缺点

列式数据库从一开始就是面向大数据环境下数据仓库的数据分析而产生,它跟行式相比当然也有一些前提条件和优缺点。

列式数据库优点:

极高的装载速度 (最高可以等于所有硬盘IO 的总和,基本是极限了)

适合大量的数据而不是小数据

实时加载数据仅限于增加(删除和更新需要解压缩Block 然后计算然后重新压缩储存)

高效的压缩率,不仅节省储存空间也节省计算内存和CPU.

非常适合做聚合操作。

缺点:

不适合扫描小量数据

不适合随机的更新

批量更新情况各异,有的优化的比较好的列式(比如Vertica)表现比较好,有些没有针对更新的表现比较差。

不适合做含有删除和更新的实时操作。

常见误区

一个常见的误区认为如果每次扫描较多行或者全列全表扫描的时候,行式比列式数据库更有优势。事实上这只是行式认识上的一个误区,即认为列式的主要优势在于其列分开储存,而忽略了列式上面提到的其他几大特征,这个才是列式高性能的核心。

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏多智时代,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

数据仓库 数据库 数据特征 数据储存 原始数据 网络传输
0
为您推荐
大数据技术改变城市的运作方式,智慧城市呼之欲出

大数据技术改变城市的运作方式,智慧城市呼

纽奥良虽像大多数城市一样有火灾侦测器安装计划,但直到最近还是要由市民主动申装。纽…...

大数据分析面临生死边缘,未来之路怎么走?

大数据分析面临生死边缘,未来之路怎么走?

大数据分析开始朝着营销落地,尤其像数果智能这类服务于企业的大数据分析供应商,不仅…...

什么是工业大数据,要通过3B和3C来理解?

什么是工业大数据,要通过3B和3C来理解?

核心提示:工业视角的转变如果说前三次工业革命分别从机械化、规模化、标准化、和自动…...

大数据普及为什么说肥了芯片厂商?

大数据普及为什么说肥了芯片厂商?

科技界默默无闻的存在,芯片行业年规模增长到了3520亿美元。半导体给无人驾驶汽车带来…...

大数据技术有哪些,为什么说云计算能力是大数据的根本!

大数据技术有哪些,为什么说云计算能力是大

历史规律告诉我们,任何一次大型技术革命,早期人们总是高估它的影响,会有一轮一轮的…...

个人征信牌照推迟落地,大数据 重新定义个人信用!!

个人征信牌照推迟落地,大数据 重新定义个

为金融学的基础正日益坚实。通过互联网大数据精准记录海量个人行为,进而形成分析结论…...