导语:随着大数据的发展,现在出现的列式存储和列式数据库。它与传统的行式数据库有很大区别的。
正文:
行式数据库是按照行存储的,行式数据库擅长随机读操作不适合用于大数据。像SQL server,Oracle,mysql等传统的是属于行式数据库范畴。
列式数据库从一开始就是面向大数据环境下数据仓库的数据分析而产生。
数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,例如以下的一个表:
EmpId
|
Lastname
|
Firstname
|
Salary
|
1
|
Smith
|
Joe
|
40000
|
2
|
Jones
|
Mary
|
50000
|
3
|
Johnson
|
Cathy
|
44000
|
这个简单的表包括员工代码(EmpId), 姓名字段(Lastname and Firstname)及工资(Salary).
这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中,由操作系统写到内存或硬盘中。
行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。
1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;
列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。
1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000; 这是一个简化的说法。
列式数据库的代表包括:Sybase IQ,infobright、infiniDB、GBase 8a,ParAccel, Sand/DNA Analytics和 Vertica。
MPP的列存储数据仓库包括:Yonghong Z-DataMart。
---------------------------------------------------
---------------------------------------------------
通常行式数据库的给出的优化方案是加“索引”,给表分区等等之类的.
列式数据库的优缺点:
优点:
-
极高的装载速度 (最高可以等于所有硬盘IO 的总和,基本是极限了)
-
适合大量的数据而不是小数据
-
实时加载数据仅限于增加(删除和更新需要解压缩Block 然后计算然后重新压缩储存)
-
高效的压缩率,不仅节省储存空间也节省计算内存和CPU。
-
非常适合做聚合操作。
缺点:
-
不适合扫描小量数据
-
不适合随机的更新
-
批量更新情况各异,有的优化的比较好的列式数据库(比如Vertica)表现比较好,有些没有针对更新的数据库表现比较差。
-
不适合做含有删除和更新的实时操作。
补充列式数据库的压缩:
刚才其实跳过了资料里提到的另一种技术:通过字典表压缩数据。为了方面后面的讲解,这部分也顺带提一下了。
下面中才是那张表本来的样子。经过字典表进行数据压缩后,表中的字符串才都变成数字了。正因为每个字符串在字典表里只出现一次了,所以达到了压缩的目的(有点像规范化和非规范化Normalize和Denomalize)
列式数据库由于其特殊的执行引擎,在数据中间过程运算的时候一般不需要解压数据而是以指针代替运算,直到最后需要输出完整的数据时。
行式数据库主要适合于在线交易性的OLTP应用,而列式数据库主要适合于海量静态数据的分析,一般应用于OLAP。但只是依靠OLTP还是OLAP来区分是采用行式数据库还是列式数据库,在很多时候还不是很明确,特别很多时候有些应用很难说是OLTP还是OLAP,例如对海量数据的查询。
来源:https://www.cnblogs.com/sunShineJing/p/5512932.html