列式数据库

定义

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

描述

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

EmpId Lastname Firstname Salary
1SmithJoe40000
2JonesMary50000
3JohnsonCathy44000

这个简单的表包括员工代码(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;

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

特点

因为硬盘寻址时间相较于计算机上其他部件的运行速度来说慢的不是一般,所以常用相同工作负载下的硬盘访问性能来比较行数据库和列数据库。通常,顺序读取数据要比随机访问更快[1]。而且,硬盘寻址时间的提升比起CPU速度的进步要慢得多 (参看 摩尔定律),在使用硬盘作为存储媒介的系统上这种情况很可能还会持续一段时间。


下面简单罗列了一些选择行数据库还是列数据库的权衡依据当然,如果能够把数据全放在内存中,那么使用内存数据库性能会更好。

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

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


列式数据库的代表包括:[HANA], [Sybase IQ]],ParAccelSand/DNA Analytics和 Vertica



     举例

编辑
下面以GBase 8a分析型数据库为例,描述列存储对数据存储与管理的作用。
[1]
面对海量数据分析的 I/O 瓶颈,GBase 8a 把表数据按列的方式存储,其优势体现在以下几个方面。
不读取无效数据:降低 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效率。
由于采用列存储技术,还可以实现高效的透明压缩。
由于数据按列包存储,每个数据包内都是同构数据,内容相关性很高,这使得GBase 8a 更易于实现压缩,压缩比 
通常能够达到 1:10 甚至更优。这使得能够同时在磁盘 I/O 和 Cache I/O 上都提升数据库的性能,使 GBase 8a 在某些场景下的运算性能比传统数据库快 100 倍以上。
GBase 8a 允许用户根据需要设置配置文件,选择是否进行压缩。在启用压缩的情况下GBase 8a 根据数据的不同特性以及不同的分布状况,自动采用相应的压缩算法,如:
行程编码(适用于大量连续重复的数据,特别是排序数据);
基于数据的差值编码(适用于重复率低,但彼此差值较小的数据列);
基于位置的差值编码(适用于重复率高,但分布比较随机的数据列)。

二  对比

1  行式更适合OLTP, 查询一个记录的所有列。
    列式更适合OLAP,非常适合于在数据仓库领域发挥作用,比如数据分析、海量存储和商业智能;涉及不经常更新的数据。由于设计上的不同,列式数据库在并行查询处理和压缩上更有优势。而且数据是以列为单元存储,完全不用考虑数据建模或者说建模更简单了。要查询计算哪些列上的数据,直接读取列就行。

2   列式在存储方面占有很大的优势,能有效提高数据压缩比,节省存储空间。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
行式数据库(Row-Oriented Database)和列式数据库(Column-Oriented Database)是两种常见的数据库数据存储模式,它们的设计理念和查询优化策略有所不同。 **行式数据库**: - **设计基础**:以格的形式存储数据,每一行代一条记录,每一一个属性或字段。 - **查询模型**:行式数据库通常按行进行查询,用户需要获取所有相关的字段信息,这在传统的关系型数据库(如MySQL, Oracle)中很常见。 - **优点**:对于事务处理和ACID一致性要求高的场景,以及复杂的SQL查询,性能较好。 - **缺点**:对于大数据分析,尤其是当需要扫描大量时,可能会遇到性能瓶颈,因为数据不是按照来组织的。 **列式数据库**: - **设计基础**:将数据分解并存储,每个都有自己的索引,便于对单进行并行处理和压缩。 - **查询模型**:列式数据库倾向于优化对单或多的扫描,适合于执行聚合操作和数据挖掘。 - **优点**:对于大数据分析和在线分析处理(OLAP)场景非常高效,查询速度更快,特别是对大量数据的聚合计算。 - **缺点**:写入操作可能较慢,因为每次更新都需要重新整理数据,且对于只读不写的场景下可能会显得过于复杂。 **相关问题**: 1. 举例说明何时会考虑使用列式数据库? 2. 行式数据库列式数据库数据压缩方面有何不同? 3. 列式数据库如何支持大规模数据的并行查询?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值