介绍列式存储和行式存储的不同

12月 16th, 2015

随着HANA的诞生,我们可以看到有一个新的内容出现,即—列式存储。那么什么是列式存储呢?相比较传统行式存储来说,列式存储的好处是什么?接下来的内容,我们来一起探讨下。

首先我们先举一个例子,假设有一张表:这个表格包括了员工ID,员工名字,性别及其年纪。

ID

NAME

Gender

AGE

1

Mary

F

20

2

Bill

M

24

3

Joe

F

40

4

Kenny

M

35

传统的行式存储把一行中的数据值串在一起存储起来,然后再存储下一行数据,

以此类推,直到读完整张表。

按照这个表来看,在内存或硬盘里将以如下方式排列

1,Mary,F,20,2,Bill,M,24,3,Joe,F,40,4,Kenny,M,35;

那么在列式存储中,是怎么样的呢?会按照每一列进行存储。

1,2,3,4,Mary,Bill,Joe,Kenny,F,M,F,M,20,24,40,35;

从上面的排列顺序我们可以得出如下结论:

列式存储: 每一列单独存放,数据即是索引。如果我们想访问单独一列(比如NAME)会相当迅捷。

在HANA的世界中,并不是只存在列式存储,行式存储也是存在的。那么读者不经要问

什么时候应该使用行式存储?什么时候应该使用列式存储呢?

如果你大部分时间都是关注整张表的内容,而不是单独某几列,并且所关注的内容是不需要通过任何聚集运算的,那么推荐使用行式存储。原因是重构每一行数据(即解压缩过程)对于HANA来说,是一个不小的负担。

列式存储的话,比如你比较关注的都是某几列的内容,或者有频繁聚集需要的,通过聚集之后进行数据分析的表。

详细归纳为如下:

选择HANA列式存储

 

基于一列或比较少的列计算的时候

经常关注一张表某几列而非整表数据的时候

数据表拥有非常多的列的时候

数据表有非常多行数据并且需要聚集运算的时候

数据表列里有非常多的重复数据,有利于高度压缩

选择HANA行式存储

关注整张表内容,或者需要经常更新数据

需要经常读取整行数据

不需要聚集运算,或者快速查询需求

数据表本身数据行并不多

数据表的列本身有太多唯一性的数据

下面通过一个例子来看下,同样一张表在行式存储和列式存储下所占用的磁盘空间。

从下图不难看出,在列式存储下(Column Store)Size on Disk大约88,948KB。

image

那么行式存储(Row Store)的对比结果如下图所示, Size on Disk是237,191KB。

clip_image002

接下来我们来看下,在HANA Studio里如何行式列式数据表如何相互转换

第一种方法:

1. 双击要转换的表,或者选中数据表然后点鼠标右键,选择“显示表定义”(Open Definition)

2. 在空白区域右键,然后选择“修改”(Edit)

3. 改变数据表类型。

image

第二种方式是,通过SQL语句来进行转换

alter table "SFLIGHT" ."SBOOK" column SBOOK表从行转列

alter table "SFLIGHT" ."SBOOK" row SBOOK表从列转行

标签: , ,
本文的评论功能被关闭了.