对不可预测工作负荷展示可预测应答时间的连续全扫描数据存储表和分布式数据仓库的制作方法

文档序号:6350878阅读:159来源:国知局
专利名称:对不可预测工作负荷展示可预测应答时间的连续全扫描数据存储表和分布式数据仓库的制作方法
技术领域
一般来说,本发明涉及在分布式计算环境中运行的数据存储和数据管理系统。更确切地说,本发明涉及包括在多个存储节点的主存储器中运行的存储扫描引擎的数据存储,每个存储节点都保存着可能非常大的单个关系表的一段,并且多个存储节点在一起能够应对大量的并发查询和更新,同时保证存取的等待时间和数据的新近性。
背景技术
最近十年,传统的关系数据库应用面临的需求已经显著地改变。最重要的是数据库必须以可预测的性能和低管理成本运行。不仅如此,随着应用程序不断地扩充新的功能以及部署新的数据服务,数据库必须能够应对多种多样的发展的工作负荷,从而以不可预测的方式向工作负荷加入新类型的查询。最引人注目的是,这些新的需求已经表示在全球存在的众所周知的商业平台语境中,比如eBay、AmaZOn、Salesforce等。后者例如允许用户定制其应用并定义其自己的查询。提供这样的平台涉及非常多样的查询作业量;然而,平台的用户期待不变的响应时间。遗憾的是,以传统的数据库系统难以保证吞吐量和等待时间。这些系统被设计为对每个单独的查询都达到最好的性能。为此,它们依靠精密的查询优化程序和熟练的管理员,选择正确的索引和具体化的视图。这样的复杂系统维护成本昂贵并且没有显现出对不可预测的发展的作业量的可预测性能。因此本发明的目的是公开可缩放的分布式关系表和存储器全扫描引擎,同时克服以上的限制,所公开技术能够支持大量的多种多样的查询和更新并保证存取的等待时间和数据的新近性,而无论它们必须处理的工作负荷和查询的类型如何。在参考附图考察了以下说明后,本发明的进一步目的、特征和优点对于本领域技术人员将变得显而易见。

发明内容
以上目的由本发明满足,它描述了在数据仓库的存储节点中存储和检索数据的方法,包括在存储节点的数据存储装置中存储关系表的至少一个分段的步骤;所述数据存储装置至少包括处理器核及其相关联的主存储器。该方法包括下列步骤在处理器核的每个相关联的主存储器中存储单个相关联的分段;从所述处理器核运行专用于扫描所述相关联分段的一个扫描线程;连续并全面地扫描所述相关联分段;接收和处理成批的查询和更新操作;在每次数据扫描开始时为一批次的查询和更新操作编制索引;联结一批次的查询和更新操作到与编制了索引的查询和更新操作的谓词匹配的所述关系表的相关联分段的检索的数据记录;只要所联结的数据记录的数据被扫描线程在扫描所述关系表的相关联分段时检索到,就渐进地完成一批次的查询和更新操作;从而使主存储器中数据记录的共享和存取最大化。优选情况下,选择哪些记录被检索的,是将所述编制索引的查询谓词与所述数据记录联结的动作。被编制索引的是所述查询和更新操作的谓词集。根据本发明的方法还可以包括以下可选特征的任何一个-每个扫描线程都执行时钟扫描算法,包括穷尽地安排写指针和读指针以扫描所述关系表的所述分段,以便在每个扫描循环分别地处理一批次中全部未决的查询和更新操作;其中所述写指针和读指针允许在所述读指针能够读取所述分段的数据记录之前,写入所述分段的数据记录;其中在扫描循环开始时激活全部查询操作;其中全部更新操作或者全面地应用到或者根本不应用到所述关系表分段的数据记录;从而提供所述关系表分段的一致性。-所述更新操作包括自/向所述分段修改、删除和插入数据记录。若干操作被所述扫描线程标注了时间戳并保持以全序方式处理。津立内部统计、杳询索引编制以及汇聚杳询在扫描所述关系表分段的同时,扫描线程收集内部统计,每个线程都对所述分段的给定属性的当前查找的许多截然不同的值、许多记录以及许多空值进行计数。内部统计是时钟扫描工具,用于指引查询索引的建立。为了处理汇聚的用户查询,与保持所述相关分段的存储节点合作的所述汇聚层进一步执行计算,包括属性值求和、查找属性最小值、查找属性最大值以及对非空值计数。所以所述全扫描既允许建立内部统计用于查询索引编制又允许实现数据记录或数据记录值需要汇聚的查询。持久性-所述扫描线程建立扫描所述关系表分段时数据记录的快照,其中数据记录的快照完成时被存储在持久存储器中。如果主存储器中位置(slot)数为N,那么N+1个分段位置被存储在所述持久存储器中。因此,如果容纳数据的机器出事故,损失的仅仅是当前分段,即正被写入的分段,而N个有效分段仍旧可用。每分段都安排了所述检查点。这被称为模糊检查点。-所述扫描线程在扫描所述关系表分段的同时保持当前事务处理的逻辑日志文件。-优选情况下,通过重新加载最近完成的快照并重放当前事务处理的所述逻辑文件而获得主存储器的持久性。-所述主存储器包括与存储节点的所述处理单元紧密链接的非持久性板上存储体。-所述关系表分段被整体包括并保持驻留在主存储器中。-此外,所述扫描线程被强制在指派的处理器核中执行,以及从组块尺寸与实施指派的处理器核专用的一级或多级内存高速缓存相容的关系表分段取回数据以防止高速缓存遗漏。
本发明的另一个主题是数据存储和数据管理系统的存储节点,包括具有主存储器并被安排为在所述主存储器中存储多个分段的关系表的数据存储装置,其特征在于,所述存储节点包括与每个分段相关联并且被配置为运行专用于扫描所述相关联分段的至少一个扫描线程的至少一个处理器核,所述存储节点被安排为使得每个扫描线程唯一、连续和全面地扫描所述专用分段;对于每个分段,所述存储节点接收和处理成批的查询和更新操作;一批次的所述查询和更新操作由所述扫描线程在每次扫描开始时重新编制索引;—批次的所述编制了索引的查询和更新操作被独立地联结到所述关系表分段的与编制了索引的查询和更新操作的谓词匹配的数据记录,并且查询和更新操作联结的所述数据记录的至少某些数据被检索,只要所联结的数据记录的数据被扫描线程在扫描所述关系表分段时检索到,一批次的所述编制了索引的查询和更新操作就被渐进地完成;从而使主存储器中数据记录的所述共享和存取最大化。本发明的另一个主题是分布式数据仓库,包括存储层,包括根据任何所述先前特征的多个存储节点;汇聚层,包括汇聚器节点,旨在将成批的查询和更新操作路由到存储节点并合并由存储节点返回的结果。作为选择,根据本发明的所述数据存储也可以包括以下特征的任何一个-所述存储层被组织在存储节点组中。每个存储节点存储的分段与其计算核的数量同样多。存储节点持有的全部分段的集合构成分段集。组内全部存储节点都存储一致的分段集——组内每个存储节点都是同一组内其他存储节点的复制品,这是分布式复制的数据仓库。-根据特定实施例,组内一个存储节点是主节点而其他存储节点是复制节点,复制组的所述主节点被安排为聚集传入的查询并向不同的复制节点转发。-优选情况下,所述分布式数据仓库被安排在扫描每个分段的同时从记录中提取值;汇聚这些值;执行以下计算至少其一属性值求和、查找属性最小值和查找属性最大值、对非空值计数;通过提供对所述汇聚的数值执行的所述计算的结果完成查询。-所述不同复制组存储所述关系表的不同分段集。-复制组专用于处理特定查询操作。-所述汇聚层被安排为仅仅向对应的专用存储节点发送特定批次的查询和更新操作。-所述分布式数据仓库被配置为使得专用的存储节点被组织为加速类似等于和类似范围的谓词的处理。根据另一方面,本发明涉及计算机化分布式环境中的扫描系统,用于在逐次的连续扫描循环期间穷尽地扫描数据库关系表的至少一个内存分段,所述扫描系统包括第一和第二指针,适于在每个扫描循环穷尽地扫描所述至少一个内存分段,以及处理未决的更新和查询数据库操作,其中,所述第一指针是写指针,被配置为写入到所述至少一个内存分段中,以及处
6理旨在将数据记录更新到所述关系表中的数据库操作,所述第二指针是读指针,被配置为响应某查询从所述至少一个内存分段读出关系表数据记录,所述扫描系统的特征在于所述第一指针进一步被配置为先将关系表数据记录写入到所述至少一个内存分段中,然后所述第二指针才能够读取它们,并且在于所述第一指针写入与所述第二指针读取之间的时间延迟小于一个扫描循环。在能够以关联或替代方式实施的可选实施例中,这样的扫描系统是这样的-查询数据库操作被重新排序以执行查询数据的联结;-所述数据库更新操作包括对所述至少一个内存分段更新、删除和插入关系表数据记录;-数据库更新操作以其到达顺序处理;-查询和更新数据库的操作被重新排序以执行查询/更新数据的联结;-它被配置为在同一循环期间处理至少查询和更新。-它被配置为在循环起点对若干操作编制索引;-所述指针是在一个单一物理指针中集成的若干逻辑指针;-处理数据库操作的所需要的时间是可预测的并独立于所述操作类型和工作负荷。本发明还涉及用于数据处理的系统,至少包括CPU、数据库和先前介绍的所述扫描系统。这种系统可以包括以下可选特征的至少一个-它包括分离和合并函数,其中初始操作被配置为被分成许多子操作;-子操作的数量取决于CPU和主存储器的性能和数量;-所述扫描系统被配置为独立地扫描所述子操作并输出每个所述执行扫描的子结果;-每个所述执行扫描的所述输出的子结果被合并在一起以提供所述初始操作的结果输出。最后,本发明公开了计算机化分布式环境中的扫描方法,用于在逐次的连续扫描循环期间穷尽地扫描数据库关系表的至少一个内存分段,所述扫描方法包括下列步骤以第一和第二适应指针在每个扫描循环穷尽地扫描至少一个内存分段,以及处理未决的更新和查询数据库操作,其中,所述第一指针是写指针,被配置为写入到所述至少一个内存分段中,以及处理旨在将数据记录更新到所述关系表中的数据库操作,所述第二指针是读指针,被配置为响应某查询从所述至少一个内存分段读出关系表数据记录,所述扫描方法的特征在于所述第一指针进一步被配置为先将关系表数据记录写入到所述至少一个内存分段中,然后所述第二指针才能够读取它们,并且在于所述第一指针写入与所述第二指针读取之间的时间延迟小于一个扫描循环。


图1展示和进一步讨论了本发明的目标;
图2显示了在计算机化分布式环境中运行本发明数据仓库的概观;图3显现了根据本发明的存储节点的架构;图4讨论了在分开的控制线程中连续扫描数据的算法,并且将本发明的扫描算法 (图4b)与现有技术的算法(图4a)进行了对比;图5讨论了两种类型的联结算法,S卩“索引联合联结”和“索引联合更新联结”,并且显示了如何对查询编制索引的实例;图6讨论了旨在规划先前附图中介绍的联结的多查询优化程序,并且进一步显示了如何建立查询索引;图7讨论了根据本发明的数据仓库的持久性;图8显示了实验结果。
具体实施例方式本发明的以下详细说明引用了附图。虽然该说明包括示范实施例,但是其他实施例也是可能的,并且可以对介绍的实施例进行改变而不脱离本发明的实质和范围。后文提供了用于介绍本发明的术语和参考的词汇表。^ACID 在计算机科学中,ACID(原子性、一致性、隔离和持久性)是保证可靠地处理数据库事务处理的一组性质。在本发明的具体语境中,事务处理仅仅由一个操作组成而不是如同其他数据存储系统会有可能的那样由许多操作组成。这包括了由终端用户发出的全部查询和更新操作。原子性是指DBMS (数据库管理系统)保证某事务处理的任务不是全都执行就是全不执行的能力。原子性规定数据库修改必须遵循“要么全部要么全无”的规则。在每个事务处理被说成“原子的”时,如果该事务处理的一部分失败,整个事务处理就失败。关键的是不管任何DBMS、操作系统或硬件的故障,数据库管理系统都维持事务处理的原子性质。一致性性质确保数据库在事务处理开始之前和事务处理结束之后保持一致的状态,无论其是否成功。在根据本发明的数据仓库系统中,仅仅在分段层次授予一致性。一般来说,一致性规定仅将有效的数据写入数据库。如果由于某种原因,执行的事务处理违反了数据库的一致性规则,整个事务处理都将回滚且该数据库将被恢复到与这些规则一致的状态。另一方面,如果事务处理执行成功,它将接受数据库从与这些规则一致的一种状态到也与这些规则一致的另一种状态。隔离是指在事务处理期间其他操作无法存取或看到中间状态下数据的要求。这种约束是维持性能以及DBMS中事务处理之间的一致性所需要的。因此,每个事务处理都不知系统中并发执行的另一个事务处理。在根据本发明的数据仓库中这是自动授予的,因为正如以上陈述,每个事务处理只有一个被执行的操作。持久性是指保证一旦已经向用户通知了成功,事务处理将坚持不变并不会被取消。这意味着它将幸免于系统故障,并且该数据库系统已经检查了完整性约束并将不需要异常中断该事务处理。许多数据库实现持久性的方式为将全部事务处理写入事务处理日志中,它能够被回放以恰好在故障前重建该系统。事务处理只有在安全地记录在所述日志中之后才能够被认为已确认。持久性不暗示数据库的永久状态。另一个事务处理可以覆盖当前事务处理做出的任何改变而不妨碍持久性。-汇聚器根据本发明的系统路由节点,不容纳数据伯.是能够在存储节点上分派查询和操作,并且先对数据执行更高阶的处理再发送回客户机。
-高谏缓存的局部件引用的局部件,也称为局部件原理,是同一数倌或相关的存储位置被频繁访问的现象。有两种基本类型的引用局部性。时间局部性是指相对短的持续时间内特定数据和/或资源的再使用。空间局部性是指相对接近的存储位置内数据单元的使用。时间局部性如果在一个时间点处引用了某特定内存位置,那么很有可能在不久的将来再次引用同一位置。对同一内存位置的邻近引用之间存在着时间接近性。在这种情况下有利的是努力把被引用数据的副本存储在特殊的内存存储器中,它能够更快地访问。时间局部性是空间局部性的非常特殊情况,也就是当预期位置与当前位置一致时。空间局部性如果在特定时间引用了某特定内存位置,那么很有可能在不久的将来引用附近的内存位置。在几乎同时被引用的内存位置之间存在着空间接近性。在这种情况下有利的是努力猜测当前引用周围多大的邻域值得为更快的访问做准备。分级内存是获取空间和时间局部性益处的硬件优化,并且能够用于内存层次的几个级别。高速缓存就是充分利用时间局部性的简单实例,因为它是特殊设计的更快而更小的内存区域,一般用于保留最近引用的数据和靠近最近引用数据的数据,它能够引起潜在的性能提高。-时钟扫描通过循环地扫描数据而运行的主要算法的名称,仿佛该数据分布在时钟上。有两个扫描指针,读指针和写指针,它们代表该时钟的针。-数据记录关系表的行即关系行,有可能对该表每列包含已定义的值。如果在该行的某列尚未进行输入,该值为NULL(空)。涉及NULL值的任何比较都返回UNKN0WN(未知)状态。见后文‘谓词’的定义。在以下说明中,数据记录还被称为元组,即η个值的组, 其中η是对应关系表中已定义列的数量。这些元组值的某些有可能为空值。同样,在本发明的以下说明中,列项被说成对应行表或数据记录的属性。-贪婪算法贪婪算法是遵循解决问题的试探技术,在每个阶段都做出局部最优的选择以希望发现全局最优的任何算法。-处理器硬亲和力实行如“总是在处理机一上运行这个过程”或者“在除了处理器零以外的所有处理器上运行这些过程”的观念。调度器然后服从该命令,并且该过程只运行在被允许的处理器上。有两种类型的CPU(中央处理器)亲和力。第一种是软亲和力,也称为自然亲和力,是调度器试图尽可能久地在同一CPU上保持若干过程的趋势。它仅仅是尝试;如果它曾经不可行,这些过程当然将迁移到另一个处理器。这种行为引起乒乓效应。 调度器在每次调度和重新调度若干过程时,在多个处理器之间跳跃。反之,硬亲和力就是 CPU亲和力系统调用所提供的亲和力。它是一种要求,若干过程必须坚持指定的硬亲和力。 例如,假若处理器被限制到CPU零,那么它只能够运行在CPU零上。-水平、垂盲分区分区将逻辑数据库或其构成元素划分为截然不同的独立部分。 数据库分区正常情况下是为了易管理、性能或可用性的原因而做出。同样,它允许缩放数据存储。水平分区涉及将不同的行放入不同的表。垂直分区涉及以更少的列创建表并使用另外的表存储剩余的列。这种类型的分区被称为“行分离”,即所述行按其列分离。-具体化视图在遵从关系樽型的数据库管理系统中,视图是表示数据库杳询结果的虚拟表。只要对普通视图的表进行查询或更新时,DBMS都会将它们转换为对下层基础表的查询或更新。查询结果以具体化视图采取的不同方式高速缓存为可能时常从原始基础表更新的具体表。这实现了效率高得多的存取,代价为某些数据可能过时。它在数据仓库情况中最有用,其中频繁地查询实际基础表可能极为昂贵。此外,由于该视图被表明为真实表,所以对真实表能够进行的任何操作都能够对其进行,最重要的是在所有列上建立索引, 能够大幅度地加速查询时间。在正常视图中,典型情况下只有可能充分利用若干列上的索弓丨,它们直接来自或具有映射到基础表中的有索引的列;这种功能往往根本不提供。-NUMA (非统一内存访问)一种多处理架构,其中内存被分为远近存储体。在NUMA 和SMP(共享内存处理)架构的机器上,所有的多CPU对机器装备的内存全部内容都有访问权限。不过,在SMP中,所有CPU以相同速度访问公共内存。在NUMA中,访问与CPU在同一处理器板上的内存即本地内存要快于访问其他处理器板上的内存,即共享内存,因此有“非统一”术语。结果,NUMA架构对更多数量的CPU缩放效果比SMP好得多。“高速缓存相关 NUMA"意味着本地系统支持高速缓存。^iiM:典型情况下,对数据库查询,谓词是从关系表中过滤要被检索的数据记录的约束。遵从SQL标准,SELECT操作的WHERE子句定义了若干谓词,它们是能够对真、假或未知求值的逻辑表达式。最基本的谓词是相等比较。例如,假若在关系表中有‘Color’列, 对这个表的查询就可能仅仅返回如在‘Color’列中的确呈现‘Red’值那些表行。使子句如下WHERE Color = ‘Red’就实现了它。可以应用的其他比较的全部种类包括不同、大于、 小于等,假如对其应用这种比较的数据与该比较一致。例如,假若在关系表列中的值是特定项的数量(qty),合法子句就可以为WHERE qty>= 200。然后,在这种情况下,查询仅仅返回数量大于或等于200的行。查询可以包含一个或多个谓词以至于能够规定若干范围。-探杳探索。-探杳索引考虑某元祖,取该元组的给定值并探索与其相关联的属性索引,以便检验在查询索引中是否存在着将使得这个元组成为结果元组的查询。-杳询数据联结本发明执行这些查询的方式基于从查询、谓词获取的数据,然后使用查询索引以来自表中的这些数据和实际记录执行联结。-杳询索引、索引编制索引是关键字-值数据结构,意味着对给定数据集给出更快的随机存取。典型情况下,可以使用数据树作为索引。查询索引包含来自查询谓词的对于给定属性即对于某列的值作为关键字,以及对查询的引用作为数值。查询的索引编制包括获取活动查询集、收集其全部谓词并以这些数据创建索引。所建立的查询索引的数量和所用的数据结构的种类由贪婪算法的优化程序驱动,图6介绍了它的实例。为了确保持久性,一组节点可以被配置为严格地容纳相同的数据,使得如果一个节点出故障,仍然存在着该数据的活动副本可用。这些节点形成复制组。-分段分配给每个CPU核的内存,使用时钟扫描算法从开始到结束连续地扫描它。-存储节点一个子系统,典型情况下是一台机器,包括总共N个CPU核,在CPU核之一中容纳一个控制器进程,从而在剩余核中容纳N-I个时钟扫描进程。-结果元组考虑某杳询,结果元组是匹配该杳询谓词以及将是向杳询发送器发送的结果集的一部分的元组。在电信和软件工程中,可缩放性是系统、网络或进程的期望性质,它表明了它以适度方式应对工作负荷增长或者容易被扩大的能力。例如,它可以指当增加资源典型情况下硬件资源时,在增加负荷的情况下系统增加总吞吐量的能力。垂直缩放或向上扩充,意味着向系统中的单个节点增加资源,典型情况下涉及向单台计算机增加CPU或内存。横向缩放或向外扩充,意味着向系统增加更多的节点,比如将新计算机增加到分布式软件应用。图1进一步展示了本发明的目标并把以下本发明说明书中介绍的数据仓库能够获得的表现与传统数据库之一进行了对比。正如在背景部分中已经陈述,当要应对的更新等级明显地增长时以及/或者当不得不处理非常多样的查询工作负荷时,传统的数据库系统难以保证吞吐量和等待时间。即使传统的关系数据库系统的用户正在发出复杂的查询,他们仍然期待不变的响应时间。传统的系统被设计为对每个单独的查询都达到最好的性能。为此,它们依靠精密的查询优化程序和熟练的管理员,选择正确的索引和具体化的视图。这样的复杂系统维护成本昂贵并且没有显现出对不可预测的发展的工作负荷的可预测性能,从而往往不能满足用户的期
IvTo图1勾画了两张曲线图,对比了根据本发明的数据仓库的实际行为和传统数据库的行为。正如曲线图110所示,如果更新负荷不重,充分调优的传统数据库能够支持高的查询吞吐量,假如为支持它已经实施了正确的索引和必要的具体化视图。不过,查询吞吐量 112总是随着更新负荷的增加而快速下降。同样,正如曲线图120所示,查询吞吐量122还随着不同查询类型的数量而快速降低,因为越来越多的查询此时需要全表扫描。显而易见, 对于由高的查询多样性和并发更新结合的工作负荷,图1所示的效应产生了甚至更低的吞吐量。本发明的数据仓库和分布式关系表专门设计为克服以上限制。尽管根据本发明的数据仓库可能不如已经对缩减的查询类型集调优的传统解决方案,不过对于所有的工作负荷类型,它确实显现了良好的并且更重要的是可预测地良好的性能,正如曲线114和IM所示。正如在以下说明书中的介绍,通过执行不需要所存储数据的任何索引的无例外全扫描(full-scan-only)的架构,实现了可预测的性能。根据本发明的数据仓库使用了主存存储器和数据分区以及可选地一日重型并行化和无共享的设计,以便在多核机器上线性地向上扩充。也采用了协同即共享扫描以便克服在现代传统系统中经常观察到的内存带宽瓶颈,其中虽然内存密度确实已经显著地增加,而内存带宽远没有与处理器性能齐步改进。因此,本发明公开了新颖的协同扫描算法,称为时钟扫描,以便以可预测的等待时间同时实现高的查询和更新吞吐量。时钟扫描算法背后的观念是批量处理输入查询,并且将查询/更新处理模拟为一方的查询和更新语句与另一方的数据存储表之间的联结。能够特别有效地编制嵌套循环联结的索引,因为在计算机主存储器中随机存取不费力。因此,取代像在传统数据库中那样对表编制索引,根据本发明的数据仓库对查询编制索引。本发明在后文详细地介绍并经由某具体使用情况然而代表了任何大型计算机化平台展示,即经由全球分销系统(⑶幻的描述,它是形成旅游业主干的电子市场。这样的 GDS是例如AMADEUS,欧洲的世界主要服务供应商,管理旅游相关的预约,如航班、酒店、汽车租赁等。遍及世界的少数GDS共享世界上最大的航空承运人,数以千计的旅行社使用GDS 集成其数据。在任何GDS中的核心数据库典型情况下包含几千万个航班预约。由于历史和性能原因,每个预约的授权副本都存储为几千字节的BL0B( 二进制大对象),经由唯一关键字可直接存取。对于需要在线保留的预约,这引起了规模为几百吉字节的平面事实表。典型情况下这样的BLOB表必须支持每秒几百次更新和几千次关键字值查找的工作负荷。关键字-值存取对于系统面对的一切事务处理工作负荷都是足够的。不过,该系统不适于回答数量上升的选择非关键字属性的实时、决策支持查询,例如“给出明天从东京离开去往目的地为美国并需要轮椅的头等舱旅客的数量”。可是象这样的查询日益常见并且以严格等待时间约束为特征,因为做出操作决策时基于其结果。为了支持这样的查询, 典型情况下,GDS在BLOB表上保留了数量在增长的具体化关系视图,其中的一些经由事件流架构被实时更新。这些具体化视图的真实存在暗示在该工作负荷中联结不多。大多数查询确实为形式 SELECT<Attrl>,<Attr2>. . . FROM<View>WHERE...,伴随偶然的汇聚。最大的现存视图一般来说是航班预约视图飞机上每个人一个记录,即在旅游业和GDS的语境中“机票具体化视图”或仅仅“机票”。机票记录,即机票具体化视图的单行, 典型情况下规模为固定的几百字节,并且包括几十个属性,其中的许多是高选择性的旗标, 比如坐位等级、轮椅、素食主义者。由于一个旅游预约可能涉及多个人和航班,机票可能包含几亿个这样的记录。机票具体化视图实时地每秒被更新几百次。更新速度可以高于主要周期许多倍, 因为坏天气或安全事故可能导致旅客再调节请求的大爆发。更新负荷增加的速度低于查询负荷,但是在当前装置中关于索引维护已经引起了严重问题。视图用于大量的数据服务中从产生单一航班的旅客列表到分析不同航线和市场的消费者概况,即 < 出发地,目的地〉机场对。由于系统已经达到了增加视图和索引不再可行的复杂度级别,更不用说经济因素了,所以增长数量的对机票查询与〈航班号,起飞日期 >上的主索引不匹配。结果,越来越多的查询不得不批量回答,即离线回答,使用全表扫描,对这个阶段期间的性能具有显著影响。完全不允许与该索引不匹配和不允许批量处理的其他查询。作为对不保证其自己视图的所有这些查询的解决方案,正如以下进一步地解释,本发明提出单事例机票。尽管通过GDS的具体实例介绍了本发明,但是本领域技术人员必须清楚,实时商务智能和决策支持的许多系统都面临着与以上讨论的和以下说明中的需求类似的需求。图2显示了计算机化分布式环境的概观,其中运行着本发明的数据仓库。因为任何计算机的主存储器都必然地受限,所以一般来说单机无法存储本发明考虑的大型和非常大型数据仓库应用的完整表。因此为了可缩放性和可用性,本发明依靠基于多层次横向数据分区和复制的分布式架构200。本发明假设数据存储表在复制组210之间被横向分区,复制组210由各个存储节点如240组成。在复制组中,每个节点都包含该数据存储表的相同分区。复制组的主节点用作工作负荷分配器,也称为查询调度器,它根据查询的选择谓词聚集输入查询并将其转发到不同的从属复制品。这使得各个复制品处的工作负荷均质化,提高了查询索引的有效性, 对查询具有潜在的超线性向外扩充的结果。在存储节点上的操作或是查询,即简单的SQL 风格(结构化查询语言)SELECT语句,带有可选的标量汇聚,或是更新,即INSERT、UPDATE 或DELETE语句。更新不受影响,因为复制组以一读全写(ROWA)方式操作。除负荷平衡和组成员决定由主节点做出以外,复制品是完全对称的,对容错非常有利。在传统架构中,丢失视图或索引对至少一部分工作负荷具有很大的影响。与之相反,在对称架构中丢失复制
12品弓丨起吞吐量以对所有查询大致相同的可预测程度降低。复制组一起形成存储层220。存储层还负责提供持久性。持久性利用更新的检查点设置和逻辑日志来支持。对于检查点,后台线程负责定期地发布不带谓词的查询,即匹配所有元组的查询。这些查询的结果被串联并存储在永久存储器比如硬盘上的平面文件—— 检查点中。考虑日志,每次更新都必须被附加到日志再被确认,即预写式日志。后台线程定期地如每秒将该日志刷新到磁盘并且将其截取到最后检查点的时间戳。这将在图7进一步讨论。每个个体存储节点如M0,优选情况下在多核机器中实施。在这样的机器中每个核241都是独立的处理单元,具有其自己的一级(Li)高速缓存242和二级(U)高速缓存 243 ;并且有时具有共享的三级高速缓存(未显示),然后在外部前端总线244上与主存储体245相连。一般来说,永久存储器总是可用的,以硬盘247的形式,经由输入/输出(I/O) 控制器246可访问。从核访问被存储数据需要的时间当从Ll高速缓存到L2高速缓存、主存储器和硬盘时会显著地增加。后者是永久存储器,用于保留以上检查点和日志文件,它们提供了数据仓库的持久性。实现数据存储关系表的分区,使得向单个处理器核分配一个内存分段。存储节点的架构和操作将在图3进一步讨论。汇聚器节点230的一层或多层负责向复制组路由操作,以及合并即汇聚结果。在传统架构中,管理员通过在一个存储节点而不在其他节点上提供特殊视图或索引,或者通过对某复制品如异类复制使用完全不同的技术来调优性能。本发明不是这种情况,本发明的复制品是完全同类的,尽管复制品可能是专用的。例如,某些可以对于范围查询调优,而其他的可以调优等于查询以进一步改进性能。还有,成批地处理查询,即根据其选择谓词聚集查询对性能是有利的。例如,假设选择谓词为航班号的所有查询都去往复制品A,而选择谓词为机场的所有查询都去往复制品B ;那么类似的查询就能够非常高效地一起编制索引和处理。在运行时自动做出聚集决策。查询索引是极其短暂的,即它们仅在扫描的时间生存——典型情况下短于2秒,所以查询聚集能够在任何时间改变。因此,正如已经讨论,在传统架构中,丢失特殊的视图或索引对至少一部分工作负荷具有很大的影响。与之相反,在本发明系统中丢失复制品导致吞吐量以对所有查询大致相同的可预测程度降低。这允许无需附加的数据冗余而实现在高可用性设置中的可预测性能。中间件汇聚层230因此负责存储层的实现和协调合作。它定义了数据在存储节点之间分区的方式。本发明的系统对如何执行分区没有强加限制。本系统的实施决定了元组到存储节点的映射是随机的,即循环分区,还是唯一的,即散列分区或由特定准则分区,如全部素食者都存储在一个特定存储节点中。汇聚层合并,即汇聚由存储节点产生的结果,从而允许处理汇聚的查询,即涉及需要计算的值的范围的查询,包括如属性值求和、寻找属性最小和最大值。因此,当终端用户请求计算求和/最小值/最大值/计数时,那么全部存储节点都处理其分段集的求和/最小值/最大值/计数,然后汇聚层仅仅汇聚子汇聚结果。这是多层次的汇聚模式,其还可以包括汇聚被汇聚的数据的扫描线程的控制器。在这种操作期间,汇聚层应当等待来自在求值操作中涉及的所有存储节点的确认或拒绝,然后向客户机发送确认。对于更新,所述确认是确认写入或拒绝写入消息。对于查询,所述确认是特殊的计算结果结束消息,它声明对于给定操作将不会发送更多的元组。汇聚层可以在一个或多个级别中包含任何数量的汇聚器节点。在多级别汇聚设置中,汇聚器节点被用于将数据存储表在一组汇聚器节点之间分区并且合并其结果。为了递归,也就是说使多级别汇聚切实可行,汇聚器层的接口应当匹配存储节点的接口。本发明要求一切汇聚节点都是整体无状态的。缺少状态允许系统管理员按需要增加汇聚器节点以便支持工作负荷。它也除去了应对汇聚节点故障的复杂度。更上的层,即客户机层250被期待知道一组汇聚器节点,它能够向其发送若干操作。无法确认或拒绝连续操作的汇聚器节点必须被视为离线。图3显现了根据本发明的存储节点架构。存储节点揭示了两个主要功能使操作入队以及使结果元组出队。用户即汇聚器节点不是使某操作入队并等待结果,而是被期待并发地使大量的操作入队,并且使结果异步地出队。每个汇聚器节点又可以因此服务几千台外部客户机。一旦在存储节点之内,操作310就被拆分320并放入一个或多个扫描线程330的输入队列中。每个扫描线程都是具有处理器硬亲和力的用户空间线程,它连续地扫描内存核的专用分区中存储的数据存储表的横向分区,即已经定义的分段。扫描线程定期地从其输入队列325中去除若干操作并激活它们,也就是若干查询准备好要处理和完成。在任何给定时刻,扫描线程都可以具有多个活动操作。当扫描线程在扫描指针指示下对记录执行其活动操作集时,它会产生结果元组数据流335,它们将被进一步合并340。一旦某操作已经完成了表分区的全扫描,扫描线程把特殊的流结束元组放到输出队列350上并停止该操作。尽管这种架构引发了关于公平性的问题“便宜”与“昂贵”查询,以及资源利用率忙碌与空闲线程,每个操作占用大概相同时间的事实是公平性的关键特征和强烈标志。 不仅如此,本发明依赖大数定律共享扫描指针的操作越多,它们越代表了总体上的工作负荷,从而在扫描线程330之间平衡了负荷。这允许数以千计的操作共享扫描指针。物理内存被分区为析取项,即被分配到专用处理器核的非重叠分段。这种技术被称为分段。每个核都运行着具有硬亲和力的单一扫描线程,即不在处理器之间迁移的线程。 这种不共享的架构实现了线性向上扩充,因为有以下关键性质-不存在锁定,因为扫描线程被保证为其分段中记录的唯一一个更新,所以执行能够继续下去而没有任何锁定或锁存。-实现了最大的高速缓存相干性,因为不同的处理器高速缓存绝不包含同一记录的副本,所以它们在这种性能攸关的方面固有地相干。在扫描指针继续前进之前不需要将记录写回主存储器,即使它们被修改了。-得到了最短的NUMA距离,因为扫描线程具有处理器硬亲和力并且因为所编写的源代码对本地NUMA节点而不是对远程NUMA节点执行内存分配。它们各自的内存分段与处理器唯一相关联。这对NUMA架构是关键的,使用分段,CPU绝不会访问彼此的本地内存,除了传递操作和操作结果之外,给出了在谓词求值时起作用的最大的内存带宽和最短的访问等待时间。在这些条件下,内存带宽不再像传统数据库中那样是瓶颈。本发明的扫描算法在负荷下是CPU即处理器捆绑的。图4讨论了以分开的控制线程连续扫描数据的算法,并且对比了图4b所示的本发明的扫描算法和图如所示的现有技术的算法。本发明公开了新颖的协同扫描算法,称为时钟扫描。时钟扫描算法把输入的查询分批,并且将查询/更新处理模拟为一方的查询和更新语句与另一方的表之间的联结。时钟扫描不是对表的数据编制索引,而是创建当前正被求值的查询和更新的临时索引。对于主存储器,这种设置特别有效,因为随机存取不费力。后文称为经典扫描和求值器扫描的一流技术算法与它进行了对比。正如图3所示,所有的扫描算法330都以分开的控制线程连续地扫描数据。同样, 这些算法在固定尺寸记录的若干位置上运行。将本发明延伸到可变尺寸的记录或不同的记录配置将可能在某种程度上影响这些算法,但是不造成概念问题,因为不存在辅助数据结构,而且能够自由地安排记录。这里称为经典扫描的简明算法在图如中显示在“算法Γ’410的名称下。这是图3 所示的分离-扫描-合并流水线的简明“经典”实施。在这种情况下,每个扫描线程每次仅仅处理一个输入操作。操作的执行函数首先检查该位置是否被占据。如果没有,并且操作是INSERT,就遵从“最先适合”策略将某记录插入该位置。如果该位置被占据,并且操作不是INSERT,就对该操作的选择谓词求值。如果满足了全部谓词,该函数不是将结果元组放到输出队列上作为SELECT操作的结果,就是在执行了 UPDATE或DELETE时修改该位置。经典扫描在处理了所有记录后,将特殊的数据流结束元组放到输出队列上,并且以来自输入队列的下一个操作继续。对于在m个位置上的η个操作,经典扫描的渐近运行时间是0(n女 m)。显而易见,它没怎么利用现代处理器的计算资源,因为它本质上没有使用高速缓存求值器扫描也在图如中显示在“算法2”420的名称下。这是在经典扫描上的首次改进° Zukowski 等人(参考M. Zukowski et al. ;Cooperative scans Dynamic bandwidth sharing in a DBMS ; In Proc. VLDB,07,2007)以及 Raman 等人(参考V. Raman et al. Constant-time query processing ;in Proc. ICDE,08,2008)先前分别对于基于磁盘的和主存储器数据库中的只读工作负荷,已经研究了求值器扫描的变种。算法2显示了求值器扫描对于混合工作负荷的示范推广。求值器扫描维持活动操作队列,对扫描指针下的位置以到达的次序执行该活动操作队列,再移动到下一个位置。算法2在每个位置都更新该活动队列。已经完成了全扫描的全部活动操作都被停用,并且该输入队列被刷新。该算法的这个示范实施仅仅在组块边界处这样做,组块边界相当于基于磁盘的数据库中的数据块。如同数据块,组块被彼此邻近地存储。同样,它把活动队列拆分为不同类型的多个队列,以避免例如在空位置上执行DELETE。求值器扫描是所谓的协同扫描,因为它让多个操作共享扫描指针以改进高速缓存的局部性和避免产生内存访问瓶颈(参考W. A. milfand S. A. McKee ;Hitting the memory wall amplications of theobvious. ACM SIGARCH Comput. Archit. News,23(1) 20-24,1995 ;以及参考P. A. Boncz et al. Database architecture optimized for the ■bottleneck =Memory access. In Proc. VLDB,99,1999)。不过,对于在 m 个位置上的 η 个操作,经典扫描的渐近运行时间仍然是0(η女m)。本发明的扫描算法,即时钟扫描在图4b中显示在“算法3”430的名称下。即使求值器扫描改进了经典扫描的高速缓存行为,但是这种改进至多为运行时间的常因子。相反,时钟扫描在查询/更新组上执行查询/更新-数据的联结以允许渐近运行时间的改进。图4b讨论了扫描算法本身。在下一幅图中详细地涵盖了查询/更新-数据的联结。已知对多个选择谓词交替地求值对于低等级优化是有用的。的确,多个操作交织地求值可以创建高速缓存局部性最大化的附加机会。不过,在存在写入的情况下,活动操作的不受拘束重新排序和交替可能损害一致性。因此时钟扫描在读写操作之间进行了区别, 并且批量地独立执行读或写操作的每一类。即使在写操作繁重的工作负荷下,这也为读操作创建了大的交替机会。该算法观念的高层次展示440显示在图4b中。该算法在分段上连续地运行两个循环扫描一个读扫描442,一个写扫描444。读指针不能超过写指针,反之亦然,也就是说, 读指针总是在写指针后少于一个循环的某个步长。写指针严格地以到达次序执行操作。不难验证,如果该算法只在记录0激活操作,无论查询被执行的次序如何,读指针将总是看到一致的快照。为了更高的高速缓存局部性,算法3给出的时钟扫描实际上将两个逻辑指针合并为单一的物理指针。在无限循环的每次迭代,它首先刷新输入队列并为活动查询和更新创建联结计划。然后,它执行该分段的实际组块方式扫描,将每个组块的记录与查询组和更新组联结。时钟扫描算法不仅对操作重新排序,而且通过执行查询/更新-数据的联结真正地交替执行它们。在这种语境中,联结是若干谓词对若干记录的、与仿佛对每个记录执行了每个查询/更新时产生相同结果元组集的任何求值。查找最可能的联结策略即最可能的多查询计划的任务被委托给多查询优化程序。图6介绍了这样的多查询优化程序的简单而有效的实施。时钟扫描的运行时间复杂度由这些联结确定。图5^恥和5c讨论了两种类型的联结算法,也就是“索引联合联结”和“索引联合更新联结”。时钟扫描允许渐近地优于求值器扫描的性能,因为正如以上陈述, 它使查询重新排序和交替以执行查询/更新-数据的联结。术语查询-数据联结已经由 Chandrasekaran 等杜撰(参考 S. Chandrasekaran and Μ. J Franklin Streaming queriesover streaming data. In Proc. VLDB,02,2002),并且基于了将一组未决的查询解释为谓词关系的观念。后文将讨论这两种联结算法。本发明实施联合联结的灵活和一般解决方案是对谓词编制索引。因此,基于短期的谓词索引的自觉使用高速缓存的查询-数据联结索引联合联结510被实施为图fe所示的“算法4”。实现自觉使用高速缓存的方式为强制扫描线程在指派的计算核中执行从而创建硬亲和力;以及从尺寸与指派的计算核专用的一级或多级内存高速缓存相容的组块中的关系表分段取回数据以防止高速缓存遗漏。因此,自觉使用高速缓存是一种编程方式,在源代码的每个新行人们都不得不考虑对高速缓存使用的影响如何。因此它不仅关系到OS/硬件而且还是驱动如何编写源代码的主要方面。谓词索引将单属性值映射到一组查询。例如,三个查询ql :age = 12、q2 :age = 27以及q3 :age = 27可以以多散列映射编制索引,当探查有age = 27的记录时返回{q2 ; q3}。范围谓词比如30 < age < 50可以以支持尝试或尝试查询的任何空间索引结构编制索引,即在计算几何、模式匹配和需要快速确定若干间隔中哪一个重叠某点的其他应用程序中发出的查询。这样的结构是如“间隔跳跃列表”,旨在发现重叠某点的全部间隔的数据结构。图如显现了索引联合联结的数据结构520。对每个查询严格地存在着一条访问通道。要么查询的谓词之一是某谓词索引的一部分,要么该查询是无索引的查询集的一部分。 由于这构成了查询集的划分,所以以每个记录沿着每条访问通道即每个索引加上无索引的查询集,并且联合结果元组,产生了与对每个记录执行每个查询时相同的结果关系。算法4 直接来自这种观察。注意,把执行查询的全部结果都放入公共输出队列给出了联合语义。索引联合联结的最不利运行时间的复杂度,即每个记录匹配每个索引,几乎等于对每个记录执行每个查询,如同经典扫描和求值器扫描的情况。不过,索引联合联结对于任何合理选择的谓词组都更快,因为探查某索引立即把全部不匹配的查询排除在考虑之外。 运行时间受探查该索引的成本制约,它为常数或为对数。这类似于传统查询处理中嵌套循环联结与索引嵌套循环联结之间的差异。对于大的查询集,加速结果是引人注目的。不同于给定的伪码描述算法4,实际优化的实施使索引探查向量化,即它将整个组块而不是单个记录传递给索引的探查函数。这就给出了显著更高的数据和指令的高速缓存局部性。就索引而言,本发明当前对于域很小的属性(如性别)实施锯齿状阵列,对于等式谓词实施具有线性探知的链式散列索引,以及对于范围谓词实施包装的1维R-Tree(参考:A. Guttmain ;R-Tree adynamic index structure for spatial searching ;in Proc. SIGMOD'84,1984)。这些简单的索引结构证明,由于其数据和指令高速缓存局部性高所以具有比某些其他更复杂的结构更好的性能。索引查询的简单实例530显示在图恥中,查询优化程序例如根据由扫描线程收集的内部统计以及通过分析具体的查询集,可以决定需要三种查询索引。首先,在这种情况下,具有对“起飞机场”属性的谓词的全部查询都一起以第一索引531编制索引。然后,具有对“到达机场”属性的谓词的全部剩余查询都一起编制索引到第二索引532中。最后,以判定“航空公司”属性的查询的最后索引被一起编制索引到索引533中。最后的查询Q6534 由优化程序估算而不值得编制索引。因此,由于索引多个记录535才有可能快速地检索。索引联合更新联结540被实施为图5c所示的“算法5”。在繁重的更新负荷下,很方便对更新也使用谓词索引。问题是更新必须以串行化的次序执行并被表示为时间戳。使得这项任务难以高效进行的是以下事实位置的状态在每次更新之后可能改变,从而改变了匹配更新的集合。在算法5中给出的索引联合更新联结解决了该问题。它维持着无索引的INSERT 的队列iq,以及一组谓词索引is,而us包含无索引的UPDATE和DELETE。函数PerfUpdates 550是先前部分中所示的索引联合联结的扩展。它收集了与s 个记录匹配的全部更新的集合M。然后,它以大于或等于t的最低时间戳寻找可能有的属于M的更新u,并且执行它。变量t初始为0并确保按时间戳次序执行更新如下。如果u是 DELETE,因为位置已空所以递归结束。否则,该函数对于t = u. timestamp+1递归。这确保了 v. timestamp等于或大于u. timestamp的任何更新ν都将不会对已更新的记录执行,即使ν保留在索引中并当函数递归时可能在M中重复出现。当t变得大于任何合法时间戳时索引联合更新联结进至下一个位置。当且仅当该位置被占用但是没有以小于或等于t的时间戳的匹配更新存在,或者该位置为空但是在iq中没有插入操作剩余时,这才发生。至于性能,能够注意到,在最不利情况下,当每次调用PerfUpdates时,只有 UPDATE要被联结并且这η个UPDATE的每一个都与每个记录匹配。由于|M|小于或等于n, 递归的深度高至η并且最不利运行时间复杂度对于m个记录是0(n2女m)。在现实中,典型情况下M将包含0或1个更新,所以运行时间受探查这些索引的成本制约,它为η的常数或为对数。在我们优化的实施中,“递归”仅仅是对t的赋值和转移语句。图6讨论了旨在规划先前附图中介绍的这些联结的多查询优化程序。术语多查询优化传统上是指在全局(多)查询规划中,以中间结果即部分选择和联结的共享和流水线为目标,在一组查询当中发现公共子表达式的实践(参考T.K. Sellis ;Multiple-query optimization. ACMTODS, 13 (1) :23_52,1988 ;以及参考S. Harizopoulos et al. ;Qpipe :A simultaneously pipelined relational query engine ;In Proc. SIGMOD’ 05,2005)。这样的方法适用于运行时间长的复杂查询的小集合。与之相反,本发明被设计为用于运行时间短的简单查询的大集合。这里的最优化问题包括查找使先前给定的联结算法的成本即运行时间最小的一组谓词索引。同样,多查询最优化在这里实际上意味着查询和更新,因为它们以严格相同的方式编制索引。在任何情况下,该问题都是NP (非确定性多项式时间)难度,因为特殊情况“查找覆盖全部查询/ 更新的谓词索引的最小集合”已经是最小覆盖集合的事例。给定了查询/更新计划的短期寿命,典型情况下1秒钟,查找最佳解决方案是不可能。所以,优化程序转而使用贪婪算法,即“算法7”610。在每次迭代,算法对给出最高收益的属性建立索引,然后不再考虑被该索引覆盖的全部查询/更新。收益函数620按照图 6所示定义。它基于以下观念。接触某查询/更新q与一定的开销相关联,即必须避免的转移、 存取属性值等。在探查了对a的谓词索引之后接触q的概率是q关于a的选择性。如果q 不具有对a的谓词,此概率是1。那么该收益是给定了对a的索引后,Q中不是必须接触的操作的期望数目。显而易见,使这个数目最大化就使期望要被接触的操作的数量最小化。以经验得到的值thresh(2. 5)防止了优化程序建立不受益的索引。为了计算收益度量并拾取适当的谓词索引集,优化程序需要估算每个谓词的选择性。本发明保留了仅仅通过扫描数据就能够高效维护的一小组内部统计记录数量、每个属性的空值数量以及每个属性不同值的数量。为了计算这些内部统计,本发明使用了简单然而有效的技术称为线性或概率计数(参考:P. Flajolet and G. N. Martin ;Probabilistic counting algorithms for data base applications. J.Comput.Syst. Sci. ,31(2) 182-209,1985 ; , # # :K.-Y. Whang et al. Alinear-time probabilistic counting algorithm for database applications ;ACMTODS. 15(2) :208-229,1990)。概率计数算法被实施为定期统计查询的副作用,对于扫描算法它仅仅是无条件的查询。图7讨论了关于持久性。对于持久性,本发明使用了预写式日志和检查点技术。在任何时间,检查点都以模糊快照710的形式被保留在磁盘上,即每个内存分段720的一组有时间戳的快照,通过无条件快照查询735得到。对记录执行快照查询时,将该记录复制到反转缓冲区730,它将这些记录异步地写回磁盘。
通过以循环方式调度对分段的快照查询,对于永远具有η个内存分段的检查点的情况,η+1个磁盘空间分段便足够。不变规模的反转缓冲区确保了可预测性。由控制器线程将数据写到磁盘。在崩溃后,对于每个分段并发地进行恢复。首先,从磁盘加载快照分段,然后重放日志。实施了逻辑的重做日志,它极为高效但也暗示了自动提交模式,即不存在由系统管理的提交和回退。系统执行用户所请求的任务而没有能力确认/取消。通过向日志重放添加物理日志和撤销步骤,获得对全原子性的扩展。图8显示了实验结果,它们符合背景技术部分和图1讨论的本发明的目标。以本发明的数据仓库获得的结果与已经被调优的某商业上已面世的关系数据库的结果进行对比, 所以实现了公平对比。已经在期望被用于实施存储节点的类型的16核机器上进行了实验。它由四个商业上已面世的四核处理器建成,具有32GB(吉字节,即23°字节)的主存储器,由RAM(随机存取存储器)模块形成,具有以667MHz (兆赫兹,即IO6赫兹)运行的DDR2(双倍数据速率)输出总线。那么可得到超过42GB/秒的累积存储器带宽。每个核都具有2. 2GHz(109赫兹)的时钟频率,用于数据和指令的Ll高速缓存具有两倍的641^ 1°字节)的存储器,以及512kB的L2高速缓存。该机器运行着64位的Linux SMP(对称式多处理)核作为操作系统(OS)。该实验已经运行了先前讨论种类的15GB的数据存储表,即由GDS似的AMADEUS 在旅游业中使用的“机票”视图。为了验证本发明的目标得到满足,以可变更新负荷对于由以上GDS所使用种类的混合工作负荷已经测量了以查询/秒计的最大查询吞吐量。这对应于曲线图810,其中曲线812相对于本发明并显示出查询吞吐量几乎不受0-100的范围内并发更新数量的影响, 而对于商业数据库的曲线814,在执行的更新多于每秒几个后马上就快速下降。同样,如图820所示已经对于合成的可变只读工作负荷测量了吞吐量,其中吞吐量对照合成工作负荷的参数绘制,它表示查询的多样性。虽然对于标准的工作负荷,商业数据库查询吞吐量拟4与本发明的吞吐量接近,但是它然后下降得比本发明的吞吐量822显著更快。比绝对数量更引人注目的是这些曲线的形态。它们的确与图1的那些曲线匹配。因此本发明满足了指定的目标并以最少的管理工作保证了显著更高的吞吐量和更少的等待时间数,即使工作负荷波动或迅速地进展。由于根据本发明的数据仓库的可缩放性,如果必要,通过仅仅添加硬件也能够简单地满足吞吐量和等待时间目标。总之,作为单一存储节点,本发明是为不可预测工作负荷提供可预测性能从而允许实时数据挖掘的数据管理系统。为此,它是无锁定和无索引的架构,有能力以可预测性能对单一关系表执行大量非SOL解析的查询。它还是基于协同全扫描的主存储器数据管理工具。由该工具处理的数据没有被编制索引,而是这些查询/操作谓词被编制索引,读写工作负荷皆是如此,然后按批量处理。根据本发明的存储节点在分段层次是一致的。某分段为专用于由CPU核运行的给定时钟扫描算法的数据集。一致性意味着任何读取请求将不是看到某给定写入请求完全应用到该分段就是根本没有应用。为了达到此目的,使用这两个指针第一个指针负责写入而第二个指针负责读取。只在扫描开始时即在记录0激活查询/操作的配置保证了以上一致性得到满足。
效率首先从查询/操作的索引编制获得。为此,根据所支持的查询算子创建了不同种类的索引。因此,对于等式或对于范围建立了不同的索引。通过在连续数据全扫描语境中使用硬亲和力、NUMA距离的最小化以及自觉使用高速缓存查询的索引和处理,也获得了效率。全扫描此外还允许收集小规模的内部统计,对记录数、空值数和不同值数概率地计数,这些统计能够高效地用于CPU高速缓存管理和建立查询/操作索引。基于全扫描的方法也有利于持久性,因为它允许在系统上以低开销执行模糊检查点。查询的汇聚比如求和、计数、最大值或最小值也都能够被高效地执行。作为分布式系统,本发明扩展了单存储器模型,允许缩放性、可用性、大规模的分区以及节点专用化。为了达到此目的,实施的汇聚层被用于将这些查询路由到适当存储节点,以及合并从它们返回的结果的目的。因此实现了缩放性,由于汇聚层允许建立具有数百个存储节点的场地,它能够存储比单节点多得多的数据集。获得了可用性,因为存储节点被组织为复制组,其中该组的每台机器都容纳相同的数据。然后,如果某机器变为有故障,仍然可以从该组的其他复制品得到数据。通过容纳不同数据的多个复制组实现了大规模的横向分区。然后,汇聚层的路由节点能够在该查询表现力充分时跳过某些复制组;从而不向它们发送已知对这个查询将不返回结果的查询。那么不同的分区策略是可能的。也能够进行节点专用化。对复制组内的节点能够进行不同的配置即使它们容纳相同的数据。例如,某些节点可以具有适宜的结构更好地处理范围查询,而其他节点能够建立结构更好地处理类似等于谓词。
权利要求
1.一种在数据仓库的存储节点中存储和检索数据的方法,包括在存储节点的数据存储装置中存储关系表的至少一个分段的步骤,所述数据存储装置至少包括处理器核及其相关联的主存储器,其特征在于,该方法包括下列步骤在处理器核的每个相关联的主存储器中存储单个分段;从所述处理器核运行专用于扫描所述分段的一个扫描线程;连续并全面地扫描所述分段;接收和处理成批的查询和更新操作;在每次数据扫描开始时为一批次的查询和更新操作编制索引;联结一批次的查询和更新操作到所述分段的与编制了索引的查询和更新操作的谓词匹配的检索的数据记录;只要所联结的数据记录的数据被扫描线程在扫描所述分段时检索到,就渐进地完成一批次的查询和更新操作。
2.根据权利要求1的方法,其中,所述扫描线程执行时钟扫描的算法G40),包括穷尽地扫描所述分段的写指针(444)和读指针042),以便在每个扫描循环分别地处理一批次中全部未决的查询和更新操作;其中所述写指针和读指针允许在所述读指针能够读取所述分段的数据记录之前,写入所述分段的数据记录;其中在扫描循环开始时激活全部查询操作;其中全部更新操作或者全面地应用到或者根本不应用到所述分段的数据记录。
3.根据任何一个前面的权利要求的方法,其中,所述更新操作包括自/向所述分段修改、删除和插入数据记录。
4.根据任何一个前面的权利要求的方法,其中,在扫描所述关系表分段的同时,所述扫描线程收集内部统计,该扫描线程对所述分段的给定属性的当前查找的许多截然不同的值、许多记录以及许多空值进行计数,并且从这些内部统计建立查询索引。
5.根据先前权利要求的方法,其中,为了收集统计所述扫描线程对所述分段的许多记录、许多空值以及记录中出现的许多截然不同的数值进行计数。
6.根据四个之前的权利要求中任何一个的方法,其中,在数据记录内容上建立的内部统计被用于建立不同类型的查询索引。
7.根据任何一个前面的权利要求的方法,包括下列步骤在扫描所述分段的同时从记录中提取值;至少执行以下计算中的任何一项属性值求和、查找属性最小值和查找属性最大值、对非空值计数;通过提供至少所述计算的结果来完成查询。
8.根据任何之前的权利要求的方法,其中,所述扫描线程建立扫描所述分段时数据记录的快照,并且其中数据记录的快照在完成时被存储在持久存储器中。
9.根据先前权利要求的方法,其中,所述扫描线程在扫描所述分段的同时在持久存储器中保持当前事务处理的逻辑日志文件。
10.根据先前权利要求的方法,其中,通过重新加载最近完成的快照并重放当前事务处理的日志文件而获得主存储器的持久性。
11.根据先前权利要求的方法,其中,所述分段被整体包括并保持驻留在主存储器中。
12.根据先前权利要求的方法,其中,所述扫描线程被强制在指派的处理器核中执行,以及从组块尺寸与所述指派的处理器核专用的一级或多级内存高速缓存相容的所述分段取回数据以防止高速缓存遗漏。
13.一种数据仓库的存储节点,至少包括处理器核及其相关联的主存储器、至少包括某分段的关系表,其特征在于,所述存储节点被安排为使得所述主存储器存储一个单个分段;所述处理器核运行专用于扫描所述分段的一个扫描线程;所述扫描线程连续并全面地扫描所述分段;接收和处理成批的查询和更新操作;一批次的查询和更新操作在每次数据扫描开始时被编制索引;一批次的查询和更新操作被联结到所述分段的与编制了索引的查询和更新操作的谓词匹配的检索的数据记录;只要所联结的数据记录的数据被扫描线程在扫描所述分段时检索到,一批次的查询和更新操作就被渐进地完成。
14.一种分布式数据仓库,包括存储层,包括根据先前权利要求的多个存储节点;汇聚层,包括汇聚器节点,旨在将成批的查询和更新操作路由到存储节点并合并由存储节点返回的结果。
15.根据先前权利要求的分布式数据仓库,其中,所述存储层被组织在存储节点组中,组内全部存储节点都存储关系表的相同分段,并且其中存储节点组存储不同的分段集。
16.根据两个之前的权利要求中任何一个的分布式数据仓库,被安排为在扫描每个分段的同时从记录中提取值;汇聚这些值;至少执行以下计算中的任何一项属性值求和、查找属性最小值和查找属性最大值、对非空值计数;通过提供对所述汇聚值执行的计算的结果来完成查询。
17.根据三个之前的权利要求中任何一个的分布式数据仓库,其中,复制组被专用于处理特定的查询操作。
18.根据四个之前的权利要求中任何一个的分布式数据仓库,其中,所述汇聚层被安排为仅仅将特定批次的查询和更新操作路由到对应的专用存储节点。
19.根据五个之前的权利要求中任何一个的分布式数据仓库,被配置为使得专用存储节点被组织为加速类似等于和类似范围的谓词的处理。
全文摘要
公开了一种在数据仓库的存储节点中存储和检索数据的方法以及在主存储器中存储关系表的至少一个分段的数据仓库的存储节点。所述存储节点包括至少一个运行至少一个扫描线程的计算核,每个都专用于扫描所述至少一个分段之一。该存储节点的特征在于至少一个扫描线程唯一、连续且穷尽地扫描所述关系表的专用分段。该存储节点接收和处理对于所述关系表至少一个分段的成批的查询和更新操作。该扫描线程在每次数据扫描开始时对一批次的查询和更新操作重新编制索引。然后,独立地将一批次编制了索引的查询和更新操作联结到所述分段的与编制了索引的查询和更新操作的谓词匹配的数据记录,使得只要所联结的数据记录被扫描线程扫描所述分段时检索到,就渐进地完成一批次编制了索引的查询和更新操作。这允许在一批次的查询和更新操作之间使主存储器中数据记录的共享和存取最大化。
文档编号G06F17/30GK102576369SQ201080047405
公开日2012年7月11日 申请日期2010年8月23日 优先权日2009年8月24日
发明者C·弗罗里芒德, D·福泽, D·科斯曼, G·加尼基斯, G·阿龙索, J·米耶, P·昂特布朗纳 申请人:阿玛得斯两合公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1