MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 3174|回复: 0

列式数据库介绍

[复制链接]
发表于 2016-10-30 13:45:59 | 显示全部楼层 |阅读模式
[size=1.6em]列式数据库
定义

[size=1.15em]列式数据库是以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即席查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合于小批量的数据处理,常用于联机事务型数据处理。
描述
[size=1.15em]数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,例如以下的一个表:
EmpId
Lastname
Firstname
Salary
1SmithJoe40000
2JonesMary50000
3JohnsonCathy44000
[size=1.15em]这个简单的表包括员工代码(EmpId), 姓名字段(Lastname and Firstname)及工资(Salary).
[size=1.15em]这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中,由操作系统写到内存或硬盘中。
[size=1.15em]行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。
      1,Smith,Joe,40000;      2,Jones,Mary,50000;      3,Johnson,Cathy,44000;

[size=1.15em]列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。
      1,2,3;      Smith,Jones,Johnson;      Joe,Mary,Cathy;      40000,50000,44000;
[size=1.15em]这只是一个简化的说法。此外,partitioning, 索引, 缓存机制, 视图, 联机分析多维数据集, 以及诸如 预写式日志multiversion concurrency control 此类的事务系统都在现实的应用环境中发挥作用。一般来说, 侧重于联机事务处理 (OLTP) 的系统更适用行数据库, 而侧重于联机分析处理 的系统就必须在行数据库和列数据库中找到适当得平衡。
特点
[size=1.15em]因为硬盘寻址时间相较于计算机上其他部件的运行速度来说慢的不是一般,所以常用相同工作负载下的硬盘访问性能来比较行数据库和列数据库。通常,顺序读取数据要比随机访问更快[1]。而且,硬盘寻址时间的提升比起CPU速度的进步要慢得多 (参看 摩尔定律),在使用硬盘作为存储媒介的系统上这种情况很可能还会持续一段时间。

下面简单罗列了一些选择行数据库还是列数据库的权衡依据。当然,如果能够把数据全放在内存中,那么使用[size=1.15em]内存数据库性能会更好。
  • 只需要根据某几列来聚合数据的时候按列的数据组织方式更有效。因为这样只需要读取一部分数据,要比读取全部数据更快.
  • 只需要修改某一列值的时候按列的数据组织方式更有效。因为可以直接找到某列数据并修改,而与行中的其他列无关。
  • 当需要某行的多列数据的时候按行的数据组织方式更有效。当行中数据不是太多的情况下一次硬盘寻址就可以获得该行的所有数据。
  • 在新增行数据的时候,如果各列都有值,那么按行的数据组织方式会更有效,因为只需要一次硬盘寻址就可以写入整行的全部数据.
[size=1.15em]在实际应用中,面向行的数据存储架构更适用于OLTP-频繁交互事务的场景。面向列的数据存储架构更适用于OLAP-(如数据仓库)这样在海量数据((可能达到 terabyte规模))中进行有限复杂查询的场景。
[size=1.15em]
列式数据库的代表包括:[HANA], [Sybase IQ]],ParAccel, Sand/DNA AnalyticsVertica



     举例编辑下面以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 根据数据的不同特性以及不同的分布状况,自动采用相应的压缩算法,如:
行程编码(适用于大量连续重复的数据,特别是排序数据);
基于数据的差值编码(适用于重复率低,但彼此差值较小的数据列);
基于位置的差值编码(适用于重复率高,但分布比较随机的数据列)。



您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-6-18 04:54 , Processed in 0.065352 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表