1.定义1.1.定义Sybase在2004年左右就推出了列存储的Sybase IQ数据库系统,主要用于在线分析、数据挖掘等查询密集型应用。
列存储,缩写为DSM,相对于NSM(N-ary storage model),其主要区别在于:DSM将所有记录中相同字段的数据聚合存储;NSM将每条记录的所有字段的数据聚合存储;1.2.优点列存储的主要优点有两个:1) 每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,据C-Store, MonetDB的作者调查和分析,查询密集型应用的特点之一就是查询一般只关心少数几个字段,而相对应的,NSM中每次必须读取整条记录;2) 既然是一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩/解压算法。
1.3.场合列存储适合用在什么场合?OLAP,数据仓库,数据挖掘等查询密集型应用。
当然,列存储数据库并不是说完全不能进行更新操作,其实它们的更新操作性能并不是很差,一般也够用,但是一方面不如自己的查询性能,另外一方面也不如Oracle这种专门搞OLTP的数据库,所以一般就不提这个。
列存储不适合用在什么场合?相对来说,不适合用在OLTP,或者更新操作,尤其是插入、删除操作频繁的场合。
2.sysbase iq 列存储介绍2.1.列存储不同于传统的关系型数据库,其数据在表中是按行存储的,Sybase IQ是通过表中的列来存储与访问数据的。
尽管这种方式很明显的不太适合于交易环境,在交易环境中,一个事务与一行数据有效对应,而在查询进程环境中,很显然,查询是基于特定的列来选择的。
列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。
事实上,情况并不象上述的这样简单,Sybase IQ有各种方法支持基于列的索引,我们将在下面就此讨论。
使用列方法的另一个结果就是,Sybase IQ在压缩方面比传统的关系型数据库更加有效(根据Sybase所称,效果可达5倍之好)。
这个原因,无疑说,是由于同一列中的所有数据域有相同的数据类型。
因此,每一列都可以为优化的效率与检索进行压缩。
相比来讲,基于行的存储,各个不同的域拥有各不相同的数据类型,这非常适合于交易进程。
在这样的环境中,不断变换理想的压缩算法是不可行的,这意味着任何压缩都将可能是一种最低通用的规则。
基于列的方法的另一个重要优势完全基于所有读出的数据量。
无论何时你从传统的数据库中访问数据,你需要读出完整的每一行,而不管你实际所感兴趣的是哪些域。
实际上,这可能意味着读300个字节的数据仅仅检索20个字符的数据。
但是,基于列来读取数据,你仅仅需要读出你想要了解的数据。
当然,读取一条单独的记录时,性能上的不同可以忽略,但是许多查询需要进行全表扫描。
当读取数百万行数据时,性能的不同就会非常显著。
Sybase认为,Sybase IQ的列存储天然的比普通的ROLAP方法提供更佳的性能,IQ不需要象多数竞争对手或者Sybase Adaptive Server Enterprise(ASE)一样支持硬件的并行处理。
尤其是,Sybase指出,与数据分区相关的问题就是需要支持硬件的并行机制。
显而易见,不论如何进行分区,分区都会带来很多问题(更不必说额外的维护了),不过,它打开了性能改进的实质性途径。
然而,Sybase 进一步阐述道,这仅仅是对基于行的方法所与生俱来的糟糕性能的一种补偿机制。
Sybase有很多事实支持它的论断,但这并不意味着Sybase避免任何形式的数据分区。
然而,不同于水平分区,Sybase IQ实施的是垂直分区,也就是说分区是按照列而不是按照行进行的。
该方法的优势之一是分区从来不会变得不均衡,这是由于每个表中的每列都有相同数量的域。
这大大降低了管理分区的维护需求,同时消除了数据库的重新组织,而在分区变得不均衡从而开始影响性能的时候,数据库重新组织是必需进行的。
最后,需要注意的是,Sybase IQ并没有避免使用OLAP。
对于那些希望在聚合层次下以一个相对预先定义的方式进行查询的用户来讲,OLAP具有明显的优势。
基于此,Sybase 支持OLAP功能属性如排列、百分比、平均。
2.2.数据压缩传统的数据库引擎不能以一种通用的方式进行数据压缩,主要是由于存在以下三个问题:1. 按行存储的数据存储方式不利于压缩。
这是因为数据(大多为二进制数据)在以这种方式存储时重复并不多。
我们发现,按行存储的数据,最多能有5-10%的压缩比例;2. 对于许多2K 和4K 的二进制数据页来说,为压缩和解压缩而增加的开销太大;3. 在OLTP 环境中,大量读取和更新混杂在一起。
每一次更新需要进行压缩操作,而读取只需解压缩操作,大多数的数据压缩算法在压缩时比解压缩时慢4 倍。
这一开销将明显降低OLTP 数据库引擎的事务处理效率而使得数据压缩的代价昂贵到几乎不能忍受。
在数据仓库应用中,数据压缩可以用小得多的代价换取更大好处。
其中包括减少对于存储量的要求;增大数据吞吐量,这相当于减少查询响应时间。
Sybase IQ 使用了数据压缩。
这是由于数据按列存储,相邻接的字段值具有相同的数据类型,其二进制值的范围通常也要小得多,所以压缩更容易,压缩比更高。
Sybase IQ 对按列存储的数据通常能得到大于50%的压缩。
更大的压缩比例,加上大页面I/O,使得Sybase IQ在获得查询的优良性能的同时,减少了对于存储空间的需求。
在传统的数据库中,为提高查询性能所建立的索引占用的磁盘空间往往需要比数据本身需要的磁盘空间多出3-10倍。
而Sybase IQ 存储数据所占用的磁盘空间通常只是原数据文件的40%-60%,是传统数据库所占用空间的几分之一。
Sybase IQ与传统数据库在数据压缩方面的典型对比智能压缩技术,与精巧的索引结构和列存储结合,给了IQ 比其他数据库引擎高的多的存储效果。
这将获得更低的存储成本与更高的性能(因为系统仅需很少的磁盘I/O读取或写入任何给定的数据库块)。
2.3.索引Sybase IQ的秘密在于其索引。
随着Sybase 客户发现了新的分析需求,Sybase 可以简捷地建立新的索引以满足这些需求。
这种方法的奇妙之处在于为数据仓库增加新的索引几乎不会(即使有也是微乎其微)影响数据仓库的架构或使用仓库的分析型应用。
在实时企业与闭环应用领域,Sybase将索引视为在TB数量级(将来)甚至PB数量级数据仓库中获得更高查询性能的关键。
今天,Sybase实际上已使用了如下几种种索引机制:2.3.1.Low Fast 索引这些是低基数索引,它使用一个被称之为“代号化”的进程。
使用该进程,数据被转换为代号,然后存储这些代号而不是数据。
这对于减少冗余数据的数量尤其有用。
例如,在整个英国拥有大量客户群的公司,将需要存储客户的地址。
这将意味着巨大数量的重复的郡的名称。
因此,不是保存大量的“班夫郡”的实例,例如,Sybase将会用一个数字代替每个郡的名称。
因此,由于班夫郡按照拼音排列在英国是第5个郡(排在Aberdeen,Armagh,Avon与Ayrshire之后)因此,它可能就会被设值为5。
如果一个列包含一个数字值,该值自身可以用于代号化的基础。
一旦建立了代号(这是一个自动进行的进程),一个位图索引将被建立以表示这些代号。
代号化典型地应用于列数据存在有限数量的可能取值。
这也是为什么Sybase称之为低基数索引的原因,典型的,它仅用于不同的取值个数在1500以内的域。
2.3.2.Bit-Wise索引对于高基数的域,那些取值个数超过1500个(如金额值),Sybase使用其专利的被称之为Bit-Wise索引.这在你希望在范围搜索的时候同时进行计算的情况下,尤为有用,例如,查找销售价格低于50欧元的货品数量及总收入。
如同位图的其他变量,该方法的优势之一就是计数(count)查询可以直接通过读取索引获得答案,而无需读取数据。
2.3.3.High Group索引实际上,它是B-树索引。
然而,此处的原则是,用户仅仅在几个列有可能作为一个组来使用的情况下,尤其是高基数与低基数的联合搜索时,才定义这些索引。
比如可能有这样的例子,按照商店(低基数)查询产品销售清单与价格(高基数)。
2.3.4.Fast Projection 索引该索引类型(缺省的)就是列存储本身。
如果用户总是打算检索整个列的数据,则列存储事实上意味着列可以直接映射到表或查询中,而无需显式的定义任何索引。
这非常有用,例如在“Where”从句中。
2.3.5.Word 索引这是一个文本索引。
它基于关键词或短语字符串搜索。
这种类型的索引,历史上一直没有用于数据仓库中。
然而,它有着大量重要的市场,在这些市场上,能够联合定量与定性的分析非常重要。
例如,在医疗横业,医生的诊断通常就是:笔记。
为了获取信息,例如发病率,因此可能必须访问这种非结构化的数据。
pare索引这个索引技术允许数据列的比较,从效果上讲,类似于“if…then…else”表达式。
例如,“if支出大于收入,then…”。
该类型的索引对于在Web应用中实时比较尤其有用。
2.3.7.Join 索引正如索引的名称所示,它是为消除表连接的需要而设计的。
正象大多支持索引的情况,它可能在预先已知的查询需求下更为有用。
2.3.8.Time Analytic 索引这为基于日期、时间、日期与时间建立索引提供了选项。
需要注意的是,对于传统的关系型数据库,处理基于时间的查询尤为困难。
大量扩展工具用以支持在各种情况下使用这些索引。
这包括为减少硬盘(或内存——位图可能存在缓冲中)需求的索引压缩,联合使用不同类型索引的能力,以及使用布尔操作如AND与OR过滤比特队列等。
这些特性表明,Sybase IQ克服了传统的位图的缺陷,即不适合于表连接或数据聚合。
Sybase IQ在最近发布的版本中增加了一个索引顾问(Index Advisor),这一点尤其令人欢欣:这将建议管理员何时应该增加新的索引以及增加那种类型的索引。
3.行列存储比较将表放入存储系统中有两种方法,而我们绝大部分是采用行存储的。
行存储法是将各行放入连续的物理位置,这很像传统的记录和文件系统。
然后由数据库引擎根据每个查询提取需要的列。
列存储法是将数据按照列存储到数据库中,与行存储类似;3.1.基于行的储存基于行的存储是将数据组织成多个行,这样就能在一个操作中找到所有的列。
这种做法的缺点是必须每次处理一整行,而不是只处理自己需要的列。
不过,这样在处理相同实体的两个或多个列的查询时能够取得更快的速度,而且可以提高更新、插入和删除操作的速度。
基于行的存储系统可以进行并行处理,并且不需要模仿顺序文件系统,尽管有许多产品仍然在这样做。