列式数据库是以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即时查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合于小批量的数据处理,常用于联机事务型数据处理。
优点:
-
极高的装载速度 (最高可以等于所有硬盘IO 的总和,基本是极限了)
-
适合大量的数据而不是小数据
-
实时加载数据仅限于增加(删除和更新需要解压缩Block 然后计算然后重新压缩储存)
-
高效的压缩率,不仅节省储存空间也节省计算内存和CPU。
-
非常适合做聚合操作。
缺点:
-
不适合扫描小量数据
-
不适合随机的更新
-
批量更新情况各异,有的优化的比较好的列式数据库(比如Vertica)表现比较好,有些没有针对更新的数据库表现比较差。
数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,例如以下的一个表:
EmpId
|
Lastname
|
Firstname
|
Salary
|
1
|
Smith
|
Joe
|
40000
|
2
|
Jones
|
Mary
|
50000
|
3
|
Johnson
|
Cathy
|
44000
|
这个简单的表包括员工代码(EmpId), 姓名字段(Lastname and Firstname)及工资(Salary).
行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。
1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;
列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。
1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000; 这是一个简化的说法。
不读取无效数据:降低 I/O 开销,同时提高每次 I/O 的效率,从而大大提高查询性能。查询语句只从磁盘上读取所需要的列,其他列的数据是不需要读取的。例如,有两张表,每张表100GB 且有100 列,大多数查询只关注几个列,采用列存储,不需要像行存数据库一样,将整行数据取出,只取出需要的列。磁盘 I/0 是行存储的 1/10或更少,查询响应时间提高 10 倍以上。
高压缩比:压缩比可以达到 5 ~ 20 倍以上,数据占有空间降低到传统数据库的1/10 ,节省了存储设备的开销。
当数据库的大小与数据库服务器内存大小之比达到或超过 2:1 (典型的大型系统配置值)时,列存的 I/O 优势
就显得更加明显;
GBase 8a 分析型数据库的独特列存储格式,对每列数据再细分为“数据包”。这样可以达到很高的可扩展性:无论一个表有多大,数据库只操作相关的数据包,性能不会随着数据量的增加而下降。通过以数据包为单位进行 I/O 操作提升数据吞吐量,从而进一步提高I/O效率。