跳过树形连接的制作方法

文档序号:8449201阅读:179来源:国知局
跳过树形连接的制作方法
【专利说明】跳过树形连接
[0001] 相关申请的交叉引用
[0002] 本申请要求于2012年9月27日提交的题为"Leapfrog Tree-Join"的美国临时 申请No. 61/706, 484的权益。该申请的全部内容通过引用合并到本文。
【背景技术】
[0003] 本发明大体涉及数据库操作,并且更具体地涉及对关系数据库表的连接操作。
[0004] 数据库管理系统使得用户可以存储和更新大量信息,同时还支持对该信息的查 询。对来自若干表的数据进行组合是关系数据库管理系统在进行数据库查询时所使用的基 本操作。在连接操作中,一个或更多个条件指定应该如何使每个参与表中的行相关联以生 成查询结果。尽管可以进一步处理连接操作的输出来生成查询结果,但是一个或更多个连 接操作的成本在时间和空间二者方面通常是显著的。提出了用于实现连接的若干算法,所 述连接包括分类合并连接、嵌套循环连接、索引嵌套循环连接以及散列连接。这些算法通常 用于在将更复杂的连接查询分解为成对连接序列的情况下一次连接两个表。

【发明内容】

[0005] 实施方式包括一种用于根据关于连接属性集S的连接条件集合对来自数据库中 的表的集合的记录进行连接的方法、系统以及计算机程序产品。一方面包括:将连接属性S 排列为有序排列Stl,以及将作用域C初始化为空。一方面包括:识别在数据库表的集合中 的包括连接属性A的表,所述连接属性A是有序序列S tl的第一个。一方面包括:创建从S0 中删掉了连接属性A的连接属性的新序列S'。一方面还包括:遍历所识别的表中的每个表 按照连接属性A的顺序进行迭代,所述迭代基于针对所识别的表中的每个表的树形索引结 构,在所述树形索引结构中索引关键字包括所识别的表中的按照SJ页序的所有连接属性。 一方面还包括:针对在迭代期间定位的连接属性的每个匹配值v,通过将"A = v"附加至作 用域C来创建新作用域Cv。一方面还包括:确定S'是否为空,并且基于确定出S'为空,输 出对应于作用域C的元组。一方面还包括:基于确定出S'不为空,将S tl设定为S'并且针 对每个作用域Cv,将C设定为Cv并且对识别、创建、迭代、添加以及确定进行递归调用。
[0006] 通过本发明的技术来实现附加特征和优点。在本文中详细地描述了本发明的其他 实施方式和方面并且认为本发明的其他实施方式和方面是要求保护的发明的一部分。为了 更好地理解具有优点和特征的本发明,参照说明书并参照附图。
【附图说明】
[0007] 在说明书的结束部分处的权利要求书中具体指出并且清楚地主张被视为本发明 的主题。根据结合附图所做的以下详细描述,本发明的前述及其他特征和优点变得明显,在 附图中:
[0008] 图1描绘了根据实施方式的示例性方法的流程图;
[0009] 图2描绘了根据实施方式的可以在其上实现跳过树形连接的系统的框图。
【具体实施方式】
[0010] 示例性实施方式涉及用于一次计算多个数据库表的连接的新型技术,在本文中将 该新型技术称为"跳过树形连接"。跳过树形连接对共享属性的任意数量的表进行同时的同 等连接。本文中描述的实施方式获得比成对连接操作的组合更佳的复杂度约束(例如,在 输入变得更多时可能需要较少的步骤)。
[0011] 可以如下进行合并连接算法。作为初始假设,可以考虑都包含属性V的表札、 R2、……、&的集合,其中,表按V递增的顺序被物理地分类。通过使用游标扫描每个表来 获得表关于属性V的合并连接。在游标(;处具有最小V值的表R将Q前移直到Q处的值 至少为在任意游标处的V的最大值。当所有表一致为单个V值时,通过将V与每个表中查 询所需的的其他属性值进行组合来生成输出记录。在传统合并连接中,在表中存在具有值 V的多个记录会导致针对单个V值的多个输出记录。
[0012] 除按V分类以外,还可以假设以上每个表具有关于V的树形索弓丨。在实施方式中, 使用B树结构,然而还可以使用替代的树形结构,例如但不限于trie结构。在使用树形索 引的情况下,因为并非需要扫描每个V值,所以可以更有效地实现合并连接。例如,可以假 设表R 1具有关键字为{1、2、3、……、1000}的记录,以及表1?2具有关键字为{1、750}的记 录。然后,在算法经过V = 1之后,任何游标处的最大值为V = 750。系统可以在R1中的关 于V的索引中搜索750,而不是线性地扫描&直到到达V = 750为止。在寻找下一个项目 时,最坏情况下的复杂度在表的大小方面从线性下降至对数。使用简单的树遍历技术,在大 小为η的表中搜索关键字的递增序列的总成本m具有复杂度O (m log (n/m))。
[0013] 如本文中所述,实施方式可以使用合并连接的变型,该变型称为游标连接。游标连 接采用如上所述的树形索引并且将与连接的"作用域(scope) "对应的属性值的元组SC作 为输入。作用域从参与表中指定某些属性值,并且仅与这些值匹配的记录参与连接。
[0014] 通过在表中找到在SC中提及的属性上与SC匹配的第一行来确定针对拥有连接属 性的每个输入关系的游标。对每个输入表给定适当索引,可以有效地找到这些游标位置。 一旦游标中的一个游标指向具有值在作用域外的属性(即,不同于SC中的对应属性的值) 的输入记录,连接就终止。游标连接像合并连接那样起作用,不同之处在于游标连接如何生 成其输出。当游标连接遇到针对其所有参与表具有至少一个匹配记录的连接属性的新值V 时,游标连接输出等于SCU {A = v}的新作用域,其中A为连接属性。即使V出现在参与 表的许多记录中,但是仅输出包含V的一个作用域实例。
[0015] 在一些实施方式中,跳过树形连接对以任何形式共享属性的任意数量的表札、 R2、……、艮进行同时的同等连接。例如,查询Q = R(A,B),S(B,C),T(A,C)具有三个连接 属性A、B和C。通常,令4、……、Ak为连接属性(即,在连接表达式中的两个或更多个关 系中提及的那些)。首先,可以选择属性的排序。该顺序确定在跳过树形连接中的处理的 顺序。基于部件表中的数据的分布,不同顺序会导致不同运行时间。查询优化器选择下述 顺序:所述顺序根据连接操作的成本模型以及建立并非已存在的任何所需索引的成本来使 期望成本最小化。为了简化说明,并且不失一般性,假设所选择的排序为Ord =〈4、……、 AkX
[0016] 在一些实施方式中,跳过树形连接算法假设:对于每个参与关系R,都存在按照与 Ord -致的顺序的、对来自R的连接属性的组合的索引。对于以上查询Q,并且在连接属性 的排序为A、B、C的情况下,可以期望针对R的关于(A,B)的索引、针对S的关于(B,C)的索 引以及针对T的关于(A,C)的索引。如果这样的索引在连接之前不存在,则可以建立索引 以应用跳过树形连接算法。为了提高访问的局部性,在连接属性之后还可以包括查询所需 的非连接属性,作为被索引属性。通过以这种方式包括非连接属性,实现了仅索引设计。在 一些实施方式中,如果需要将索引存储在次级存储器上,则需要进行分配以使得叶节点以 靠近-相邻的方式按顺序被存储。
[0017] 在一些实施方式中,跳过树形连接通过关于第一连接属性A1按顺序地连接表来开 始。其属性中包括A 1的所有表参与关于协同游标连接。该最初游标连接的作用域为 标注为□的空作用域。在通过游标连接生成针对4的每个值a ^寸,暂停外部A 1连接的执 行,并且在包括A2的所有表中,利用作用域[A1= aj启动对^的内部游标连接。针对在该 内部连接中还包括A1的表,作用域[A1= aj将内部连接限制为参与关系的仅-片段。因 为索引按〈Αρ......、Ak>顺序存在于每个关系上,所以游标连接可以顺序地行进通过在每个 层级处的每个索引,并且不需要重识别每个调用上的开始游标。
[0018] 在一些实施方式中,其余的连接以类似于上述的形式递归地进行。当生成针对Aj 的值\_时,暂停执行操作并且利用由A」=a 展的作用域来启动对A μ的内部游标连接。 在最后层级Ak,通过游标连接生成具有形式(&1,……,a k)的输出元组,包括查询所需的所有 连接属性。最后层级输出为跳过树形连接的输出。在完成关于Aj+1的每个游标连接之后, 控制返回至对A j的游标连接,其中,属性A」的下一个匹配值被识别并且对A j+1的新游标连 接被启动。当A1的最后匹配值被处理并且最外游标连接完成时,算法结束。
[0019] 如果在跳过树形连接中连接属性的顺序Ord =〈Αρ……、
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1