基于FPGA片内BRAM的哈希连接加速方法及系统与流程

文档序号:18409664发布日期:2019-08-10 00:52阅读:400来源:国知局
基于FPGA片内BRAM的哈希连接加速方法及系统与流程

本发明涉及数据库加速领域,具体地说是一种基于fpga片内bram的哈希连接加速方法及系统。



背景技术:

现代社会中企业的商业决策、金融系统的证券交易等越发依赖高效率、低延迟的数据库系统,尤其在数据查询、数据分析环节要求很高的实时性。在关系型数据库中,join算子作为一种需频繁执行的操作,要占用相当多的cpu计算资源。常见的join算子包括排序归并连接(sortmerge-join)、嵌套循环连接(nestedloop-join)等等。但随着数据库规模的不断增长,对于排序归并连接,若两个表在施加了目标sql中指定的谓词条件后得到的结果集很大而且需要排序,则排序合并连接的执行效率不高;而对于嵌套循环连接,如果驱动表所对应的驱动结果集的记录数很大,即便在被驱动表的连接列上存在索引,此时使用嵌套循环连接的也存在执行效率不高的问题。上述两种join算子的软件实现方案需要占用大量的cpu计算资源,当数据量较大时,运算与时间成本往往很高。

为解决上述两种join算子的复杂度问题,大型数据库引进了哈希连接(hash-join)算子:哈希连接中,优化器根据统计信息,首先选择两个表中较小的表,在内存中建立这张表的基于连接键的哈希表;优化器再扫描表连接中较大的表,将大表中的数据与哈希表进行比较,如果有相关联的数据,则将数据添加到结果集中。通过hash运算,可将时间复杂度从二次减少到线性,但仍需占用较多的cpu计算与i/o资源。

如何克服哈希连接软件方案中占用较多的cpu计算与i/o资源的问题,是需要解决的技术问题。



技术实现要素:

本发明的技术任务是针对以上不足,提供一种基于fpga片内bram的哈希连接加速方法及系统,来解决如何克服哈希连接软件方案中占用较多的cpu计算与i/o资源的问题。

第一方面,本发明提供一种基于fpga片内bram的哈希连接加速方法,通过多个通道并行的将多个维度表或同一个维度表的多个列连接至事实表,包括:

s100、在哈希连接构建阶段,在fpga内为每个维度表配置对应的通道,计算每个维度表的列数据哈希值生成哈希表,并将哈希值相同的维度表的列数据链接至同一个链表生成地址表,并通过fpga片内bram存储上述哈希表和地址表;

s200、在哈希连接探测阶段,将事实表路由至对应通道,计算事实表的列数据哈希值,并将匹配的事实表的行数据与维度表的行数据进行连接。

作为优选,步骤s100包括如下分步骤:

s110、根据连接条件将维度表按顺序流式的输入fpga内,并在fpga内为每个维度表配置对应的关联通道;

s120、通过fpga为每个维度表提取对应的数据库页单元,并通过fpga片内bram存储数据库页单元;

s130、通过fpga计算每个维度表的列数据哈希值,并将上述哈希值存储于哈希表;

s140、将哈希值相同的维度表的列数据链接至同一个链表,并将上述链表存储于地址表。

作为优选,每个通道配有专有资源,所述专有资源允许在哈希表的探测阶段并行处理上述配置的所有通道。

作为优选,s200包括如下步骤;

s210、通过ffpga提取并验证事实表的列数据,根据匹配要求将事实表的列数据路由至对应的通道;

s220、在每个通道同步对事实表的列数据进行哈希计算,并基于事实表的列数据哈希值对事实表的列与维度表的列进行验证,验证成功后,执行步骤s230;

s230、将事实表的行数据流式的与维度表的行数据进行对比匹配,如果符合配对条件,对事实表的行数据与维度表的行数据进行连接,如果配对不成立,丢弃对应的事实表行数据。得到连接结果,并将连接结果格式化为4kb的数据库页单元。

作为优选,步骤s220中在每个通道同步对事实表的列数据进行哈希计算,并基于事实表的列数据哈希值对事实表的列与维度表的列进行验证,包括:

计算每个事实表的列数据哈希值,并将事实表的列数据哈希值传送至哈希表进行验证,判断事实表的列数据哈希值与维度表的列数据哈希值是否相同;

如果事实表的列数据哈希值与维度表的列数据哈希值相同,将事实表的列数据传送至地址表,判断事实表的列数与维度表的列数据是否相同。

作为优选,步骤s230中对事实表的行数据与维度表的行数据进行连接后,将连接结果格式化为4kb的数据库页单元。

在上述实施方式中,将4kb的数据库页单元发送至数据库管理系统用于做后期的分析处理。

第二方面,本发明提供一种基于fpga片内bram的哈希连接加速系统,包括配置于pfga上的:

fgpa片内bram,用于存储哈希表、地址表和数据库元单元;

多个通道,每个通道配有专有资源,所述专有资源允许在哈希表的探测阶段并行处理上述配置的所有通道;

哈希计算模块,用于计算维度表的列数据的哈希值;

提取模块,用于为每个维度表提取数据库页单元;

抽取/哈希模块,用于将事实表匹配至对应通道内,并用于计算每个事实表的列数据哈希值;

验证模块,与哈希表与地址表配合,用于对事实表的列与维度表的列进行验证;连接模块,用于通过连接函数将匹配的事实表的行数据与维度表的行数据进行连接;

控制模块,用于通过状态机的方法协调上述各个模块的工作,包括解析来自数据库管理系统的指令,以及控制数据流入、哈希计算、bram的数据访问。

作为优选,验证模块为具有如下功能的模块:

基于哈希表,根据事实表的列数据哈希值,判断事实表的列数据哈希值与维度表的列数据哈希值是否相同;

如果事实表的列数据哈希值与维度表的列数据哈希值相同,基于地址表,判断事实表的列数与维度表的列数据是否相同。

本发明的基于fpga片内bram的哈希连接加速方法及系统具有以下优点:

1、本发明fpga从系统内存中检索最新数据,以高度并行性执行表连接操作,可实现相比传统软件方案数倍的性能加速;

2、在fpga内进行内进行哈希计算,并将哈希表和地址表存储于fpga片内的bram,且fpga片内的bram可以提供快速查找功能,从而直接将哈希算子在fpga内部运行,而不需外接ddr存储单元,适应了处理响应要求快的应用;

3、由于主要模块存储在fpga片内的高速blockram中,不需频繁地访问外部主存,克服了cpu软件方案中的内存瓶颈。

附图说明

为了更清除地说明本发明实施例中的技术方案,下面将对实施例中描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

下面结合附图对本发明进一步说明。

附图1为实施例1基于fpga片内bram的哈希连接加速方法流程框图;

附图2为实施例1基于fpga片内bram的哈希连接加速方法中哈希连接构建阶段的工作原理框图;

附图3为实施例1基于fpga片内bram的哈希连接加速方法中哈希连接探测阶段工作原理框框;

附图4为实施例1基于fpga片内bram的哈希连接加速方法中哈希连接的原理框图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。

需要理解的是,在本发明实施例中的“多个”,是指两个或两个以上。

本发明实施例提供基于fpga片内bram的哈希连接加速方法及系统,用于解决如何克服哈希连接软件方案中占用较多的cpu计算与i/o资源的技术问题。

实施例1:

如附图1-4所示,本发明的基于fpga片内bram的哈希连接加速方法,通过多个通道并行的将多个维度表或同一个维度表的多个列连接至事实表,包括:

s100、在哈希连接构建阶段,在fpga内为每个维度表配置对应的通道,计算每个维度表的列数据哈希值生成哈希表,并将哈希值相同的维度表的列数据链接至同一个链表生成地址表,并通过fpga片内bram存储上述哈希表和地址表;

s200、在哈希连接探测阶段,将事实表路由至对应通道,计算事实表的列数据哈希值,并将匹配的事实表的行数据与维度表的行数据进行连接。

其中,在哈希连接构建阶段,包括如下分步骤:

s110、数据库管理系统根据连接调节将维度表按顺序流式的传输至fpga内,fpga为每个维度表配置对应的通道,每个通道配有专有资源,所述专有资源允许在哈希表的探测阶段并行处理上述配置的所有通道;

s120、通过fpga为每个维度表提取对应的数据库页单元,并通过fpga片内bram存储数据库页单元,数据库页单元大小为4kb,直接从磁盘读入内存,然后流水地传送至fpga;

s130、通过fpga计算每个维度表的列数据哈希值,并将上述哈希值存储于哈希表;

s140、将哈希值相同的维度表的列数据链接至同一个链表,并将上述链表存储于地址表。

在上述步骤中,按顺序流式传输维度表不会增加显着的开销,因为维度表的规模通常比事实表小。

哈希表在fpga内为bitvector的形式,即为位向量。

步骤s200包括如下分步骤:

s210、通过ffpga提取并验证事实表的列数据,根据匹配要求将事实表的列数据路由至对应的通道;

s220、在每个通道同步对事实表的列数据进行哈希计算,并基于事实表的列数据哈希值对事实表的列与维度表的列进行验证,验证成功后,执行步骤s230;

s230、将事实表的行数据流式的与维度表的行数据进行对比匹配,如果符合配对条件,对事实表的行数据与维度表的行数据进行连接,如果配对不成立,丢弃对应的事实表行数据,得到连接结果,并将连接结果格式化为4kb的数据库页单元。并将4kb的数据库页单元发送至数据库管理系统用于做后期的分析处理。

步骤s220中在每个通道同步对事实表的列数据进行哈希计算,并基于事实表的列数据哈希值对事实表的列与维度表的列进行验证,包括:计算每个事实表的列数据哈希值,并将事实表的列数据哈希值传送至哈希表进行验证,判断事实表的列数据哈希值与维度表的列数据哈希值是否相同,如果事实表的列数据哈希值与维度表的列数据哈希值相同,将事实表的列数据传送至地址表,判断事实表的列数与维度表的列数据是否相同。

步骤s230中,基于地址映射的方法对事实表的行数据与维度表的行数据进行连接。

实施例2:

本发明提供一种基于fpga片内bram的哈希连接加速子系统,包括配置于pfga上的fgpa片内bram、多个通道、哈希计算模块、提取模块、抽取/哈希模块、验证模块和控制模块。

其中,fgpa片内bram用于存储哈希表、地址表和数据库元单元。

每个通道配有专有资源,专有资源允许在哈希表的探测阶段并行处理多个上述配置的所有通道。

哈希计算模块用于计算维度表的列数据的哈希值。

提取模块用于为每个维度表提取数据库页单元。

抽取/哈希模块用于将事实表匹配至对应通道内,并用于计算每个事实表的列数据哈希值。

验证模块与哈希表与地址表配合,用于对事实表的列与维度表的列进行验证;连接模块,用于通过连接函数将匹配的事实表的行数据与维度表的行数据进行连接。

控制模块,用于通过状态机的方法协调上述各个模块的工作,包括解析来自数据库管理系统的指令,以及控制数据流入、哈希计算、bram的数据访问。

验证模块通过如下方法实现验证:基于哈希表,根据事实表的列数据哈希值,判断事实表的列数据哈希值与维度表的列数据哈希值是否相同,如果事实表的列数据哈希值与维度表的列数据哈希值相同,基于地址表,判断事实表的列数与维度表的列数据是否相同。

本发明的基于fpga片内bram的哈希连接加速系统可实现实施例1公开的基于fpga片内bram的哈希连接加速方法。

以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1