首先各个维度都随机地生成了1000条点查询。生成的点查询是从基表中随机抽取出1000条元组,并随机地将元组中的某些属性改为“*”。经观察,串行查询程序与并行查询程序所得到的查询结果是一致的,在本实验中,主要讨论并行查询程序对于串行程序的加速比,因此,查询的具体结果便不再讨论。串行查询与并行查询的程序运行时间如图7.6所示。
图7.6 查询程序运行时间
7.3.1 查询实验结果分析尽管在并行查询中,每台机器所查询的立方体单元数目基本上只相当于串行查询中立方体单元数目的三分之一,如图7.7所示,但通过实验发现,并行查询程序的性能加速比并未能够达到理想的加速比,如图7.8,只能达到2倍左右的性能加速。对其原因进行分析,发现这是由于查询语句未能直接命中,会造成额外开销的问题(本文4.3节中提到)所造成的。
图7.7 商立方体单元数
图7.8 程序加速比
在基于数据分组方法的预计算中,经过预计算的商立方体数据是分布式地存放各台机器上的。对于一条查询语句q,当程序用q在A机器的商立方体中进行查询时,q的覆盖集里面的所有元组在预计算时可能都没有分配到A机器上。在这种情况下,q在A上的查询便会产生巨大的额外开销:首先会从q所在层次h1里的单元中开始查找,在h1找不到的情况下,会继续查找h1的下一层h2。但是由于q在A上是无法命中的,查询程序会一层接着一层地往下扫描下去,直到扫描完最后一层。
随机生成的1000条点查询语句是根据基表中的元组生成的,这样在串行查询中,较少会出现语句在某一层未能命中,需要扫描下一层的情况。然而在并行查询中,由于元组的分布性,产生了较多的查询不命中,使得程序必须进行额外的层次扫描,而且这种额外的层次扫描的代价十分巨大。在并行查询中,开销巨大额外的层次扫描使得查询的时间急剧地增加,从而使得程序性能没能达到预期的效果。
尽管如此,在三台机器上能够实现缩短一半的时间,并行查询程序的性能还是令人满意的。
7.4 小结由于硬件平台条件的限制,实验最多只能在三个节点上运行,无法进行更多的实验来验证本文提出的基于数据分组的并行预计算和并行查询方法的可扩展性。
在三个节点上进行的预计算和查询实验的结果表明,基于数据分组方法的数据仓库并行预计算和查询方法是有效的,它能够有效地提高数据仓库预计算和查询的性能,并得到正确的结果。
第八章 总结与展望
在数据仓库数据量急剧增长的今天,并行数据仓库技术成为了解决海量数据预计算和存储问题的一种重要的、有效的手段。本文主要研究了一种基于数据分组的并行数据仓库预计算和查询技术,并在串行程序基础上实现了并行预计算和查询的程序。然后通过实验数据来说明该方法的有效性和分析了这种方法的优点和存在的缺陷。
8.1 结论由于实验平台的限制,使得各项实验最多只能在三个节点的环境下运行,无法在更多节点的计算环境下进行实验,研究本文提出方法的可扩展性。通过实验的观察和分析,本文提出的基于数据分组的数据仓库并行预计算和并行查询方法有以下一些优点:
(1) 该实现方法的并行策略简单,该方法可以经过很少的修改,便可以将很多已经实现的串行程序改为并行程序。使用MPI和C++进行编程,使得程序具有良好的可移植性、面向对象性。
(2) 可以更好地适用于大数据量场合。对于串行版本的预计算程序,在对于高维度数据集进行预计算时,随着数据量的增加,性能衰减得很厉害。并行预计算时的性能加速比十分可观,在数据量很大的情况下,甚至可以超过理想加速比。
(3) 预计算后生成的商立方体数据以分布式方式存储,在查询时,各台机器都可以同时对立方体数据进行读取,充分利用了各台机器的磁盘I/O带宽。
同时本文提出的并行预计算和并行查询方法存在的一些不足:
(1) 对于并行查询,查询的效率未能达到理想的加速比。这是由于数据元组的分布性与商立方体的特性所造成的,当查询语句覆盖集中的元组没被分配到某台机器上时,该查询语句在该台机器上的查询操作便无法命中。商立方体的特性使得查询在某一层上界中找不到所覆盖的上界的时候,必须到下一层进行查找,如果一直找不到,便会一直找下去,直到全部都扫描过。查询语句在某台机器上无法命中的后果是会产生很多额外的层次文件扫描操作,这样一层层的扫描操作代价是十分巨大的,但这种情况在数据元组分布式存储的情况下又是无法避免的,这样便使得并行查询程序的加速比未能达到理想状态。
(2) 基表元组的映射可以提高预计算和查询的响应效率,但是对于映射这个步骤还不能完全地并行化处理。
8.2 未来的改进对于本文提出的并行预计算和并行查询方法存在的一些不足和缺点,可以存在这样一些补充和改进的地方:
(1) 预计算算法还需要做出一些修改以适应立方体分布式存储环境,如聚集操作中的平均操作,除了对该维度量值做平均值计算之外,还应该