李石锋的专栏

-BI学习之路

Sybase IQ介绍

一、Sybase IQ介绍
Sybase IQ是与Adaptive
Server Enterprise (ASE),Sybase Adaptive Server Anywhere (ASA),Microsoft SQL Server,Oracle和IBM DB2等一样的关系型数据库管理系统(DBMS),Sybase IQ最初是Expressway公司作为查询加速器推出的。Sybase收购了该产品,最初是希望能集成到Sybase ASE中,但后来发现其技术作为独立的数据仓库产品更有市场。
Sybase IQ的技术特性和特点对于许多类型的查询性能比传统的关系型数据引擎更有优势,特别是对于大量的即席查询(非预定义的查询)。这些优势得益于一点:Sybase IQ完全是为决策支持数据库设计的,并不只是简单地为OLTP数据库添加决策支持功能。Sybase IQ的技术特性包括:位图化索引,按列存储(不同于传统数据库的按行存储),比其他数据库更强的数据压缩能力,以及与众不同的锁机制。所有这些都极大地提高了查询引擎的性能。

第一个特点,即Sybase IQ的位图化索引--为区别于其他数据库,在IQ的技术文档中被称为bitwise索引, Sybase把IQ位图技术叫做bitwise索引以区别于其他数据库。因为有些其他数据库产品也拥有或正在开发位图化索引类型,但据我们了解,其他这些数据库的位图化索引类似于Sybase IQ的对低基数数据字段查询非常有效的LowFast (LF)索引。而Sybase IQ还拥有两种用于其他目的的位图化索引-- HighNonGroup (HNG)和HighGroup,这两个索引对高基数数据非常有效。以上这些位图化索引是Sybase的专利。第四种索引类型--Fast Projection (FP)索引,即在Sybase IQ的文档中被称为缺省的索引类型,尽管应用了部分Sybase IQ的bitwise索引技术,但并不是位图化索引。还有两个在12.5版本后增加的特殊的位图化索引--Compares (CMP)索引和Word (WD)索引,CMP索引是用于加速内部字段比较的特殊的位图化索引;WD索引是用于在字符串中快速查找字词。Sybase IQ 12.6还增加了三个和时间相关的位图化索引:DATE、TIME和DATETIME索引,用于处理WHERE条件中与日期和时间类型相关的数据。

另一个和数据库引擎相关的特点是如何存储数据。大部分传统的数据库是建立一个数据基本表,然后按顺序存储每行数据,在其上建立索引。
实际上,传统数据库中基本表的记录在Sybase IQ中是不存在的,他们存在于目录表中(catalog)。可以把Sybase IQ想象为表的数据是垂直分割,而不是水平分割的。具体来说就是Sybase IQ把基本表的元数据信息存储在目录存储空间(catalog store)中,在Sybase IQ存储空间(IQ store)中为每个字段建立缺省的FP索引,而且Sybase IQ只存储索引并不按行存储表的基础数据
Sybase IQ即可以像传统的索引一样利用这些索引查询,也可以像基础表的字段一样作为数据源访问基础数据。Sybase IQ中的每个查询只需要读查询语句中涉及的字段的信息,不必像传统数据库那样访问表中的所有字段
FP索引就像基础表的垂直分区,但对于Sybase IQ的查询引擎来说是和其他索引一样的--对某些操作能加快查询速度,某些不能。Sybase IQ从外表看就像其他的关系型数据—其特殊的物理结构和复杂索引被封装了起来,对外为用户提供了标准的SQL界面。

第三个非常有用的特性是Sybase IQ压缩数据的能力非常好。实际上,Sybase IQ数据库在完全索引的情况下只占ASCII裸数据大小的50%到120%,同样情况下其他数据库往往需要几倍的ASCII裸数据空间。Sybase IQ的这一压缩能力不但可以节约空间还可以带来查询性能上的优势。Sybase IQ使用多种压缩技术。一方面,通过数据压缩使Sybase IQ在一个页面上可以比传统数据库存储更多的数据;另一方面,一页上存储了更多的数据可以减少磁盘I/O,节约磁盘带宽。

还有一个特性是Sybase IQ的锁机制。大部分数据库使用行或页级锁,即在读写事务中用户会锁住一页,该模式会引起写访问妨碍其他查询访问读取数据或者读访问妨碍其他写用户的数据增、删、改。
Sybase IQ通过使用版本(versioning)的锁模式,该模式虽然会影响并发写操作,但写操作不会影响读操作,读操作也不会影响写操作。

换句话说,即使数据库管理员在做大数据量的批数据写入和删除操作,查询也可以随时提交并被执行。同样地,对一张表作运行很长时间的决策支持查询也不会影响向该表中插入新的数据。Sybase IQ采用表级版本--这有点像表级锁。表级版本使Sybase IQ的批量插入和删除操作的性能更好。 
除了以上这些特性和Sybase IQ与其他数据库的不同点(这些不同点使Sybase IQ成为大部分即席查询类的决策支持应用的最佳引擎),
Sybase IQ也具有多其他数据库共同具有的特点。Sybase IQ的索引一旦建立完成,就和其他数据库一样提供表和数据的访问能力。可以像其他数据库一样产生数据行,这些行用于处理如表间的即席连接、分组、排序、字符串和数学函数等等。随后数据被按行处理,Sybase IQ使用与业界其他数据库产品相似的算法和工具。
与其他数据库产品不同的,Sybase IQ 唯一不适合做的是交易事务处理,这是因为为Sybase IQ在数据仓库处理方面带来突出表现的特性减慢了处理单个的小事务操作的性能。
举例来说,按列存储可以减少查询的I/O,但增加了单行数据插入时的I/O数。
正如上面提到的,虽然Sybase IQ中的事务模式对多用户同时做表修改不是最佳选择,但却可以随时提供对所有表的最佳读访问。这并不是说Sybase IQ不能用于做面向事务的工作,只是说,如果用户的系统更倾向于OLTP或要求大用户量的快速事务响应能力,最好优先选择像Sybase ASE或Sybase ASA这类产品。

二、        性能优化浅谈

 
本文主要是介绍Sybase IQ的优化器和查询引擎能做哪些调优。让需要对Sybase IQ数据库和查询调优的人了解能从哪里入手,以及为什么能提高性能。请记住,像其他大部分数据库一样,大部分有效的性能调优来自优化数据库模型设计,幸运的是这在Sybase IQ中也是极少需要调整的。但是以下内容对Sybase IQ的性能有较大影响:

索引。Sybase IQ充分利用索引做查询。如果没有创建额外的索引,会造成极差的查询速度。 
•准确的数据描述。如果以合适的数据类型和描述来定义数据,将会获得更好的性能。例如:
定义主外键或建立HG或LF索引
使用恰当的数据类型,特别是对表连接字段。例如,unsigned integer数据类型作为表连接字段的数据类型,通常速度最快。再举一个例子,对于日期数据,用DATE来定义简单的日期字段,会比使用TIMESTAMP或DATETIME类型节约空间,改善性能。
如果可能,调整数据库的参数minimize_storage = ‘on’。这样,对于比较宽的,唯一值小于65,000的数据库表也可以使用标准的CREATE TABLE语句,并获得最佳空间压缩和最优性能。

•如果是按三范式设计的数据库模型,请在可能和合理的情况下反范式化。虽然Sybase IQ可以很好地处理三范式的模型,但在很多情况下,你会发现有些表在反范式后性能更佳。
•如果使用星型数据库模型,要考虑一下是否符合Sybase IQ的技术特点。虽然Sybase IQ可以很好地处理星型模型,但很多来自顾问咨询师的数据库设计方面的性能优化推荐,往往是基于传统的以行处理为基础的OLTP数据库的实践经验。例如,与其他数据库不同,Sybase IQ 直接对一张事实表做一个或多个条件查询时的性能非常好;另一个例子是,由于Sybase IQ的高压缩能力,雪花模型并不会为Sybase IQ数据库带来太大的空间和性能上的优势。

•通常要考虑并利用Sybase IQ 的设计思路和IQ独有的特性来调整模型,获得可用性和高性能。例如,如果有一个字符串字段,而用户经常访问子串,如果能在有效的时间窗口完成数据加载,就最好为该子串建一个新字段,让用户直接使用子串字段。由于Sybase IQ的压缩能力和极少表扫描,所以几乎不需要太多额外空间,而且也不会造成其他不访问该子串字段的查询性能下降(不像其他传统的数据库),使用该子串的查询用户却能有效地改善查询性能。

三、        Sybase IQ与Sybase ASE、Sybase ASA

尽管Sybase IQ与Sybase ASE有几分相似,但在Open Client库上他并不与Sybase ASE共享代码,对于Sybase ASE中非ANSI标准的SQL扩展只是少量支持。

Sybase IQ并没有从头开发所有功能,而是集成了一部分Sybase SQL Anywhere(ASA)组件,如Sybase IQ的用户接口层。ASA的组件提供了大量Sybase IQ本身没有的功能,这些功能包括:
Java
存储过程
语法分析((DDL、DML、查询)
连接(ODBC、JDBC界面)
游标支持
CIS支持
集成后对访问用户来说是透明的,通常可以忽略不考虑。但是还是有部分对用户操作是有影响的。例如有时某个SQL语句或功能会完全在Sybase IQ的ASA部分运行,这与同样的语句在IQ部分运行的过程不同。对于某些语句--如包含用户自定义函数的查询,会一部分在IQ子系统上运行,另一部分会在ASA子系统中运行。当发生了语句分解,会和整个语句在IQ子系统中运行获得的性能差别非常大。Sybase IQ利用部分ASA作为其前端,但两者支持的功能和特性有少量不同,例如:一个明显的不同是支持的索引类型不同。有关两者在语句和函数处理上的不同可以查看Sybase IQ的参考手册。
用户或DBA可以在Sybase IQ中直接使用ASA的功能并通过CREATE TABLE的IN SYSTEM限制词创建ASA的表。如果查询只涉及到建立在SYSTEM存储上的表,整个查询处理都会在ASA部分完成。如果查询访问了SYSTEM和IQ上的表,将会通过CIS分解语句,在Sybase IQ引擎上运行Sybase IQ部分的语句,在ASA中运行SYSTEM中表的部分,然后CIS把结果集合并。由于ASA中的CIS组件并不是为大数据量条件下高速处理设计的,所以当想把一部分数据仓库的数据存储到Sybase IQ中的SYSTEM存储上时一定要谨慎。
阅读更多
个人分类: 数据库
想对作者说点什么? 我来说一句

<em>sybase</em>数据迁移

2018年05月07日 0B 下载

<em>sybaseIQ</em>培训资料

2018年04月13日 0B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭