论文部分内容阅读
Sybase的数据仓库方法从根本上不同于其他的关系型数据库提供商。Sybase认为,传统的关系型方法以及ROLAP方法效率很低,要想获得足够的性能,必须通过高额的成本,在额外的硬件、软件、资源、钱、时间上进行大量投资,否则不可能达到。因此Sybase已经开发了一个新的关系型数据库——逆向关系型数据库可能是对此最好的解释,它使用一个传统的关系型结构以及类似的非常熟悉的术语,但是却是基于列的,而非基于行的。
我们开始审视Sybase IQ时,我们正是从此点开始,我们发现,Sybase对其使用列方法的好处所作的论述“相当令人信服”。然而,通过对数据仓库不断增加需求、迅猛增长的来自Web的数据与用户所带来的分析和报表(更不必提即将到来的RFID应用),以及客户的经验等等,我们现在可以证明,Sybase IQ提供了一个远比那些传统的关系型供应商更优越的方法。
架 构
不同于传统的关系型数据库,其数据在表中是按行存储的,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功能属性如排列、百分比、平均。
索 引
Sybase IQ的秘密在于其索引。随着Sybase 客户发现了新的分析需求,Sybase可以简捷地建立新的索引以满足这些需求。这种方法的奇妙之处在于为数据仓库增加新的索引几乎不会(即使有也是微乎其微)影响数据仓库的架构或使用仓库的分析型应用。在实时企业与闭环应用领域,Sybase将索引视为在TB数量级(将来)甚至PB数量级数据仓库中获得更高查询性能的关键。今天,Sybase实际上已使用了7种索引机制:
· Low Fast 索引——这些是低基数索引,它使用一个被称之为“代号化”的进程。使用该进程,数据被转换为代号,然后存储这些代号而不是数据。这对于减少冗余数据的数量尤其有用。例如,在整个英国拥有大量客户群的公司,将需要存储客户的地址。这将意味着巨大数量的重复的郡的名称。因此,不是保存大量的“班夫郡”的实例,例如,Sybase将会用一个数字代替每个郡的名称。因此,由于班夫郡按照拼音排列在英国是第5个郡(排在Aberdeen,Armagh,Avon与Ayrshire之后)因此,它可能就会被设值为5。如果一个列包含一个数字值,该值自身可以一用于代号化的基础。一旦建立了代号(这是一个自动进行的进程),一个位图索引将被建立以表示这些代号。代号化典型地应用于列数据存在有限数量的可能取值。这也是为什么Sybase称之为低基数索引的原因,典型的,它仅用于不同的取值个数在1500以内的域。
· Bit-Wise索引——对于高基数的域,那些取值个数超过1500个(如金额值),Sybase使用其专利的被称之为Bit-Wise索引的技术。这在你希望在范围搜索的时候同时进行计算的情况下,尤为有用,例如,查找销售价格低于50欧元的货品数量及总收入。如同位图的其他变量,该方法的优势之一就是计数(count)查询可以直接通过读取索引获得答案,而无需读取数据。
· High Group索引——实际上,它是B-树索引。然而,此处的原则是,用户仅仅在几个列有可能作为一个组来使用的情况下,尤其是高基数与低基数的联合搜索时,才定义这些索引。比如可能有这样的例子,按照商店(低基数)查询产品销售清单与价格(高基数)。
· Fast Projection 索引——该索引类型(缺省的)就是列存储本身。如果用户总是打算检索整个列的数据,则列存储事实上意味着列可以直接映射到表或查询中,而无需显式的定义任何索引。这非常有用,例如在“Where”从句中。
· Word 索引——这是一个文本索引。它基于关键词或短语字符串搜索。这种类型的索引,历史上一直没有用于数据仓库中。然而,它有着大量重要的市场,在这些市场上,能够联合定量与定性的分析非常重要。例如,在医疗横业,医生的诊断通常就是:笔记。为了获取信息,例如发病率,因此可能必须访问这种非结构化的数据。
· Compare索引——这个索引技术允许数据列的比较,从效果上讲,类似于“if…then…else”表达式。例如,“if支出大于收入,then…”。该类型的索引对于在Web应用中实时比较尤其有用。
· Join 索引——正如索引的名称所示,它是为消除表连接的需要而设计的。正象大多支持索引的情况,它可能在预先已知的查询需求下更为有用。
· Time Analytic 索引——这为基于日期、时间、日期与时间建立索引提供了选项。需要注意的是,对于传统的关系型数据库,处理基于时间的查询尤为困难。
大量扩展工具用以支持在各种情况下使用这些索引。这包括为减少硬盘(或内存——位图可能存在缓冲中)需求的索引压缩,联合使用不同类型索引的能力,以及使用布尔操作如AND与OR过滤比特队列等。这些特性表明,Sybase IQ克服了传统的位图的缺陷,即不适合于表连接或数据聚合。Sybase IQ在最近发布的版本中增加了一个索引顾问(Index Advisor),这一点尤其令人欢欣:这将建议管理员何时应该增加新的索引以及增加那种类型的索引。
Multiplex
Sybase IQ的Multiplex组件增加了在单一的Sybase IQ环境中支持多个SMP机器节点的功能。在每个节点上,Sybase IQ使用轻量级的的位于每个进程之下的操作系统线程。多线程显著的减轻了进程与内存负担。
左图显示了一个Multiplex环境的例子,需要指出的是,所表示的数量仅仅是理论上的。事实上,Sybase IQ拥有一个已经验证的、包含155TB的输入数据的全球最大的数据仓库。在Sybase IQ数据仓库中,仅仅需要55TB的空间。而传统的方法将会达到数倍(典型的是3到5被甚至更高)于原始数据量。
这里,5个节点(你可增加到你所需要的任何数量)通过光纤通道连接到一个Sybase IQ物理数据库上(再次声称,可以有许多这样的物理数据库,包括为7x24运行提供的镜像选项)。必须指定一个节点拥有、管理与更新数据库,而所有其他节点仅可以以只读的方式访问数据库。既然只有一个写实例,就永远都不需要对记录加锁,因此在只读节点之间没有连接。
任何节点,包括更新节点宕掉,你可以将用户和任务转移到其他节点。Sybase IQ 也支持热备份功能、失败转移与扩展的版本支持,以及节点间的负载均衡。这些功能不是自动完成的,但却受DBA控制,DBA可以基于业务需求定义动态资源分址。另外,如果需要的话,还有一个在应用服务器层实现负载均衡的应用OpenSwitch可供选择。
值得关注的是Sybase的策略,正如它与竞争对手一直在争辩的,Sybase IQ最适合的环境是什么。多数厂商一直致力于通过并行机制提高单个查询的性能,这种方法的基本原理是,每个单独的查询性能更好的话,所支持的并发查询的数量也会因之而提高。然而,这种说法并不必然正确。例如,很容易看到这样的情况,一个并行数据库可能使用数据分区技术优化了一个特定的查询,但是同时,却可能引起第二个查询的性能倒退。
另一方面,Sybase的姿态是,IQ产品从本质上正是为优化单个查询而设计的。因此,它将并行工具关注到支持多个查询而不是提高单个查询的性能,正如Multiplex组件所表明的。
Sybase IQ支持运行中的维护操作(包括在运行中增加列)。在数据库维护期间,查询用户看不到任何在此事务执行期间所发生的更新(由于读节点与写节点是分离的),只有用户在随后的事务中重新连接到该数据库时才能看到。
最后,需要重点注意的是,写节点更新数据库是以批处理的模式(DODS除外)进行的,这些批处理可能是时间间隔的。这意味着,例如,你可以定义一个批处理包含,比如2分钟的交易型数据。目前多数领先的数据仓库供应商支持接近实时的更新。然而,这决不表明,所有这些厂商也能提供接近实时的分析。这将依赖于询问的复杂性与预见性。在这种需要回答复杂问题或出现未预期查询的环境中,Sybase IQ表现得更加出色。
总 结
上面我们对Sybase IQ的三个技术特点进行了简单的描述。作为数据仓库领域革命性的产品,Sybase IQ最新版本12.7发展了更多创新的技术,这些技术正在被全球越来越多的企业所运用。Gartner2006年的报告认为,Sybase IQ的卓越表现使它逐渐展现出一个市场领导者的风采。
我们开始审视Sybase IQ时,我们正是从此点开始,我们发现,Sybase对其使用列方法的好处所作的论述“相当令人信服”。然而,通过对数据仓库不断增加需求、迅猛增长的来自Web的数据与用户所带来的分析和报表(更不必提即将到来的RFID应用),以及客户的经验等等,我们现在可以证明,Sybase IQ提供了一个远比那些传统的关系型供应商更优越的方法。
架 构
不同于传统的关系型数据库,其数据在表中是按行存储的,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功能属性如排列、百分比、平均。
索 引
Sybase IQ的秘密在于其索引。随着Sybase 客户发现了新的分析需求,Sybase可以简捷地建立新的索引以满足这些需求。这种方法的奇妙之处在于为数据仓库增加新的索引几乎不会(即使有也是微乎其微)影响数据仓库的架构或使用仓库的分析型应用。在实时企业与闭环应用领域,Sybase将索引视为在TB数量级(将来)甚至PB数量级数据仓库中获得更高查询性能的关键。今天,Sybase实际上已使用了7种索引机制:
· Low Fast 索引——这些是低基数索引,它使用一个被称之为“代号化”的进程。使用该进程,数据被转换为代号,然后存储这些代号而不是数据。这对于减少冗余数据的数量尤其有用。例如,在整个英国拥有大量客户群的公司,将需要存储客户的地址。这将意味着巨大数量的重复的郡的名称。因此,不是保存大量的“班夫郡”的实例,例如,Sybase将会用一个数字代替每个郡的名称。因此,由于班夫郡按照拼音排列在英国是第5个郡(排在Aberdeen,Armagh,Avon与Ayrshire之后)因此,它可能就会被设值为5。如果一个列包含一个数字值,该值自身可以一用于代号化的基础。一旦建立了代号(这是一个自动进行的进程),一个位图索引将被建立以表示这些代号。代号化典型地应用于列数据存在有限数量的可能取值。这也是为什么Sybase称之为低基数索引的原因,典型的,它仅用于不同的取值个数在1500以内的域。
· Bit-Wise索引——对于高基数的域,那些取值个数超过1500个(如金额值),Sybase使用其专利的被称之为Bit-Wise索引的技术。这在你希望在范围搜索的时候同时进行计算的情况下,尤为有用,例如,查找销售价格低于50欧元的货品数量及总收入。如同位图的其他变量,该方法的优势之一就是计数(count)查询可以直接通过读取索引获得答案,而无需读取数据。
· High Group索引——实际上,它是B-树索引。然而,此处的原则是,用户仅仅在几个列有可能作为一个组来使用的情况下,尤其是高基数与低基数的联合搜索时,才定义这些索引。比如可能有这样的例子,按照商店(低基数)查询产品销售清单与价格(高基数)。
· Fast Projection 索引——该索引类型(缺省的)就是列存储本身。如果用户总是打算检索整个列的数据,则列存储事实上意味着列可以直接映射到表或查询中,而无需显式的定义任何索引。这非常有用,例如在“Where”从句中。
· Word 索引——这是一个文本索引。它基于关键词或短语字符串搜索。这种类型的索引,历史上一直没有用于数据仓库中。然而,它有着大量重要的市场,在这些市场上,能够联合定量与定性的分析非常重要。例如,在医疗横业,医生的诊断通常就是:笔记。为了获取信息,例如发病率,因此可能必须访问这种非结构化的数据。
· Compare索引——这个索引技术允许数据列的比较,从效果上讲,类似于“if…then…else”表达式。例如,“if支出大于收入,then…”。该类型的索引对于在Web应用中实时比较尤其有用。
· Join 索引——正如索引的名称所示,它是为消除表连接的需要而设计的。正象大多支持索引的情况,它可能在预先已知的查询需求下更为有用。
· Time Analytic 索引——这为基于日期、时间、日期与时间建立索引提供了选项。需要注意的是,对于传统的关系型数据库,处理基于时间的查询尤为困难。
大量扩展工具用以支持在各种情况下使用这些索引。这包括为减少硬盘(或内存——位图可能存在缓冲中)需求的索引压缩,联合使用不同类型索引的能力,以及使用布尔操作如AND与OR过滤比特队列等。这些特性表明,Sybase IQ克服了传统的位图的缺陷,即不适合于表连接或数据聚合。Sybase IQ在最近发布的版本中增加了一个索引顾问(Index Advisor),这一点尤其令人欢欣:这将建议管理员何时应该增加新的索引以及增加那种类型的索引。
Multiplex
Sybase IQ的Multiplex组件增加了在单一的Sybase IQ环境中支持多个SMP机器节点的功能。在每个节点上,Sybase IQ使用轻量级的的位于每个进程之下的操作系统线程。多线程显著的减轻了进程与内存负担。
左图显示了一个Multiplex环境的例子,需要指出的是,所表示的数量仅仅是理论上的。事实上,Sybase IQ拥有一个已经验证的、包含155TB的输入数据的全球最大的数据仓库。在Sybase IQ数据仓库中,仅仅需要55TB的空间。而传统的方法将会达到数倍(典型的是3到5被甚至更高)于原始数据量。
这里,5个节点(你可增加到你所需要的任何数量)通过光纤通道连接到一个Sybase IQ物理数据库上(再次声称,可以有许多这样的物理数据库,包括为7x24运行提供的镜像选项)。必须指定一个节点拥有、管理与更新数据库,而所有其他节点仅可以以只读的方式访问数据库。既然只有一个写实例,就永远都不需要对记录加锁,因此在只读节点之间没有连接。
任何节点,包括更新节点宕掉,你可以将用户和任务转移到其他节点。Sybase IQ 也支持热备份功能、失败转移与扩展的版本支持,以及节点间的负载均衡。这些功能不是自动完成的,但却受DBA控制,DBA可以基于业务需求定义动态资源分址。另外,如果需要的话,还有一个在应用服务器层实现负载均衡的应用OpenSwitch可供选择。
值得关注的是Sybase的策略,正如它与竞争对手一直在争辩的,Sybase IQ最适合的环境是什么。多数厂商一直致力于通过并行机制提高单个查询的性能,这种方法的基本原理是,每个单独的查询性能更好的话,所支持的并发查询的数量也会因之而提高。然而,这种说法并不必然正确。例如,很容易看到这样的情况,一个并行数据库可能使用数据分区技术优化了一个特定的查询,但是同时,却可能引起第二个查询的性能倒退。
另一方面,Sybase的姿态是,IQ产品从本质上正是为优化单个查询而设计的。因此,它将并行工具关注到支持多个查询而不是提高单个查询的性能,正如Multiplex组件所表明的。
Sybase IQ支持运行中的维护操作(包括在运行中增加列)。在数据库维护期间,查询用户看不到任何在此事务执行期间所发生的更新(由于读节点与写节点是分离的),只有用户在随后的事务中重新连接到该数据库时才能看到。
最后,需要重点注意的是,写节点更新数据库是以批处理的模式(DODS除外)进行的,这些批处理可能是时间间隔的。这意味着,例如,你可以定义一个批处理包含,比如2分钟的交易型数据。目前多数领先的数据仓库供应商支持接近实时的更新。然而,这决不表明,所有这些厂商也能提供接近实时的分析。这将依赖于询问的复杂性与预见性。在这种需要回答复杂问题或出现未预期查询的环境中,Sybase IQ表现得更加出色。
总 结
上面我们对Sybase IQ的三个技术特点进行了简单的描述。作为数据仓库领域革命性的产品,Sybase IQ最新版本12.7发展了更多创新的技术,这些技术正在被全球越来越多的企业所运用。Gartner2006年的报告认为,Sybase IQ的卓越表现使它逐渐展现出一个市场领导者的风采。