资讯详情

资讯详情

INFORMATION DETAIL

技术分享:异构计算架构下的数据库查询优化技术

2024-11-01 11:38:38

一、引言  

大数据时代,数据量以惊人的速度增长,对数据库系统的处理能力提出了严峻挑战。传统数据库架构主要依赖于 CPU 进行数据处理,但随着数据规模的不断扩大,CPU 的计算能力逐渐成为瓶颈。CPU 在处理大量数据时,往往需要进行大量的循环和分支判断,导致执行效率低下。此外,随着摩尔定律逐渐失效,CPU 的性能提升速度放缓,难以满足不断增长的计算需求。异构计算架构的出现为数据库系统带来了新的希望。它通过整合 CPU、GPU、FPGA 等不同类型的计算资源,实现更高效的数据处理。GPU 和 FPGA 等加速器拥有大量的计算核心,可以并行处理大量数据,从而显著提升计算效率。例如,GPU 在处理图像和视频数据时具有天然优势,而 FPGA 则可以根据特定任务进行定制化设计,实现更高的性能。

二、技术背景

现有的数据库查询优化技术主要依赖于 CPU,但 CPU 的计算能力有限,难以满足大数据时代的计算需求。传统的数据库查询优化技术主要关注查询语句的语法解析和查询计划的生成,而忽略了底层硬件的执行效率。此外,传统的数据库架构扩展性较差,难以适应不断增长的数据规模。当数据量增加时,传统的数据库系统需要增加更多的 CPU 资源,导致成本高昂且难以维护。异构计算架构的出现为数据库系统提供了新的解决方案。它可以将不同的计算任务分配到最合适的计算单元上,从而提高整体计算效率。此外,异构计算架构还可以根据硬件的变化动态调整计算资源的分配,实现更高的灵活性和扩展性。   贝格迈思自主创新研发的明睿智能数据库系统 BigInsights,通过内置的异构智能计算引擎BrightOS提供自适应异构计算架构的统一软件编程模型和应用程序接口,使得应用程序的开发者只需要编写一次代码,即可以让代码在异构系统上自适应不同的异构硬件CPU、GPU和FPGA等进行动态调度执行。这种将程序开发独立于底层异构硬件的方式使得应用程序开发者可以专注于算法和应用的开发,而无需关心底层异构硬件的执行调度,降低了异构体系结构下编程的复杂度,解决了异构处理器协同并行计算问题。

图1 BigInsights 产品体系

作为BrightOS的核心技术之一,本文所分享的异构计算架构下的数据库查询优化技术已经申请国家发明专利《适配异构计算架构的查询回答方法及计算机设备》(专利号ZL 2024 1 0166035.6),并通过国家知识产权局实质审查和授权(授权公告号CN 118113720 B)。

图2 异构计算架构下的数据库查询优化技术专利证书

三、技术方案概述

针对数据库查询在异构计算架构下所面临的高效适配问题,贝格迈思提出了一种富有创新性的解决方案。其核心思想在于,将原本复杂的数据库查询过程巧妙地转换为一系列数据视图节点的合并操作,并进一步将这些合并操作转化为数值计算的形式,从而使其更加适应于在GPU等高性能异构加速器上执行。这一转换过程不仅充分利用了GPU强大的并行计算能力,还通过优化计算流程,显著提升了查询处理的效率。    通过精心设计的算法,将数据库查询中的各个步骤映射为数据视图节点的合并序列,每一次合并都代表着一次数据的整合与提炼。在这个过程中,我们特别注重减少不必要的数据传输和冗余计算,以确保整个查询过程的高效性。同时,通过将合并操作转化为数值计算,我们能够充分利用GPU在并行计算方面的优势,实现查询速度的飞跃式提升。随着数据量的不断增长,传统数据库查询方法在处理大规模数据集时往往显得力不从心。通过引入异构计算架构和GPU加速技术,不仅解决了查询效率低下的问题,还实现了异构计算资源的弹性扩展。无论是面对海量数据的实时分析,还是复杂查询的快速响应,都能够展现出卓越的性能和稳定性。

四、技术方案详述

本技术方案主要分为两个部分,查询回答流程与编译执行机制。以下将详细介绍这两部分。

1、查询回答流程

查询回答流程主要针对合取查询语句,旨在通过将查询过程转化为数值运算,并利用异构处理器提升查询效率。流程分为以下几个步骤:

(1) 初始节点集构建:

步骤一:获取待回答的合取查询语句。在这一阶段,系统首先需要接收并解析用户输入的合取查询语句。合取查询语句是数据库查询中的一种常见形式,它由基本原子和比较原子通过合取连接符(通常表示为∧)构成。基本原子通常表示数据库中的某个表单或视图,并包含一组变量参数,这些参数与数据库表单中的各个字段相对应。比较原子则用于描述变量参数之间的关系,包括等于、不等于、大于、小于、不小于和不大于等六种比较关系。系统需要准确理解查询语句中的各个成分,以便后续进行节点初始化。    步骤二:根据查询语句中的基本原子和其覆盖的比较原子,构成初始节点集。

  • 在解析完查询语句后,系统需要根据基本原子及其覆盖的比较原子来构建初始节点集。具体过程如下:
  • 基本原子与比较原子的关联:首先,系统需要识别查询语句中的每个基本原子,并确定哪些比较原子被该基本原子的变量参数所覆盖。
  • 初始节点的构建:对于每个基本原子及其覆盖的比较原子,系统将它们进行合取,构成一个初始节点。每个初始节点都对应一个数据视图,该数据视图包含了基本原子中的变量参数以及相关的比较原子所描述的约束条件。
  • 初始节点集的生成:将所有构建的初始节点组合起来,形成一个初始节点集。这个节点集将作为后续查询处理流程的起点。

需要注意的是,在构建初始节点集时,系统需要确保每个初始节点都是有效的,即它们能够准确地反映查询语句中的约束条件和数据关系。此外,系统还需要对初始节点集进行必要的优化处理,以提高后续查询处理的效率。

(2) 判断节点数量:

在成功构建初始节点集后,系统需要判断该节点集中是否仅包含一个节点。这一步骤至关重要,因为它直接决定了后续的查询处理流程。

情况一:节点集中仅有一个节点    如果系统判断初始节点集中仅有一个节点,那么这意味着该节点已经满足了查询的所有条件,因此可以直接将该节点视为查询结果。此时,系统会输出该节点对应的数据视图,这个数据视图即为用户所需的查询结果。在输出数据视图后,查询处理流程随即结束。情况二:节点集中包含多个节点如果系统判断初始节点集中包含多个节点,那么说明查询条件较为复杂,需要通过进一步的合并处理来得到最终的查询结果。在这种情况下,系统会进入下一阶段的处理流程,即根据节点间是否存在跨节点的比较原子来选择合适的合并策略,并进行节点的合并处理。

(3) 判断节点关系:

在确认初始节点集中包含多个节点后,系统需要进一步分析这些节点之间的关系,特别是判断是否存在跨节点的比较原子约束。这一步骤是后续合并节点处理的关键前提。具体来说,系统需要遍历初始节点集,检查每对节点之间是否存在比较原子,且该比较原子的两个变量参数分别位于这两个节点的基本原子中。如果存在至少两个节点之间存在跨节点的比较原子约束,那么系统就需要根据这些约束来计算节点合并的代价,并选择合并代价最小的两个节点进行合并处理。如果不存在跨节点的比较原子约束,则系统可以采用另一种方式来计算节点合并的代价,并选择合并代价最小的节点对进行合并。

(4) 节点合并:

在判断了初始节点集中的节点关系后,系统会根据是否存在跨节点的比较原子来执行不同的合并策略。    情况一:存在跨节点比较原子的情况当系统检测到初始节点集中存在至少两个节点之间具有跨节点的比较原子约束时,它会进入这一特定的合并流程。计算第一合并代价:对于每一对存在跨节点比较原子的节点,系统会计算它们合并的第一合并代价。这个代价的计算是复杂的,它考虑了多个因素,包括但不限于两个节点的记录总数、跨节点比较原子的个数以及一个预设的权衡参数。这些因素共同影响了合并的效率和结果集的构造成本。选择合并节点:在计算出所有可能合并的第一合并代价后,系统会选取其中代价最小的两个节点进行合并。这一选择确保了合并操作能够以最低的成本获得最大的收益。构造第一中间节点:合并过程不仅仅是简单的数据拼接,而是需要转换为基于向量排序和矩阵构造的数值运算。这种转换使得合并操作能够充分利用异构处理器(如GPU)的计算能力,实现高效执行。通过这一转换,系统能够构造出第一中间节点,该节点包含了合并后数据的新视图。情况二:不存在跨节点比较原子的情况如果初始节点集中的节点之间不存在跨节点的比较原子约束,系统会采用另一种合并策略。计算第二合并代价:在这种情况下,系统会计算每两个节点合并的第二合并代价。与第一合并代价不同,第二合并代价的计算主要基于两个节点的记录总数。这种计算方式相对简单,因为它不涉及跨节点的比较原子。选择合并节点:与存在跨节点比较原子的情况类似,系统会选取第二合并代价最小的两个节点进行合并。这一选择同样旨在以最低的成本实现有效的合并。    构造第二中间节点:在不存在跨节点比较原子的情况下,节点合并的过程是通过计算两个节点对应数据视图的笛卡尔积来实现的。这一过程相对直接,不需要进行向量排序和矩阵构造。通过计算笛卡尔积,系统能够构造出第二中间节点,该节点同样包含了合并后数据的新视图。

(5) 更新节点集:

在节点合并阶段完成后,无论是通过跨节点的比较原子合并得到的第一中间节点,还是基于不存在跨节点比较原子情况下合并得到的第二中间节点,系统都会根据这些中间节点来更新节点集。具体更新过程如下:首先,系统会识别出那些在合并过程中被合并的节点,这些节点在初始节点集中将不再保留。接着,系统会将新生成的第一中间节点或第二中间节点添加到初始节点集中,以替代那些被删除的节点。在添加新节点的同时,系统还会对新节点的数据视图进行优化处理。具体来说,系统会删除那些不是查询答案变量且未曾在合并过程中使用的比较原子中出现的列变量。这一步骤旨在精简数据视图,提高后续查询处理的效率。通过不断更新初始节点集,系统能够逐步逼近最终的查询结果。随着合并操作的不断进行,初始节点集中的节点数量会逐渐减少,直至最终只剩下一个节点,该节点即为目标节点,其数据视图即为查询的最终答案。需注意的是,在更新节点集的过程中,通过将节点合并过程转换为基于向量排序和矩阵构造的数值运算,系统能够调用合适的异构处理器来加速合并操作,从而提高整体查询处理的性能。

(6) 循环判断:

在每次节点合并及更新节点集操作完成后,系统需要返回到初始节点集的判断步骤,对更新后的节点集进行新一轮的评估。这一步骤至关重要,因为它决定了查询回答流程的迭代次数和最终结果的准确性。系统首先检查更新后的节点集中是否仍然包含多个节点。如果节点集中的节点数量大于一,说明查询回答流程尚未完成,需要继续进行迭代合并操作。如果更新后的节点集中仍包含多个节点,系统则返回到之前的步骤,重新执行判断节点关系、节点合并以及更新节点集的操作。这一过程中,系统会再次根据跨节点的比较原子或第二合并代价来选择合并的节点,并生成新的中间节点。如果更新后的节点集中只剩下一个节点,这意味着查询回答流程已经成功迭代至最终阶段。此时,该唯一节点即为查询结果的目标节点,系统将输出该节点的数据视图作为查询的最终答案,并结束整个查询回答流程。值得注意的是,在每次迭代过程中,系统都会根据当前的节点集情况动态地选择最优的合并策略,以确保查询回答的高效性和准确性。此外,通过不断地更新节点集,系统能够逐步缩小查询范围,直至最终得到精确的查询结果。查询回答流程通过将复杂的数据库合取查询过程转化为基于向量排序和矩阵构造的数值运算,能够充分利用异构处理器(例如GPU)在并行计算和加速处理方面的优势,显著提升查询效率。此外,节点合并过程经过精心优化,避免了繁琐的传统合并操作,转而采用高效的数值运算方法,进一步加快了查询速度。更重要的是,该流程支持异构处理器的弹性扩展,即使硬件环境发生变化,也无需重新配置或编译系统,从而确保了系统的灵活性和稳定性。

2、编译执行机制

编译执行机制旨在将合取查询回答流程转换为可由异构处理器执行的程序代码,从而充分利用异构计算架构的优势,提升查询效率。本编译执行机制主要基于目标编程模型,巧妙地将查询流程编写成由CPU主控的程序代码。在节点合并这一关键环节中,机制充分利用了编程模型特有的代码块优势,通过内置的设备选择器智能地挑选出当前计算机设备中最合适的异构处理器(如GPU)来高效执行合并过程,从而极大地提升了处理速度。而其他非合并部分,则依然可以采用传统的高级语言代码来实现,保证了代码的兼容性和易读性。更为先进的是,该机制全面支持异构处理器的弹性扩展,这意味着当硬件设备发生变化时,无需繁琐地重新配置或编译整个系统,即可轻松适应新的硬件环境,确保了系统的灵活性和高效性。编译执行机制具体实现步骤如下:

(1) 选择合适的编程模型:

在实现编译执行机制时,首先需要考虑的是选择合适的编程模型。这里我们采用异构统一编程模型,它基于C++语言,并提供了针对多种异构处理器(如CPU、GPU、FPGA)的开放接口;这不仅简化了跨平台开发的复杂性,还使得开发者能够充分利用异构处理器的并行计算能力。

(2) 编写 CPU 主控程序:

在选择了合适的编程模型后,接下来需要编写CPU主控程序。CPU主控程序主要使用C++语言等传统高级语言编写,主要负责流程控制、数据传输等任务。它作为整个查询回答流程的核心,负责协调各个模块的工作,确保查询回答流程能够有序、高效地进行。在CPU主控程序中,会包含对查询回答流程的整体控制逻辑,包括初始化操作、节点合并的触发、中间结果的存储和最终结果的输出等。同时,CPU主控程序还需要与异构处理器进行通信,传输数据和指令,确保节点合并等关键操作能够在异构处理器上正确执行。

(3) 实现节点合并代码块:

节点合并是查询回答流程中的核心操作之一,它决定了查询回答的效率和质量。为了实现节点合并的高效执行,需要使用编程模型特有的代码块来编写节点合并过程。节点合并代码块中包含了具体的合并算法和实现逻辑,它负责将两个或多个节点合并成一个中间节点,并计算出中间节点的数据视图。在编写节点合并代码块时,需要充分考虑异构处理器的特性,如并行计算能力、内存访问模式等,以优化代码的性能。

(4) 设备选择器:

在实现了节点合并代码块后,接下来需要使用设备选择器来选择合适的异构处理器执行节点合并操作。设备选择器可以根据处理器的性能、负载等因素进行选择,以确保节点合并操作能够在最合适的异构处理器上执行。在异构统一编程模型中,设备选择器通常通过查询系统中的异构处理器信息,并根据预设的选择规则(如性能优先、负载均衡等)来选择合适的异构处理器。

(5) 编译与执行:

最后,需要使用编程模型的编译器将程序代码编译成支持多种异构处理器的可执行程序。在编译过程中,编译器会根据编程模型的规范将代码转换成适用于不同异构处理器的机器代码。同时,编译器还会对代码进行优化,以提高其执行效率。在运行时,根据当前计算机设备的硬件设施选择合适的异构处理器执行节点合并操作。这样,当计算机设备的异构处理器发生变化时,不需要重新配置或重新设计和编译系统,只需要通过编程模型的编译器重新编译程序代码即可。这种机制大大提高了查询回答流程的灵活性和可扩展性。    编译执行机制是适配异构计算架构的查询回答方法中关键的组成部分。通过选择合适的编程模型、编写CPU主控程序、实现节点合并代码块、使用设备选择器选择合适的异构处理器以及编译和执行程序代码等步骤,可以确保查询回答流程能够高效、灵活地运行于不同异构处理器上。

五、关键创新点

1、数据库查询转换

在传统的数据库查询回答过程中,查询语句的执行往往依赖于 CPU 的串行处理能力。然而,随着数据量的爆炸性增长,这种处理方式逐渐暴露出性能瓶颈。本技术方案提出了一种创新性的方法,将数据库的合取查询回答流程转换成数据视图节点合并序列的数值计算过程。这一转换的核心理念在于,某些计算过程(如向量列表的排序)在异构加速器(如 GPU)上的执行速度远快于直接在 CPU 中执行。通过利用 GPU 的并行处理能力,可以显著提高合取查询回答的效率,从而满足大数据时代对高效数据处理能力的迫切需求。

2、节点合并优化

在合取查询回答流程中,节点合并是一个至关重要的步骤。传统的节点合并方法往往涉及复杂的逻辑判断和数据处理,导致效率低下。本技术方案对此进行了深入优化,将节点合并过程转换成基于向量列表排序和稀疏矩阵相乘的数值计算过程。这一转换不仅简化了合并操作的复杂度,还充分利用了异构加速器的计算优势。特别是,通过将稀疏矩阵相乘运算化简为不需要乘法运算的矩阵构建,进一步优化了节点合并过程,从而大幅度提高了节点合并的效率。

3、异构处理器弹性扩展

本技术方案引入异构统一编程模型,这是一种基于 C++ 的开放编程模型,支持CPU、GPU和FPGA等多种异构处理器。通过利用异构统一编程模型,我们实现了异构处理器的弹性扩展。在编译执行过程中,可以根据当前机器的硬件设施选择合适的异构处理器来执行节点合并等关键操作。这种灵活性不仅提高了查询回答的效率,还降低了系统对特定硬件的依赖,从而增强了系统的可移植性和可扩展性。同时,当异构设备发生变化时,无需人工重新配置或重新编译可执行程序,大大提高了系统的维护便捷性。

六、技术效果

1、查询效率显著提升

通过创新的查询回答方法,将数据库的合取查询回答流程巧妙地转换成数据视图节点合并序列的数值计算过程。这一过程不仅充分利用了CPU的处理能力,更开创性地引入了GPU等异构加速器来优化节点合并这一关键步骤。通过将合并处理转换成基于向量列表排序和稀疏矩阵相乘的数值计算,尤其是进一步化简稀疏矩阵相乘运算为无需乘法运算的矩阵构建,从而大幅提高了节点合并的效率。这种优化直接导致了查询效率的显著提升,使得数据库系统能够更快速地响应查询请求,提供更为及时和准确的数据支持。

2、异构计算资源实现弹性扩展

通过引入异构统一编程模型,实现了异构计算资源的弹性扩展。异构统一编程模型支持多种异构处理器,包括CPU、GPU和FPGA等,使得数据库系统能够根据需要灵活调用最合适的异构处理器来执行查询任务。当异构设备发生变化时,如新增或更换了更高性能的异构处理器,数据库系统无需进行人工重新配置或编译,即可自动适应这种变化,并充分利用新的异构计算资源来提升查询性能。这种弹性扩展能力不仅降低了系统维护的复杂性,还使得数据库系统能够更好地适应不断变化的硬件环境,持续提供高效的查询服务。

七、结论

依靠敏锐的预见能力和扎实的技术根基,贝格迈思成功打造出具有开创性的明睿智能数据库系统 BigInsights,这一颠覆性的创新成果预示着传统数据库管理模式发生了根本性的变革。BigInsights 中异构智能计算引擎 BrightOS 的研发,在技术层面做出了显著贡献。它打破了传统数据库系统对CPU资源的过度依赖,引入了GPU等异构加速器,从而极大地拓宽了数据库系统在处理复杂查询任务时的能力边界。通过将数据库的合取查询回答流程转换为数据视图节点合并序列的数值计算过程,本方法为数据库系统在异构计算架构下的应用提供了新视角。随着大数据时代的到来,数据库系统面临着前所未有的数据处理挑战。BrightOS不仅提升了查询效率,更实现了异构计算资源的弹性扩展。这意味着,无论硬件环境如何变化,数据库系统都能无需人工重新配置或编译,即可快速适应并发挥最佳性能。这种灵活性和高效性,对于大数据时代下的数据库系统来说,无疑是一个极具吸引力的解决方案。它不仅能够帮助企业更好地应对海量数据的处理需求,还能有效降低运营成本,提升业务竞争力。

产品与服务

解决方案

资源中心

关于我们

联系方式

深圳市南山区粤海街道高新南七道国家工程实验室大楼A1402

0755 - 8670 1822

贝格迈思微信公众号

仅在办公网络环境可见