列式数据库

本页使用了标题或全文手工转换,现处于中国大陆简体模式
求闻百科,共笔求闻

列式数据库Column-oriented DBMS)是以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即时查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合于小批量的数据处理,常用于联机事务型数据处理。

描述

数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,如下表:

RowId EmpId Lastname Firstname Salary
001 10 Smith Joe 40000
002 12 Jones Mary 50000
003 11 Johnson Cathy 44000
004 22 Jones Bob 55000

这个简单的表包括员工编号(EmpId)、姓名字段(Lastname and Firstname)及工资(Salary).

这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中,由操作系统写到内存或硬盘中。

列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。

10:001,12:002,11:003,22:004;
Smith:001,Jones:002,Johnson:003,Jones:004;
Joe:001,Mary:002,Cathy:003,Bob:004;
40000:001,50000:002,44000:003,55000:004; 

行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。

001:10,Smith,Joe,40000;
002:12,Jones,Mary,50000;
003:11,Johnson,Cathy,44000;
004:22,Jones,Bob,55000;

这只是一个简化的说法。此外,partitioning, 索引, 缓存机制, 视图, 联机分析多维数据集, 以及诸如 预写式日志多版本并发控制 此类的事务系统都在现实的应用环境中发挥作用。一般来说, 侧重于联机事务处理 (OLTP) 的系统更适用行式数据库, 而侧重于联机分析处理 的系统就必须在行式数据库和列式数据库中找到适当得平衡。

特点

因为硬盘寻址时间相较于计算机上其他部件的运行速度来说不是一般的慢,所以常用相同工作负载下的硬盘访问性能来比较行式数据库和列式数据库。通常,顺序读取数据要比随机访问更快[1]。而且,硬盘寻址时间的提升比起CPU速度的进步要慢得多 (参看 摩尔定律),在使用硬盘作为存储介质的系统上这种情况很可能还会持续一段时间。下面简单罗列了一些选择-{zh-cn:行式数据库; zh-tw:列式存储}还是列式数据库的权衡依据。当然,如果能够把数据全放在内存中,那么使用内存数据库性能会更好。

  1. 在只需要根据某几列来聚合数据的时候按列的数据组织方式更有效。因为这样只需要读取一部分数据,要比读取全部数据更快。
  2. 当只需要修改某一列值的时候按列的数据组织方式更有效。因为可以直接找到某列数据并修改,而与行中的其他列无关。
  3. 当需要某行的多列数据的时候按行的数据组织方式更有效。当行中数据不是太多的情况下一次硬盘寻址就可以获得该行的所有数据。
  4. 在新增行数据的时候,如果各列都有值,那么按行的数据组织方式会更有效,因为只需要一次硬盘寻址就可以写入整行的全部数据。

在实际应用中,面向行的数据存储架构更适用于OLTP-频繁交互事务的场景。面向列的数据存储架构更适用于OLAP-(如数据仓库)这样在海量数据((可能达到 terabyte规模))中进行有限复杂查询的场景。

实现

列式数据库的代表包括:SAP HANAAmazon RedshiftSybase IQParAccelSand/DNA AnalyticsVerticaAster Data Systemsgreenplum等。

参见

引用

  1. The Star Schema Benchmark and Augmented Fact Table Indexing , Pat & Betty O’Neil, Xuedong Chen and Stephen Revilak, TPC Technology Conference 8/24/09