用于内存数据库查询处理的最优数据表示和辅助结构的制作方法

文档序号:8417554阅读:687来源:国知局
用于内存数据库查询处理的最优数据表示和辅助结构的制作方法
【专利说明】用于内存数据库查询处理的最优数据表示和辅助结构
[0001] 相关申请的交叉引用
【背景技术】
[0002] 传统处理模型假定一组紧密耦合、非常高速的中央处理器和非常大容量(在100 太字节量级)、但相对低速的盘系统,该盘系统具有足够的容量来存储所有需要的表,针对 该传统处理模型,关系数据库查询处理已经进行了优化。包括太字节的主内存、位于处理器 和盘系统之间的虚拟内存有助于避免高成本的盘I/O操作。然而,高速的中央处理器和大 容量的盘系统价格昂贵并且消耗大量的功率(在10千瓦量级)。
[0003] 新的更低成本和更低功耗的处理模型可供使用,部分由于诸如DRAM的主内存的 每比特成本已大大降低。一种这样的模型是具有大量处理单元、相比盘系统中的存储量为 中等的主内存量、以及不具有用于虚拟扩展主内存的永久存储装置的集群,其中每个处理 单元包含低速处理器。在该模型中,集群可以具有多达1000个处理单元。
[0004] 如果处理单元的每一个都可以利用得当,那么集群中的大量处理单元具有很高的 聚合计算能力和内存。这种潜在的高性能使得集群对于查询处理有吸引力,但是当查询处 理转移到内存数据库处理时,基于盘的模型会产生问题。
【附图说明】
[0005] 通过参考下面的详细说明并结合附图考虑,实施例及许多与其伴随而来的优势变 得更好理解,将更容易获得对实施例及许多其伴随而来的优势的更全面的理解,其中:
[0006] 图1示出用于执行实施例的示例流程;
[0007] 图2示出用于对关系进行编码的示例流程;
[0008] 图3示出用于选择辅助结构的示例流程;
[0009] 图4示出用于确定辅助结构的成本和收益的示例流程;
[0010] 图5示出用于在查询处理过程中执行运行时编码(run-time encoding)的示例流 程;和
[0011] 图6不出不例性的系统设置。
【具体实施方式】
[0012] 概述
[0013] 实施例使得基于盘的查询处理适应内存数据库查询处理,这要求在保持性能的同 时将使用的内存量以及计算和内存带宽最小化。为了最小化内存和带宽,要使查询所操作 的数据结构适应内存的大小。为了维持性能,要在内存中保留最优的辅助数据结构集。
[0014] 在图1所示的实施例中,在步骤102中系统为关系中的列选择编码以使得该关系 适应内存的大小。查询工作负荷中基于查询操作的编码的成本确定该编码选择。在本实施 例中,性能的维持是通过在步骤104中基于内存量和对每个辅助结构的收益来选择辅助结 构而完成的。在系统在内存中处理查询的同时,在步骤106中所选择的编码的实际编码实 时运行。锁定系统保证该实时编码基本上不干扰查询处理。
【具体实施方式】
[0015]
[0016] 候选编码
[0017] 图2示出用于对关系中的列进行编码的示例流程。在步骤202中,计算机系统为 给定的列G确定候选编码。计算机系统基于该列中存储的数据为每个列检查一个或多个 候选编码。计算机系统考虑以字节为单位的列中数据的平均长度、列中不同数据值的数 量以及列中数据值的平均行程长度以在可能的编码中选择比如词典编码、行程长度编码 (run length encodings)、本机整数编码(native integer encodings)、比例十进制编码 (scaled-decimal encodings)、参考帧编码、字符串压缩编码和位图。每种类型的编码都适 用于特定类型的数据。例如,行程长度编码适合于重复数据长度长的列,因为这种编码可以 使列使用的内存量大大减少。参考帧编码特别适合于数值列。LZ(Lempel-Zi v)压缩特别适 合于字符串列。本机整数编码最适合于算术和数值聚合以及排序操作。本机固定长度整数 编码很适合于涉及过滤器的情况。位图特别适合于低基数列。存在分组操作时,词典编码 是不错的选择。
[0018] 成本
[0019] 在步骤202中为给定列Cj确定候选编码后,在步骤204中计算机系统确定每个候 选编码Ek的成本。在实施例中,该成本反映给定的代表性的查询工作负荷,其中该工作负 荷由在下面更详细说明的、比如投影、分组和排序操作的操作类型来表征。具体地,对于每 个给定列(V为工作负荷中的每种类型的操作Oi和所有查询(VOm)收集统计值,其中统计 值包括处理的平均行数R[Cj,Oi]、列上的操作花费的查询处理时间(或估计成本)的分数 F[Cj,Oi]以及列上的过滤器的平均选择性S[qOi]。根据下面的函数从这些统计值中计算 成本:
[0020] (a)如果查询处理时间的分数F[Cj,Oi]小或为零(意味着查询中未使用该列),那 么成本仅仅是使用的内存量;以及
[0021] (b)如果查询处理时间的分数F[Cj,Oi]不小,那么根据用于每个候选编码E k的特 定成本公式来计算成本。
[0022] 在一个实施例中,成本公式是:
[0023] Σ 〇 Cost[Cj, Oi] =Σ 〇 (Costbasic [Cj, Oi] · AveLengthEi · R[Cj, Oi] · F [Cj, Oi]),
[0024] (I)
[0025] 其中,成本是在所有操作上计算得到的,其中C0StbasiJC jJi]是通过运行近似于 每个查询操作的预先设计的代码段来确定的查询的基本成本,八¥61^1^1:11 05是针对特定的编 码Ek的列的值的每行平均长度,并且其中R[Cj,Oi]和F[Cj,O i])是上述统计值。因此,对于 给定的平均行数R[Cj, Oi]和分数F[Cj, Oi]),如果AveLengthm越大,则成本越高。
[0026] 在确定成本后,系统选择具有最小内存或最低成本的编码。
[0027] 用于工作负荷统计值的操作类型
[0028] 如上所述,一个实施例中的每个候选编码的成本是基于代表性的查询工作负荷中 出现的操作的。在这样的工作负荷中考虑的操作类型至少包括过滤、标准运算符和函数、投 影、分组和排序操作。
[0029] 过滤操作包括在列的值上或者在对列应用函数/运算符得到的值上使用的关系 比较运算符,例如〃= 〃、〃〈〃、〃>〃。
[0030] 标准运算符和函数包括比如〃+〃和〃-〃的算术运算符、比如连接、〃upper〃和 "substr〃的字符串运算符以及如〃sum"的聚合函数。
[0031] 投影操作涉及解码数据表示(解压缩)以获取针对该数据类型的原始表示中的 值,例如针对字符串的文本。
[0032] 分组操作涉及针对按列分组(group-by-column(s))集中具有相同值的所有行。 这种操作通常包括哈希函数的计算和探查(probing)哈希表。
[0033] 排序操作包括按列集对关系或子关系进行排序。
[0034] 辅助结构
[0035] 辅助结构加快查询处理,对许多查询过程有利。这样的辅助结构包括B-树、排序 表示、位图、布隆过滤器和索引。
[0036] B-树有利于使用高选择性的范围谓词频繁过滤的列。如果列频繁成为排序操作的 对象,那么B-树的收益更大。
[0037] 排序表示是条目为按列值排序的(列值、行编号)对的数组。排序表示对频繁成 为排序操作的对象的列有利。
[0038] 位图结构对使用相等条件频繁过滤的低基数列非常有用。该列对每个不同值具有 一个位图,并且每个位图具有的位数与行数相等。对于每一行,相应的位表明该行中列的值 是否为位图表示的内容的值。
[0039] 在布隆过滤器结构中哈希函数将设定的元素映射为位数组,布隆过滤器对具有相 等谓词的过滤操作有用。若给定值未出现在块中(由位未出现在布隆过滤器中来指示),可 以使用表示块中的数据值的摘要的布隆过滤器来跳过该块。
[0040] 给定一定量的可用内存,最好是选择辅助结构集,该辅助结构集能够以最低成本 向内存数据库查询操作特别是针对列的操作提供最大的收益。因此,在图3的步骤302中, 系统基于列上的操作的类型来选择能够受益于辅助结构的列。例如,如果列具有高度选择 性的过滤操作或高频次的排序操作,那么B树索引结构可以提供性能提升。选择能够受益 于辅助结构的列基于可调的阈值以保持对被考虑用作该列的候选辅助结构的数量的控制。
[0041] 对于给定的列以及对于候选结构集中的每个候选结构,在步骤304中,本系统的 实施例确定候选结构能够提供给给定列的收益&的测量值和成本,该成本是候选辅助结构 所使用的内存量M i。然后,在步骤306中,实施例决定为可用内存提供最大收益的辅助结构 的子集。
[0042] 为了帮助确定辅助结构的成本,可用内存被划分成数量L个大小相等的块。因此, 辅助结构所需要的内存量%具有范围1到L个块,意味着该结构能够占有一个块或者全部 量的可用内存。辅助结构所需要的块的实际数量取决于列的长度以及辅助结构的类型。
[0043] 辅助结构的收益Bi是辅助
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1