Double-Pipelined加入算法在前一节中,我们理解关于流水线和一个系统的方式创建和使用需求实现管道评估多个操作或生产者驱动管道。 在这里,我们将讨论一个评估算法实现流水线。 有几个操作用于访问数据从任何特定的系统。但其中一些天生阻塞操作,和其他人。阻塞操作是那些不输出任何结果,直到所有输入元组。 例如,散列连接是一个阻塞操作等操作之前,输出结果。它既需要其输入获取完全以及分区。另一方面,索引嵌套循环可以输出结果元组就变得外关系的元组。所以,管线式外部关系和阻止其索引输入。所以是因为之前创建的索引是完全的执行索引嵌套循环。 但在某些情况下,我们想对两个输入执行join操作。然而,尚未进行排序,这两个输入,我们需要把它们放在一个管道的连接操作。在这种情况下,我们使用另一种方法称为Double-pipelined加入方法。double-pipelined加入技术使用一个评估算法的实现,这是众所周知的Double-pipelined加入算法。 Double-pipelined加入算法下面我们描述了double-pipelined加入算法: 完成r= false;完成年代= false;r =Ø;s =Ø;结果=Ø;而完成!r完成或!年代做开始如果队列为空,等到它不是空的;t =顶端插入队列中;如果t =结束r然后完成r= true其他的如果t =结束年代然后完成年代= true其他的如果从输入r t然后开始r = r U {t};结果=结果U ({t}⋈年代);结束从输入* / / * t其他的开始s = s U {t};结果=结果U (r⋈{t});结束结束 上述算法对两个输入执行关系r和s。假设的输入元组管线式这些关系。的元组提供给r和s关系都排队来处理在一个队列中。在算法结束r和结束年代特殊的队列,文件尾标记。这些特殊的队列中插入队列之后才生成的所有元组关系r和s,分别。同时,随着越来越多的元组添加到关系r和s,适当的指标应该是建立在双方关系。保持指数高达日期导致操作的一种有效的评估。 在该算法中,我们也假设输入都装入内存。但是,double-pipelined加入技术还支持的情况下两个输入的大小超过内存的大小,即。,比内存大小。这是因为double-pipelined连接方法可以像往常一样工作,直到可用内存变得完整。当内存满,到达元组的关系r和s到那时可视为在r0和s0分区,分别。随后到来的元组关系r r和s是分配给分区1和s1。虽然这些元组分配给分区r1和s1不包括内存索引时,他们将被写入到磁盘。另外,之前写这些元组分配给r1和s1他们是用来探测分区的磁盘,r0和s0。因此,也总结了r的加入1和s0和s0r1在一个管道。处理两个关系r和s完全后,我们计算r的加入1元组和s1元组来完成连接操作。同时,我们可以使用任何连接操作或方法上执行加入分区r1和s1分区。 注意:如果我们使用哈希索引实现管道的任何关系r和s,这种方法被称为Double-pipelined散列连接方法。
下一个话题
DBMS教程
|