CN114647635B - 数据处理系统 - Google Patents
数据处理系统 Download PDFInfo
- Publication number
- CN114647635B CN114647635B CN202210332882.6A CN202210332882A CN114647635B CN 114647635 B CN114647635 B CN 114647635B CN 202210332882 A CN202210332882 A CN 202210332882A CN 114647635 B CN114647635 B CN 114647635B
- Authority
- CN
- China
- Prior art keywords
- column
- data
- row
- current
- length
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims abstract description 137
- 238000001914 filtration Methods 0.000 claims abstract description 152
- 230000015654 memory Effects 0.000 claims abstract description 66
- 238000000034 method Methods 0.000 claims abstract description 47
- 230000008569 process Effects 0.000 claims abstract description 40
- 238000003860 storage Methods 0.000 claims description 56
- 238000004458 analytical method Methods 0.000 claims description 48
- 230000006870 function Effects 0.000 claims description 30
- 238000010586 diagram Methods 0.000 description 26
- 238000004364 calculation method Methods 0.000 description 11
- 230000001133 acceleration Effects 0.000 description 9
- 238000007667 floating Methods 0.000 description 8
- 238000012360 testing method Methods 0.000 description 8
- 238000013500 data storage Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000010354 integration Effects 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000007493 shaping process Methods 0.000 description 3
- 101100379633 Xenopus laevis arg2-a gene Proteins 0.000 description 2
- 101150088826 arg1 gene Proteins 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 241001247436 Cerbera manghas Species 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请公开了一种数据处理系统,包括构成异构计算的第一处理器和第二处理器,第二处理器包括多个并行处理第一处理器的原始数据库表数据、且均连接内存控制器的计算单元;各计算单元包括以流水作业方式运行、且均具备独立缓存资源的读取组件、表数据处理组件和写组件。读取组件读取第一处理器的数据库对应的表描述符、过滤条件码流及待处理表数据;表数据处理组件基于表描述符,依次确定待处理表数据的每个行列的位置信息,并根据过滤条件码流和各行列的位置信息对待处理表数据的每一行进行过滤操作;写组件将汇总表数据处理组件的运算结果写入至第二处理器内存中。本申请可支持更多的数据类型和更复杂的逻辑运算类型,可有效提升数据处理能力。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据处理系统。
背景技术
在数据库查询中,当用户所查询的字段在数据库中没有建立索引时,数据库选择使用全表扫描的方式进行查询,其会对数据库中所有的文件进行扫描,进行逐个记录的解析、筛选、过滤操作,该过程会造成极大的CPU消耗,所需查询时间也大幅增加,查询效率较低,严重影响查询性能。尽管在数据库运维中,数据库管理员会对用户常用的查询字段建立索引,来尽量避免开启全表扫描方式。然而建立索引,不仅会增加存储空间的额外开销,而且在数据更新时,还需要同步更新索引信息,无疑会降低数据库写入性能。此外,数据库管理员也无法对所有的字段都创建索引,用户仍不可避免地会遇到因全表扫描而导致的响应延迟的问题。
全表扫描的运算逻辑是典型CPU(central processing unit,中央处理器)消耗性计算,会消耗大量的CPU算力,造成较大地查询响应延迟。在传统纯CPU的SMP(SymmetricalMulti-Processing,对称多处理)体系架构中,要降低因全表扫描所导致的响应延迟,只能通过增加CPU核心数量,提高CPU主频来提升数据库整体性能。但增加CPU核心数量、提升CPU主频的方式会导致功耗的大幅增加,且随着半导体的工艺制程逐渐逼近物理极限,提高CPU核心数量与主频变得越来越困难。
为了进一步提高数据库整体性能,解决因全表扫描影响查询效率的弊端问题,相关技术通过异构计算来实现,相比传统的SMP架构,异构计算将在CPU中大量进行的简单重复运算放入到专用的加速器上执行,在加速器上通过单指令多数据、并行及流水等技术手段实现极高的数据处理能力。但是,相关技术仍然存在数据处理能力差,且支持的数据类型和运算类型较少,无法满足用户对数据库的高性能需求。
发明内容
本申请提供了一种数据处理系统,可支持更多的数据类型,更为复杂的逻辑运算类型,有效提升数据处理能力。
为解决上述技术问题,本发明实施例提供以下技术方案:
本发明实施例提供了一种数据处理系统,包括构成异构计算的第一处理器和第二处理器,所述第二处理器包括多个并行处理所述第一处理器的原始数据库表数据、且均连接内存控制器的计算单元;
每个计算单元均包括以流水作业方式运行、且均具备独立缓存资源的读取组件、表数据处理组件和写组件;
所述读取组件,用于读取所述第一处理器的数据库对应的表描述符、过滤条件码流及待处理表数据;所述表描述符用于记载数据库表的各列存储对齐方式和各列长度信息;
所述表数据处理组件,用于基于所述表描述符,依次确定所述待处理表数据的每个行列的位置信息,并根据所述过滤条件码流和各行列的位置信息对所述待处理表数据的每一行进行过滤操作;
所述写组件,用于将汇总所述表数据处理组件的运算结果,写入至所述第二处理器的内存中。
可选的,所述表描述符包括第一字段和第二字段,所述第一字段用于表示当前列对应的存储对齐方式,以使不同数据类型的数据按照对应的存储对齐方式存储至相应位宽的内存中;所述第二字段用于表示所述当前列的定义长度;
若所述当前列对应的数据类型为定长数据,则所述当前列的定义长度为所述当前列的实际列长度,若所述当前列对应的数据类型为变长数据,所述当前列的定义长度为预设值,则所述当前列的实际列长度存储在数据头部。
可选的,所述读取组件包括读取配置模块和读取数据模块,所述表数据处理组件包括行列解析模块和过滤模块;
所述读取数据模块的接口、所述行列解析模块的接口、所述过滤模块的接口和所述写组件的接口均单独分配独立的RAM内存;
所述读取数据模块,用于将从对应内存中读取的所述待处理表数据,交替存放在数据ping/pong缓存;
所述行列解析模块,用于交替从所述数据ping/pong缓存读取目标表数据,依次解析所述目标表数据页面中的每一行,计算每一行中所需查询的列在所述当前页面中的偏移,并将相应结果交替存放在行位置ping/pong缓存、行长度ping/pong缓存、列位置ping/pong缓存、列长度ping/pong缓存,同时交替复制页面数据到页面ping/pong缓存;
所述过滤模块,用于根据过滤条件,交替从所述行列解析模块的缓存中读取所需数据进行过滤运算,并将过滤结果交替写入至过滤行位置ping/pong缓存和过滤行位置pong/pong缓存。
可选的,所述读取配置模块、所述读取数据模块,所述行列解析模块、所述过滤模块和所述写组件分别配置不同的数据位宽进行数据访问。
可选的,每个计算单元具备独立的HBM存储空间,且每个计算单元均单独与第一HBM控制器和第二HBM控制器相连;
各计算单元通过所述第一HBM控制器从相应的HBM存储空间中读取目标原始数据库表数据,通过所述第二HBM控制器将所述运算结果写入至相应的HBM存储空间中。
可选的,所述表数据处理组件包括多个并行处理通道,以使所述表数据处理组件、所述读取组件和所述写组件的数据处理速度相匹配;
各并行处理通道用于同时从所述读取组件中读取所述待处理表数据的各数据块,并同时对读取的数据块进行相应处理。
可选的,所述表数据处理组件包括行列解析模块,所述行列解析模块通过调用存储器中的行列解析程序执行下述操作:
对所述行列解析模块读取所述待处理表数据的每个数据块,获取当前页面的行数以及各行在所述当前页面的行位置及行长度;
对每一行,确定当前行所需查询的目标列的列偏移和列长度;
基于所述表描述符所记载的最后一个所需查询列的索引位置,判断所述目标列是否为所述当前行的最后一个所需查询列;
若所述目标列不为所述当前行的最后一个所需查询列,则确定所述当前行所需查询的下一个列的列偏移和列长度,直至确定最后一个所需查询列的列偏移和列长度。
可选的,所述行列解析模块还通过调用所述行列解析程序的列信息解析子程序,执行下述操作:
对每一行,初始化列索引信息和所述当前行的第一列的当前位置偏移;
基于所述当前位置偏移,确定所述第一列按照相应数据类型进行存储对齐之后的初始偏移;
根据所述表描述符记载的所述第一列的列长度信息,确定所述第一列所属数据类型为定长数据类型还是变长数据类型;
若所述第一列所属数据类型为定长数据类型,则所述第一列的列偏移为所述初始偏移,所述第一列的列长度为所述第一列的列长度信息的长度值;并根据所述第一列的列长度更新所述当前位置偏移;
若所述第一列所属数据类型为变长数据类型,则若所述当前位置偏移满足偏移更新条件,将所述初始偏移作为所述当前位置偏移;根据从所述当前位置偏移读取的目标字节的数值确定存储长度字节数,根据所述存储长度字节数、所述当前位置偏移和所述目标字节确定所述第一列的列偏移;根据所述存储长度字节数和所述目标字节确定所述第一列的列长度。
可选的,所述表数据处理组件包括过滤模块,所述过滤模块按照不同存储对齐方式,为算术运算创建多个相应数据位宽的算术RAM内存空间,且每个算术RAM存储空间以栈的形式存储中间运算结果;
所述过滤模块为比较运算和逻辑运算创建固定数据位宽的布尔RAM内存空间,且所述布尔RAM存储空间以栈的形式存储布尔运算结果。
可选的,所述过滤模块通过调用存储器中的过滤程序执行下述操作:
通过所述过滤条件码流确定过滤条件个数,并初始化所有栈的栈顶位置;
对所述过滤条件码流中的各操作码,通过当前操作码的运算类型标识符确定当前运算类型,并进行相应的运算处理;
当对所有过滤条件均进行运算处理之后,通过布尔栈的栈顶值判断当前行是否满足过滤条件;
若所述当前行满足过滤条件,则将所述当前行的行位置和行长度存储至缓存中。
可选的,所述过滤模块还通过调用所述过滤程序的运算处理子程序,执行下述操作:
若所述当前运算类型为算术运算或比较运算,获取待处理参数;根据所述待处理参数的标签值确定所述待处理参数的参数类型,并根据参数类型读取所述待处理参数的参数值;所述参数类型为列数据、常量和运算结果;基于所述待处理参数的参数值,执行当前操作码对应的操作函数;若所述当前运算类型为算术运算,将函数结果存储至对应位宽的算术RAM存储空间中,并更新相应栈的栈顶;若所述当前运算类型为比较运算,将函数结果存储至所述布尔RAM内存空间,并更新布尔栈的栈顶;
若所述当前运算类型为逻辑运算,从所述布尔RAM内存空间读取布尔值作为待处参数,执行当前操作码对应的操作函数,将函数结果存储至所述布尔RAM内存空间,并更新所述布尔栈的栈顶。
本申请提供的技术方案的优点在于,由于第二处理器处理的是主机端数据库原生的存储格式数据,因此集成时无需修改数据库存储引擎,易于数据库软件集成且处理效率高,可避免需要CPU进行的格式转换所带来的额外开销,提高了整体性能。通过数据库的表描述符记载的数据存储对齐方式和列长度信息,可将不同数据类型的数据按照相应对齐方式进行对齐存储,从而可支持更多的数据类型;通过计算单元对过滤条件码流进行过滤处理,可支持更为复杂的过滤条件表达式;第二处理器利用多个计算单元对原始数据进行分块并行处理,每个计算单元中各组件通过流水作业方式循环运行可以将全表扫描分割为多个独立的任务同时执行,有效提升数据处理能力,可满足用户对数据库的高性能需求。进一步的,每个计算单元可通过行列解析确定行列位置信息,无需对行数据进行逐个访问,仅读取SQL语句中所需要的数据,避免了对行数据的逐个访问所带来延迟,可进一步提升数据处理效率,提升数据库性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
为了更清楚的说明本发明实施例或相关技术的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据处理系统的一种具体实施方式结构图;
图2为本发明实施例提供的表描述符码流的格式示意图;
图3为本发明实施例提供的过滤条件码流的格式示意图;
图4为本发明实施例提供的计算单元内各模块间缓存示意图;
图5为本发明实施例提供的计算单元内各模块的ping-pong接口工作流程示意图;
图6为本发明实施例提供的计算单元内各模块没有独立缓存时的执行流程示意图;
图7为本发明实施例提供的计算单元内各模块配置独立缓存但不采用ping-pong缓存时的执行流程示意图;
图8为本发明实施例提供的计算单元内各模块配置独立缓存且采用ping-pong缓存时的执行流程示意图;
图9为本发明实施例提供的计算单元内各模块包含的并行通道结构示意图;
图10为本发明实施例提供的行列解析模块和过滤模块无内部并行通道时的流水线执行流程示意图;
图11为本发明实施例提供的行列解析模块和过滤模块设置内部并行通道时的流水线执行流程示意图;
图12为本发明实施例提供的行列解析方法的一种实施方式下的流程示意图;
图13为本发明实施例提供的行列解析方法的另一种实施方式下的流程示意图;
图14为本发明实施例提供的表数据的页存储格式示意图;
图15为本发明实施例提供的一个示意性例子的表数据示意图;
图16为本发明实施例提供的PostgreSQL页面存储原始数据示意图;
图17为本发明实施例提供的列中各行位置解析流程示意图;
图18为本发明实施例提供的过滤模块的工作流程示意图;
图19为本发明实施例提供的PostgreSQL中过滤条件运算逻辑示意图;
图20为本发明实施例提供的一个示意性例子中第一步运算流程示意图;
图21为本发明实施例提供的一个示意性例子中第二步运算流程示意图;
图22为本发明实施例提供的一个示意性例子中第三步运算流程示意图;
图23为本发明实施例提供的一个示意性例子中第四步运算流程示意图;
图24为本发明实施例提供的一个示意性例子中第五步运算流程示意图;
图25为本发明实施例提供的一个示意性例子中第六步运算流程示意图;
图26为本发明实施例提供的一种数据处理系统的另一种具体实施方式结构图;
图27为本发明实施例提供的一种计算单元的一种具体实施方式结构图;
图28为本发明实施例提供的数据处理方法在一种实施方式下的流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别不同的对象,而不是用于描述特定的顺序。此外术语“包括”和“具有”以及他们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可包括没有列出的步骤或单元。
本申请的发明人经过调研发现,在使用FPGA进行数据库异构加速的研究方向上,很多研究机构及企业做出了卓越的贡献。针对数据库异构加速所面临的各种问题,提出了很多创新性的解决方案与思路。一种到数据库加速器的并行计算卸载的相关技术在FPGA中实现了数据库中常见的算子,如过滤、连接、聚合、排序、分组等。同时还封装了供上层调用的库函数及应用层的演示实例。实例论证了在FPGA侧进行异构加速的效能,为FPGA侧的开发思路提供的宝贵的借鉴。但是,在测试使用中,该相关技术存在以下技术弊端问题:1.将数据库的查询语句硬编码到FPGA逻辑中,只能处理特定的SQL语句模板,无法灵活支持用户输入的SQL语句。2.其提供库函数并不针对具体的数据库存储结构,使用时需要将数据库原始的数据结构进行转换,变为为FPGA能够处理的数据格式,而该转换的代价导致整体性能的下降。3.其过滤模块仅能处理整形类型数据的比较运算,无法处理浮点运算与算术运算。另一种相关技术“Database analytics acceleration using FPGAs”,其提出了对动态支持SQL语句的解决方案。较早所提出了灵活支持SQL语句的方案,实现了更改SQL语句时无需更换FPGA程序。但是仍存在以下技术弊端问题:1.仅能够处理定长的数据字段,无法处理带变长的数据字段。2.仅能够支持逻辑运算(与、或、非)与比较运算,无法支持算术运算,且操作符总和不能大于6个。3.需要对全部数据进行逐个处理,一个时钟周期只能处理一个字节,处理效率较低。另一种相关技术“Accelerating data filtering for database usingFPGA”,该技术方案基于MySQL数据库针对全表扫描的数据过滤展开了研究。不仅提出了FPGA侧的设计方案与逻辑架构,还提出了SQL语句中的过滤条件的转码方案,解决了SQL过滤条件与FPGA之间的交互问题。方案实现了MySQL数据库与FPGA板卡之间,通过SQL语句进行交互。为数据库与FPGA之间的连接交互提供了解决方案与思路。但是,该相关技术存在以下技术弊端问题:1.FPGA处理逻辑上,需要读取全部行数据进行逐个处理,过多的访存操作,导致整体加速效果欠佳。根据文中测试报告,最多能够得到1.67倍的整体加速效果,且随着行平均长度的增加,加速效果逐渐下降,当行平均长度大于500字节时则几乎没有加速效果。2.过滤条件只能处理逻辑与比较运算,无法处理算术运算以及带括号的复杂表达式。3.所支持的数据类型,只能支持整形,日期,字符类型,无法支持浮点数类型数据。4.提出的方案,需要采用自定义的数据存储格式,无法支持数据库原生的数据库存储格式,较难具备商业上的推广和应用。
鉴于此,针对上述相关技术存在的问题,本申请通过下述技术方案可支持更多的数据类型和更为复杂的过滤条件表达式,实现了较高的数据处理能力,从而解决上述现有技术的弊端问题。下面详细的说明本申请的各种非限制性实施方式。
首先参见图1,图1为本发明实施例提供的数据处理系统在一种具体实施方式下的结构框架示意图,本发明实施例可包括以下内容:
数据处理系统包括第一处理器1和第二处理器2,第一处理器1和第二处理器2构成异构计算,也即第一处理器1和第二处理器2构成异构计算平台,第一处理器1为主机侧,第二处理器2处理第一处理器1的某些数据。第一处理器1和第二处理器2可以包括一个或多个处理核心,比如4核心处理器、8核心处理器,第一处理器1可为控制器、微控制器、微处理器或其他数据处理芯片等。第二处理器2可以采用FPGA(Field-Programmable Gate Array,现场可编程门阵列)。
在本实施例中,第二处理器2用于处理第一处理器1中需要耗费大量计算资源的原始数据,如数据库表数据,也就是说,第二处理器2所处理的数据是第一处理器1的原始格式数据,无需进行格式转化。为了提高数据处理效率,第二处理器2可包括多个计算单元,每个计算单元并行处理第一处理器的原始数据库表数据,对于同一份原始数据库表数据,各计算单元分块读取原始数据库表数据,为了便于数据读取和数据存储,每个计算单元均连接第二处理器的内存控制器,如HBM(High Bandwidth Memory,高带宽存储器)控制器。第二处理器2可用于处理第一处理器1的PostgreSQL、MySQL、Oracle、DB2、SQLServer等任意一种数据库数据,也即第二处理器2是围绕第一处理器1的数据库如PostgreSQL的原生存储结构进行开发。
为了提高第二处理器2的数据处理能力,对每个计算单元的各组件配置进行了逐步的迭代优化,每个计算单元20均包括读取组件201、表数据处理组件202和写组件203,读取组件201、表数据处理组件202和写组件203以流水作业方式运行,且读取组件201、表数据处理组件202和写组件203均具备独立缓存资源,独立缓存资源为第二处理器2上的存储资源,例如可为RAM(Random Access Memory,随机存取存储器)。
在本实施例中,读取组件201用于读取第一处理器1的数据库对应的表描述符、过滤条件码流及待处理表数据。其中,表描述符用于记载数据库表的各列存储对齐方式和各列长度信息;列长度信息为列的实际长度或定义长度,实际长度即为当前列的真实长度,定义长度可标识当前列为变长数据类型以及存储当前列的真实长度的位置信息。作为一种可选的实施方式,表描述符可包括第一字段和第二字段,第一字段用于表示当前列对应的存储对齐方式,不同数据类型的数据按照对应的存储对齐方式存储至相应位宽的内存中;第二字段用于表示当前列的定义长度;若当前列对应的数据类型为定长数据,则当前列的定义长度为当前列的实际列长度,若当前列对应的数据类型为变长数据,当前列的定义长度为预设值如负一,则当前列的实际列长度存储在数据头部。为了便于查询,表描述符还可记载每个行所需查询的最后一个列的索引信息,如图2所示。待处理表数据为相应计算单元的读取组件201所读取的原始数据库表数据的数据块,也就是说,第一处理器1的原始数据库表数据会被分割为多个数据块,每个数据块被相应计算单元的读取组件201所读取。为了避免各计算单元对内存的竞争,每个计算单元还可具备独立的存储空间,相应的,读取组件201从相应计算单元对应的存储空间中读取数据块,以存储空间为HBM为例,每个计算单元具备独立的HBM存储空间,且每个计算单元均单独与第一HBM控制器和第二HBM控制器相连;各计算单元通过第一HBM控制器从相应的HBM存储空间中读取目标原始数据库表数据,通过第二HBM控制器将运算结果写入至相应的HBM存储空间中。目标原始数据库表数据即为相应计算单元所分配的原始数据库表数据的数据块。过滤条件码流为将用户输入的where查询语句转换所得到,主机一侧也即第一处理器1会将where子句中的各个算术运算、比较运算、逻辑运算,转换为对应的函数操作ID号,并标记操作的类型、数据的类型以及参数个数。每个函数参数的所在位置可为行中的某一列或常量或栈,栈用于记录运算的中间结果,其格式可如图2所示。过滤条件码流所包含的各字段以及各字段所代表的含义如下所示:
1)filter_cnt字段:表示本次查询所包含的过滤条件总数,该字段占用4个字节。
2)clause字段:表示一个过滤条件操作码,每个占用10字节,共有filter_cnt个。其内部字段包括如下:
op_type字段:表示当前操作的类型。有三种可能:算术、比较、逻辑。
op_class字段:表示当前操作数据的类型。有四种可能:1字节对齐、2字节对齐、4字节对齐、8字节对齐。
func_id字段:表示当前操作的函数ID。该字段与数据库如postgresql内部定义的函数ID号保持一致。
nargs字段:表示当前操作有几个参数。对于算术运算与比较运算等于2,对于逻辑运算可以是任意正整数。
arg0_tag字段:用于算术运算与比较运算,表示第1个参数的来源。有三种可能:常量区、行中某一列、栈。
arg0_index字段:用于算术运算与比较运算,表示第1个参数的索引。根据arg0_tag字段,在对应的存储空间中,以arg0_index为索引即可找到所需变量。
arg1_tag字段:用于算术运算与比较运算,表示第2个参数的来源。有三种可能:常量区、行中某一列、栈。
arg1_index字段:用于算术运算与比较运算,表示第2个参数的索引。根据arg1_tag字段,在对应的存储空间中,以arg1_index为索引即可找到所需变量。
3)const_align8字段:存放用户输入的常量,该常量类型需要8字节对齐。如float类型,该字段占用1024字节。
4)const_align4字段:存放用户输入的常量,该常量类型需要4字节对齐。如int/date类型,该字段占用1024字节。
5)const_align2字段:存放用户输入的常量,该常量类型需要2字节对齐。如short类型,该字段占用1024字节。
6)const_align1字段:存放用户输入的常量,该常量类型需要1字节对齐。如char类型,该字段占用1024字节。
在本实施例中,表数据处理组件202用于基于表描述符,依次确定待处理表数据的每个行列的位置信息,并根据过滤条件码流和各行列的位置信息对待处理表数据的每一行进行过滤操作。通过结合每个行列的位置信息和过滤条件码流对页面各行进行过滤处理,可灵活的支持更为复杂的过滤表达式,不仅支持比较运算、逻辑运算,还支持算术运算与带括号的复杂表达式,更好地兼容SQL语句在第二处理器2如FPGA上执行。在第二处理器2如FPGA内以硬件方式,预先实现第一处理器1的数据库如PostgreSQL对应的计算函数,供过滤条件码流中各个操作码调用,以支持灵活的SQL语句调用。写组件203用于将汇总表数据处理组件202的运算结果,写入至第二处理器的内存中。对于每个计算单元均分配存储空间的情况下,写组件203会将表数据处理组件202的运算结果写入至相应计算单元对应的存储空间中。
在本发明实施例提供的技术方案中,由于第二处理器处理的是主机端数据库原生的存储格式数据,因此集成时无需修改数据库存储引擎,易于数据库软件集成且处理效率高,可避免需要CPU进行的格式转换所带来的额外开销,提高了整体性能。通过数据库的表描述符记载的数据存储对齐方式和列长度信息,可将不同数据类型的数据按照相应对齐方式进行对齐存储,从而提高数据的处理效率;第二处理器利用多个计算单元对原始数据进行分块并行处理,每个计算单元中各组件通过流水作业方式循环运行可以将全表扫描分割为多个独立的任务同时执行,有效提升数据处理能力,可满足用户对数据库的高性能需求。进一步的,每个计算单元可通过行列解析确定行列位置信息,无需对行数据进行逐个访问,仅读取SQL语句中所需要的数据,避免了对行数据的逐个访问所带来延迟,可进一步提升数据处理效率,提升数据库性能。
作为一种可选的实施方式,为了便于实现,可将每个计算单元的各组件按照所实现功能封装为多个功能模块,读取组件201可包括读取配置模块和读取数据模块,读取配置模块可用于进行读取表描述符与过滤条件码流,以第二处理器2为FPGA为例,读取配置模块从FPGA HBM内存中读取表描述符码流与过滤条件码流,并分别按照行列解析模块或过滤模块的总个数复制相同个数份表描述符码流与过滤条件码流,举例来说,每个计算单元包括8个行列解析模块和8个过滤模型,则读取配置模块会将表描述符与过滤条件码流复制8份,复制的数据供行列解析模块与过滤模块并行使用。读取数据模块用于分块读取数据库如PostgreSQL的表数据,表数据处理组件202可包括行列解析模块和过滤模块,写组件203可包括回写模块。回写模块汇总各个过滤模块通道的运算结果,将运算结果写入到该计算单元对应的HBM内存中。举例来说,回写模块可以64bit数据位宽,遍历各个过滤模块中的各个通道,依次将各个通道中的计算结果,存入本模块的内部缓存RAM中。将内部缓存RAM中的内容,以512bit位宽,写入HBM内存中。更新计数,记录过滤后满足过滤条件的行总数。为了实现各个模块间流水操作,对于循环执行的读取数据模块、行列解析模块、过滤模块的接口都单独分配独立的RAM内存,且每个模块的内存都采用ping-pong缓存的方式。也即为读取数据模块的接口、行列解析模块的接口、过滤模块的接口和写组件的接口均单独分配独立的RAM内存,从而可通过pong-pong缓存设计,对循环执行的读取数据、行列解析、过滤筛选、返回结果四个步骤实现流水作业。各个模块的接口设计可如图4所示。
读取数据模块,分配1组ping-pong缓存:可称为数据缓存,用于存放数据库如PostgreSQL原始页面数据。数据缓存可占用128KB空间,分割为ping-pong两部分。行列解析模块,分配5组ping-pong缓存:页面缓存、行位置缓存、行长度缓存、列位置缓存,列长度缓存。分别用于存放数据库如PostgreSQL原始页面数据,行在页面中的偏移,行的长度,列在行中的偏移,列的长度。页面缓存占用128KB空间,行位置缓存占用8KB,行长度缓存占用8KB,列位置缓存占用128KB,列长度缓存占用128KB,均分割为ping-pong两部分。过滤模块,分配2组ping-pong缓存:过滤行位置缓存、过滤行长度缓存。存放过滤后的行在页面中的偏移,行的长度。过滤行位置缓存占用8KB,过滤行长度缓存占用8KB,分割为ping-pong两部分。循环体内,各个模块的工作过程,如下图5所示:
对于每个计算单元分配存储空间来说,读取数据模块可从相应计算单元的HBM内存中,一次读取64KB,交替存放到ping-pong RAM内存。这64KB内存对应了数据库如PostgreSQL表数据的8个页面。也即读取数据模块用于将从对应内存中读取的待处理表数据,交替存放在数据ping/pong缓存。行列解析模块,用于交替从数据ping/pong缓存读取目标表数据,依次解析目标表数据页面中的每一行,计算每一行中所需查询的列在当前页面中的偏移,并将相应结果交替存放在行位置ping/pong缓存、行长度ping/pong缓存、列位置ping/pong缓存、列长度ping/pong缓存,同时交替复制页面数据到页面ping/pong缓存;过滤模块,用于根据过滤条件,交替从行列解析模块的缓存中读取所需数据进行过滤运算,并将过滤结果交替写入至过滤行位置ping/pong缓存和过滤行位置pong/pong缓存。
具体来说,读取数据模块,用于将从对应内存中读取64K的待处理表数据,交替存放在数据ping缓存和数据pong缓存;行列解析模块,用于交替从数据ping缓存和数据pong缓存读取目标表数据,依次解析目标表数据页面中的每一行,计算每一行中所需查询的列在当前页面中的偏移,并将相应结果交替存放在行位置ping缓存、行位置pong缓存、行长度ping缓存、行长度pong缓存、列位置ping缓存,列位置pong缓存、列长度ping缓存和列长度pong缓存,同时交替复制页面数据到页面ping缓存和页面pong缓存中;过滤模块,用于根据过滤条件,交替从行列解析模块的缓存中读取所需数据进行过滤运算,并将过滤结果交替写入到过滤行位置ping缓存、过滤行位置pong缓存、过滤行长度ping缓存和过滤行长度pong缓存。
为了验证本实施例具有提升数据处理效率的有益效果,本申请还提供了验证实施例,可包括下述内容:
若待处理为4个8KB页面,各个模块的处理时间相同,都为100个时钟周期。如果所有模块都使用同一个缓存,虽然节省了内存及拷贝数据的开销。但下一个页面的处理,必须等待前一个页面全部流程处理完成后才能进行。在这种模式下,处理完4个8KB页面,需要1600个时钟周期,如下图6所示。当各个模块都具有独立缓存时,前一个模块等待下一个模块处理完成后,即可载入新的数据进行处理。提高了处理速度,但相邻的模块之间仍需要等待。在这种模式下,处理完4个8KB页面,需要1000个时钟周期,其处理过程如下图7所示。在模块间有ping-pong缓存时,只要后面的模块处理速度不小于前一个模块的处理速度,各个模块就可以交替处理ping-pong缓存,无需相互等待。在这种模式下,处理完4个8KB页面,需要700个时钟周期,其处理过程如下图8所示。
考虑到计算单元内不同功能模块的处理速度不同,为了整个数据处理效率,可为计算单元内不同的功能模块配置不同的数据位宽,并对处理环节中较慢的模块,生成多个执行通道并行执行。处理数据时一次性批量处理多个数据,减少了模块间的阻塞等待时间,从而提高系统整体吞吐率,还可从总体上节约逻辑资源的用量,可包括下述内容:
对每个计算单元来说,可为读取组件201、写组件203和表数据处理组件202分别配置不同的数据位宽进行数据访问。进一步的,表数据处理组件202可包括多个并行处理通道;各并行处理通道用于同时从读取组件中读取待处理表数据的各数据块,并同时对读取的数据块进行相应处理;并行处理通道的总数是根据实验测试数据得来的,以使表数据处理组件、读取组件和写组件的数据处理速度相匹配。
以读取组件201包括读取配置模块、读取数据模块,表数据处理组件202包括行列解析模块和过滤模块,写组件203包括回写模块为例,读取配置模块、读取数据模块,行列解析模块、过滤模块和写组件分别配置不同的数据位宽进行数据访问,行列解析模块和过滤模块均可包括多个并行处理通道。举例来说,实际工作时,由于读取数据模块与回写数据模块,逻辑简单,可采用512bit数据位宽,处理速度快。而行列解析模块与过滤模块,逻辑复杂,采用64bit数据位宽,处理速度慢。各个模块处理速度不同,容易导致流水线上模块间阻塞等待,造成整体性能的瓶颈。本发明根据实验测试数据,设置行列解析模块,过滤模块中最多可并行8个处理通道,使得各个模块处理速度匹配一致,减少因模块间等待造成的延迟,其结构可如图8所示。
为了验证本实施例具有提升数据处理效率的有益效果,本申请还提供了验证实施例,可包括下述内容:
假设各个模块在FPGA上都只有一份电路实现所需逻辑功能,那么一次只能处理一个8KB页面。由于数据位宽与处理逻辑不同,各个模块的处理时间也不一样,如表1所示,单位为时钟周期:
表1计算单元各模块的原始处理时间
读取数据模块 | 行列解析模块 | 过滤模块 | 回写模块 |
100 | 800 | 800 | 100 |
那么在流水线执行的过程中,读取数据模块在填充完ping-pong缓存后,由于行列解析模块仍没有处理完ping缓存的数据。此时读取数据模块,需要阻塞等待700个时钟周期,在行列解析模块处理完ping缓存的内容后,才能继续读取新数据覆盖ping缓存,从而导致整体性能的瓶颈,如下图10示。在这种模式下,处理64个8KB页面,需要1700+63*800+100=52200个时钟周期。本实施例根据实际实验测试数据,对解析模块与过滤模块设置合适的并行量。在解析模块与过滤模块中,实现了8份相同的逻辑电路,构成8个可并行的执行通道。相应的,使用模式调整为:读取数据模块一次读取8个8KB页面后,再启动后续模块处理。由于过滤模块与行列解析模块都采用了8个通道并行,因此处理时间仍为800个时钟周期。此时,各个模块处理时间如表2所示:
表2计算单元各模块的处理时间
读取数据模块 | 行列解析模块 | 过滤模块 | 回写模块 |
800 | 800 | 800 | 800 |
在这种模式下,读取数据模块在填充完ping-pong缓存后,ping缓存的内容已经由行列解析模块处理完成,因此可以立即向ping缓存中填充新的数据。各个模块间便没有阻塞等待的情况,如下图11所示。在这种模式下,处理64个8KB页面,需要2400+7*800+800=8800个时钟周期。
上述实施例对表处理组件202如何实现表数据的行列解析及行过滤,并没有进行任何限定,本实施例还给出了表处理组件202对表数据的行列解析的一种可选的实施方式,表数据处理组件201可包括行列解析模块,行列解析模块可通过调用存储器中的行列解析程序执行下述操作:
对行列解析模块读取待处理表数据的每个数据块,获取当前页面的行数以及各行在当前页面的行位置及行长度;对每一行,确定当前行所需查询的目标列的列偏移和列长度;基于表描述符所记载的最后一个所需查询列的索引位置,判断目标列是否为当前行的最后一个所需查询列;若目标列不为当前行的最后一个所需查询列,则确定当前行所需查询的下一个列的列偏移和列长度,直至确定最后一个所需查询列的列偏移和列长度。
其中,对于各行所需查询的列的偏移和长度的确定方式可为:行列解析模块还通过调用行列解析程序的列信息解析子程序,执行下述操作:
对每一行,初始化列索引信息和当前行的第一列的当前位置偏移;
基于当前位置偏移,确定第一列按照相应数据类型进行存储对齐之后的初始偏移;
根据表描述符记载的第一列的列长度信息,确定第一列所属数据类型为定长数据类型还是变长数据类型;
若第一列所属数据类型为定长数据类型,则第一列的列偏移为初始偏移,第一列的列长度为第一列的列长度信息的长度值;并根据第一列的列长度更新当前位置偏移;
若第一列所属数据类型为变长数据类型,则若当前位置偏移满足偏移更新条件,将初始偏移作为当前位置偏移;根据从当前位置偏移读取的目标字节的数值确定存储长度字节数,根据存储长度字节数、当前位置偏移和目标字节确定第一列的列偏移;根据存储长度字节数和目标字节确定第一列的列长度。
在本实施例中,以第二处理器2为FPGA,数据库为PostgreSQL,满足偏移更新条件为当前位置偏移的1个字节值是否为0为例,阐述行列解析模块执行行列解析操作的过程,可包括下述内容:
根据PostgreSQL的存储格式,依次处理页面中的每一行,计算每一个行中,所需查询的列在页面中的偏移。为了达到各个模块处理速度的匹配,本模块中会并行8个执行通道,每个通道解析1个大小为8KB页面。该模块中的每个通道,需要使用读取配置模块中获取的表描述符码流。行列解析模块的每个通道的解析流程可如下图12及图13所示:
(1)获取当前页中存储的行数,操作步骤可如下:
1)读取页面中第12,13字节作为无符号整形,存入变量raw_line_cnt;
2)将raw_line_cnt减去24后,除以4得到行数,存入变量line_cnt;
3)初始化变量line_index为0。
(2)获取一行在页面中的位置及长度,操作步骤可如下:
1)从页面中第24字节开始,找到当前行对应的头信息。以变量line_index为索引,读取4个字节,存入变量header。
2)从header中提取低15字节,以无符号整形的方式存储变量line_len。
3)从header中提取高15字节,以无符号整形的方式存储变量line_offset。
(3)计算行中所需查询列的偏移和长度,操作步骤可如下:
1)初始化变量。
读取当前行的第22字节的值,加上line_offset,作为第一个列的起始位置存入变量post_index,该变量表示当前位置偏移。
初始化变量col_index等于0。
2)设置变量pos_index_p,等于pos_index进行attalign对齐后的值。
3)如果当前列的attlen大于0,则表示该列为固定长度。
存储当前列的偏移为pos_index_p。
存储当前列的长度为attlen。
更新pos_index值为pos_index+attlen。
4)如果当前列的attlen小于0,则表示该列为变长:从pos_index位置读取1个字节赋值给变量col_align,如果该字节值等于0,则更新pos_index值为pos_index_p值。如果该字节值不等于0,则不更新pos_index值。从pos_index位置读取4个字节即目标字节,赋值给变col_len。如果col_len第一个字节等于0x1,表示变长列用1个字节存储长度。将col_len的值除以2,后取低6bit。存储当前列的偏移为pos_index+col_len+1,当前列的长度为col_len–1。如果col_len第一个字节不等于0x1,表示变长列用4个字节存储长度。将col_len的值除以4后,取低30bit,低存储当前列的偏移为pos_index+col_len+4,当前列的长度为col_len–4。更新pos_index值为pos_index+col_len。
5)通过判断col_index是否等于last_col_index,来判断当前列是否为最后一个需要解析的列。如果是,则退出解析。如果不是,将col_index加1,则重复步骤2。
操作步骤,如下图13,所示:
(4)处理下一行,操作步骤如下:
通过判断变量line_index是否等于变量line_cnt,来判断当前行是否为最后一行,如果二者相等,表示当前行为最后一行,如果不相等,则不是最后一行。如果不是最后一行,将line_index加1后,重复流程(2)。如果是最后一行,则结束处理。
为了使所述领域技术人员更加清楚行列解析模块对表数据的行列解析实施方式,本申请以图14所示的PostgreSQL页面的存储格式、图15所示的PostgreSQL数据表为例,提供了一个示意性例子,可包括下述内容:
PostgreSQL中以8KB为单位作为一个页面,每个页面中存储若干行,页面的存储格式如图14所示。
1)页面中行数信息:页面中的12-13字节,作为一个无符号整形变量,减去24,再除以4。也即可按照计算关系式行数=(页面[13:12]-24)/4来确定当前页面中有效行的个数。
2)每一行的位置及长度信息:页面中从24字节开始,用4个字节表示每一行在页面中的偏移位置和长度。其中,低15bit表示行在本页面内的偏移,高16bit表示行的长度。其格式如表3所示:
表3每一行的偏移和长度在页面中的位置
31-17 | 16-15 | 14-0 |
长度 | 标志 | 偏移 |
对于图15所示的待处理表,在PostgreSQL中会以8KB页面存储三行记录。其页面数据及各行位置的解析过程,如下图16所示:
PostgreSQL在一个表创建时,会相应的创建表描述符,表描述符中attalign字段表示该列的存放对齐方式,attlen字段用于表示该列的长度。PostgreSQL每个行中各个列的存放格式,遵循如下规则:
不同类型的数据,需要按照相应的对齐方式进行对齐存储,在表描述符中使用attalign字段中表示。各种类型的对应对齐方式如表4所示:
表4数据类型与对齐存储方式的对应表
数据类型 | 对齐 |
double | 8 |
int/date | 4 |
short | 2 |
char/其它 | 1 |
若行中可以包含变长数据与定长数据。对于定长数据,表描述中用长度字段attlen表示其长度。对于变长数据,表描述的长度字段attlen等于-1,变长数据的长度使用1字节或4字节存放在数据的头部。当字符串长度小于128则用1个字节表示,大于128则用4个字节表示。例如:对于定长数据类型,如:int类型attlen值为4。对于变长类型,如:char字符串“apple”,原始数据有5个字节。其attlen=-1,存储时会在字符串“apple”前放置1个字节,用1个字节表示字符串对象及长度字段的总长度,因此其值为6。以上表中第一行数据为例,其中各个列解析过程,如下图17所示。
上述实施例对表处理组件202对如何实现表数据的行过滤操作,并没有进行任何限定,本实施例还给出了表处理组件202对表数据的过滤解析的一种可选的实施方式,表数据处理组件201可包括过滤模块,过滤模块可通过调用存储器中的过滤程序执行下述操作:
在本实施例中,过滤模块可按照不同存储对齐方式,为算术运算创建多个相应数据位宽的算术RAM内存空间,且每个算术RAM存储空间以栈的形式存储中间运算结果;这样,对不同对齐类型的数据,以相应位宽的RAM进行存放,以栈的方式进行访问,对定长数据的一个时钟周期即可获取所需数据。举例来说,在过滤模块内部,按照不同的对齐类型可为算术运算创建RAM内存空间:stack_align1,stack_align2,stack_align4,stack_align8,以栈的形式存放中间运算结果,其数据位宽分别为1,2,4,8,实现在一个时钟周期内完成所需变量的访问,提高了数据访问效率,各RAM内存空间可称为算术运算栈。每个栈都有一个独立计数变量stack_top,用于标记栈顶的位置,初始化为0。算术运算栈的形式可如表5所示:
表5算术运算栈的格式表
栈名称 | 对齐方式 | RAM位宽 |
stack_align1 | 1 | 1bit |
stack_align2 | 2 | 2bit |
stack_align4 | 4 | 4bit |
stack_align8 | 8 | 8bit |
过滤模块还可为比较运算和逻辑运算如与、或、非创建固定数据位宽如1bite的布尔RAM内存空间,且布尔RAM存储空间以栈的形式存储布尔运算结果。对于为比较运算与逻辑运算创建的RAM可称为布尔栈,其数据位宽为1bit,布尔值有独立的计数变量stack_top,用于标记栈顶的位置,初始化为0。
过滤模块对表数据进行过滤操作的实现过程可包括:
通过过滤条件码流确定过滤条件个数,并初始化所有栈的栈顶位置;对每个过滤条件码流中的各操作码,通过当前操作码的运算类型标识符确定当前运算类型,并进行相应的运算处理;当对所有过滤条件均进行运算处理之后,通过布尔栈的栈顶值判断当前行是否满足过滤条件;若当前行满足过滤条件,则将当前行的行位置和行长度存储至缓存中。
其中,对于运行处理过程,过滤模块还可通过调用过滤程序的运算处理子程序执行下述操作:
若当前运算类型为算术运算或比较运算,获取待处理参数;根据待处理参数的标签值确定待处理参数的参数类型,并根据参数类型读取待处理参数的参数值;参数类型为列数据、常量和运算结果;基于待处理参数的参数值,执行当前操作码对应的操作函数;若当前运算类型为算术运算,将函数结果存储至对应位宽的算术RAM存储空间中,并更新相应栈的栈顶;若当前运算类型为比较运算,将函数结果存储至布尔RAM内存空间,并更新布尔栈的栈顶;若当前运算类型为逻辑运算,从布尔RAM内存空间读取布尔值作为待处参数,执行当前操作码对应的操作函数,将函数结果存储至布尔RAM内存空间,并更新布尔栈的栈顶。
为了进一步提高过滤模块的处理效率,过滤模块中可设置有8个执行通道并行执行,每个通道会根据过滤条件码流中的各个操作符,对一行数据中需要查询的字段进行计算、比较、逻辑判断操作,判断该行是否满足过滤条件。过滤模块中,各个通道的工作,会对本页面内的每一行进行过滤操作,其工作流程如图18所示:
(1)获取过滤条件的个数。
(2)初始化所有栈的stack_top计数为0。
(3)执行操作码。判断当前操作码的op_type,是否为逻辑运算
1)如果不是,表示当前操作码是算术运算或者比较运算,执行如下步骤:
载入参数值;
若arg_tag的值等于104,表示参数是行中的某一列。参数在页面中的偏移,以arg_index为索引,从列缓存中获取,赋值给变量arg_pos。以arg_pos为偏移在页面中读取参数值。若arg_tag的值等于105,表示参数是一个常量。以arg_index为索引,根据op_clsss的值,从对应位宽的const_align常量区中读取参数值。若arg_tag的值等于0,表示参数是之前的操作码的运算结果。以arg_index为索引,根据op_clsss的值,从对应位宽的stack_align栈中读取参数值。对应的stack_align中stack_top值减1。
执行func_id对应的函数。
判断op_type是否为算术运算。
如果是算术运算,根据op_class的值,将函数的结果存入对应位宽的栈中。对应的stack_align中stack_top值加1。
如果不是算术运算,那么就是比较运算,比较运算的结果为布尔值。将函数的结果存入布尔栈中。将布尔栈的stack_top加1。
2)如果是,表示当前的操作为逻辑运算:与、或、非,其操作数必然在布尔栈中。执行如下步骤:
从布尔栈中读取nargs个布尔值作为参数。执行func_id对应的函数。将函数的结果存入到布尔栈中。将布尔栈的stack_top加1。
(4)判断是否为最后一个过滤条件:如果不是,则取出下一个过滤条件,执行步骤(3)。如果是,则所有的过滤条件执行完成,布尔栈顶部的值表示当前行是否满足过滤条件,则执行步骤(5)。
(5)通过判断栈顶的值是否为1,来判断当前行是否满足过滤条件。如果不是,则表示该行不满足过滤条件。如果是,则表示该行满足过滤条件。如果满足过滤条件,将当前行位置,存储到行位置缓存中;将当前行长度,存储到行长度缓存中。
为了使所述领域技术人员更加清楚过滤模块对表数据的过滤实施方式,本申请以用户查询图15所示的PostgreSQL数据表中临近保质期30天内且总价小于200的商品信息为例,提供了一个示意性例子,可包括下述内容:
首先,用户需要输入如下SQL查询指令:
select
*
from
commodity
where
(shelf_date-product_date)<30and
(price*quantity*discount)<200;
其次,在PostgreSQL中,可将查询过滤条件运算转换为如图19所示的运算逻辑。
第一处理器1如CPU根据运算过程生成过滤条件码流,FPGA中对各个操作码的执行过程如下:
1)过滤条件个数及常量区
filter_cnt=6,表示有6个过滤条件
const_align4常量区,存储1个数据,int格式,值30
const_align8常量区,存储1个数据,浮点数格式,值200
2)shelf_date-product_date运算
在PostgreSQL中日期类型会以整形表示,以相距2020年1月1日表示当前的日期。
操作码:
op_type=0,表示算术运算;
op_class=4,表示4字节对齐;
func_id=181,表示整数相减;
nargs=2,表示有两个参数;
arg0_tag=104,表示参数0来源于行中某一列;
arg0_index=7,表示第7列(索引从0开始);
arg1_tag=104,表示参数1来源于行中某一列;
arg0_index=6,表示第6列(索引从0开始)。
FPGA运算:
根据上一模块中运算所得列偏移,分以7和6为索引,得到参数arg0、arg1的值。
执行func_id=181对应的整数相减运算,将结果存入到stack_align4栈中。
图15前两行为例运算过程如图20所示。
3)(shelf_date-product_date)<30运算:
操作码:
op_type=1,表示比较运算;
op_class=4,表示4字节对齐;
func_id=1087,表示整数小于运算;
nargs=2,表示有两个参数;
arg0_tag=0,表示参数0来源于栈中;
arg0_index=0,不使用;
arg1_tag=105,表示参数1来源于常量区;
arg0_index=0,表示第1个4字节对齐常量(索引从0开始)。
FPGA计算:
参数arg0,从stack_align4栈中取出运算结果;
参数arg1,从const_align4中取出第1个4字节常量;
执行func_id=1087对应的整数比较运算,将结果存入布尔栈中。
图15前两行为例运算过程如图21所示。
4)price*quantity运算
操作码:
op_type=0,表示算术运算;
op_class=8,表示8字节对齐;
func_id=216,表示浮点数相乘;
nargs=2,表示有两个参数;
arg0_tag=104,表示参数0来源于行中某一列;
arg0_index=2,表示为行中第2列(索引从0开始);
arg1_tag=104,表示参数1来源于行中某一列;
arg0_index=3,表示为行中第3列(索引从0开始);
FPGA计算:
根据上一模块中运算所得列偏移,分以2和3为索引,得到参数arg0、arg1的值。
执行func_id=216对应的浮点数乘法运算,将运算结果存入stack_align8中。
图15前两行为例运算过程如图22所示。
5)price*quantity*discount运算:
操作码:
op_type=0,表示算术运算;
op_class=8,表示8字节对齐;
func_id=216,表示浮点数相乘;
nargs=2,表示有两个参数;
arg0_tag=0,表示参数0来源于栈中;
arg0_index=0,不使用;
arg1_tag=104,表示参数1来源于行中某一列;
arg0_index=5,表示为行中第5列(索引从0开始);
FPGA计算:
参数arg0,从stack_align8中读取一个8字节得到;
根据上一模块中运算所得列偏移,以5为索引,得到参数arg1的值;
执行func_id=216对应的浮点数乘法运算,将运算结果存入stack_align8中;
图15前两行为例运算过程如图23所示。
6)(price*quantity*discount)<200运算:
操作码:
op_type=1,表示比较运算;
op_class=8,表示8字节对齐;
func_id=295,表示浮点数小于运算;
nargs=2,表示有两个参数;
arg0_tag=0,表示参数0来源于栈中;
arg0_index=0,不使用;
arg1_tag=105,表示参数1来源于常量区;
arg0_index=0,表示为const_align8中的第一个常量(索引从0开始)。
FPGA计算:
参数arg0,从stack_align8中读取一个8字节得到;
参数arg1,从const_align8中读取一个8字节得到;
执行func_id=295对应的浮点数小于运算,将运算结果存入布尔栈中;
图15前两行为例运算过程如图24所示。
7)(shelf_date-product_date)<30and(price*quantity*discount)<200运算:
操作码:
op_type=117,表示逻辑运算;
op_class=1,表示1bit对齐;
func_id=0,表示逻辑与运算;
nargs=2,表示有两个参数;
arg0_tag=0,不使用;
arg0_index=0,不使用;
arg1_tag=0,不使用;
arg1_index=0,不使用。
FPGA计算:
从布尔栈中读取两个布尔值;
执行func_id=0对应的逻辑与运算,将布尔值进行与运算,并得到的结果存入布尔栈中。
图15中前两行为例运算过程如下图25所示。
(5)最后判断布尔栈中顶部的值,如果是1,表示该行满足过滤条件,否则表示不满足条件。对满足条件的行,将行的偏移与长度写入到输出缓存中。以图15前两行为例,若第1行布尔栈顶的值为0,则表示不满足过滤条件。若第2行布尔栈顶的值为1,表示满足过滤条件。将第二行的偏移0x1f60,长度值0xa0,分别写入到列位置缓存与列长度缓存中。
为了使所属领域技术人员更加清楚明白本申请的技术方案,本申请还基于图26及图27,以第一处理器为主机侧CPU,第二处理器为FPGA,且实现对PostgreSQL表数据处理为例,阐述整个技术方案:
FPGA外部可通过PCIe gen3 x16接口与主机进行物理层数据交互,在FPGA内部可创建8计算单元(Compute Unit,CU)。实际使用过程中,CPU侧会将PostgreSQL原始数据进行分割,通过PCIe Gen3x16接口,传输到FPGA中每个计算单元所对应的HBM内存中。传输完成后,启动各计算单元进行运算,每个计算单元对PostgreSQL原始数据进行行列解析与过滤计算,并将过滤的结果存入计算单元对应的HBM内存中,等待CPU通过PCIe gen3 x16接口读取。
每个计算单元单独连接2个HBM控制器如HBM0和HBM1,一个用于读取原始数据,另一个用于存放运算结果。每个计算单元由于独立的HBM存储空间,避免了各个计算单元对内存访问的竞争。每个计算单元可包含读取配置模块、读取数据模块、行列解析模块、过滤模块和回写模块,行列解析模块和过滤模块分别可包括8个并行通道。每个模块配置不同的数据位宽进行数据访问。各个模块之间以流水作业的方式运行,总体处理流程如图28所示。
基于上述数据处理系统,对TPCH-Q6测试数据进行测试过程中,在CPU空载条件下可实现3倍以上的性能提升如表6所示。在CPU负载变化条件下,查询时间更为稳定,1GBTPCH-Q6的测试数据如表7所示。
表6 CPU空载条件下,数据处理系统的数据处理时间表
表7 CPU负载变化条件下,数据处理系统的数据处理时间表
由上可知,本实施例的FPGA实现了对PostgreSQL全表扫描的异构加速,可将全表扫描流程拆分为多个独立工作的模块,实现对数据的解析与过滤操作。模块间采用流水作业的方式,提高处理效率。对处理速度较慢的模块,生成多份相同逻辑电路,以多个执行通道并行执行,实现各个模块处理速度的匹配,减少流水线上的阻塞等待。
需要说明的是,本申请中各计算单元的各模块通过执行计算机程序实现的各方法步骤之间没有严格的先后执行顺序,只要符合逻辑上的顺序,则这些步骤可以同时执行,也可按照某种预设顺序执行,附图只是一种示意方式,并不代表只能是这样的执行顺序。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上对本申请所提供的一种数据处理系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
Claims (8)
1.一种数据处理系统,包括构成异构计算的第一处理器和第二处理器,其特征在于,所述第二处理器包括多个并行处理所述第一处理器的原始数据库表数据、且均连接内存控制器的计算单元;
每个计算单元均包括以流水作业方式运行、且均具备独立缓存资源的读取组件、表数据处理组件和写组件;
所述读取组件,用于读取所述第一处理器的数据库对应的表描述符、过滤条件码流及待处理表数据;所述表描述符用于记载数据库表的各列存储对齐方式和各列长度信息;
所述表数据处理组件,用于基于所述表描述符,依次确定所述待处理表数据的每个行列的位置信息,并根据所述过滤条件码流和各行列的位置信息对所述待处理表数据的每一行进行过滤操作;
所述写组件,用于将汇总所述表数据处理组件的运算结果,写入至所述第二处理器的内存中;
其中,所述表描述符包括第一字段和第二字段,所述第一字段用于表示当前列对应的存储对齐方式,以使不同数据类型的数据按照对应的存储对齐方式存储至相应位宽的内存中;所述第二字段用于表示所述当前列的定义长度;
若所述当前列对应的数据类型为定长数据,则所述当前列的定义长度为所述当前列的实际列长度,若所述当前列对应的数据类型为变长数据,所述当前列的定义长度为预设值,则所述当前列的实际列长度存储在数据头部;
其中,所述读取组件包括读取配置模块和读取数据模块,所述表数据处理组件包括行列解析模块和过滤模块;
所述读取数据模块的接口、所述行列解析模块的接口、所述过滤模块的接口和所述写组件的接口均单独分配独立的RAM内存;
所述读取数据模块,用于将从对应内存中读取的所述待处理表数据,交替存放在数据ping/pong缓存;
所述行列解析模块,用于交替从所述数据ping/pong缓存读取目标表数据,依次解析所述目标表数据页面中的每一行,计算每一行中所需查询的列在当前页面中的偏移,并将相应结果交替存放在行位置ping/pong缓存、行长度ping/pong缓存、列位置ping/pong缓存、列长度ping/pong缓存,同时交替复制页面数据到页面ping/pong缓存;
所述过滤模块,用于根据过滤条件,交替从所述行列解析模块的缓存中读取所需数据进行过滤运算,并将过滤结果交替写入至过滤行位置ping/pong缓存和过滤行位置pong/pong缓存;
其中,所述表数据处理组件包括多个并行处理通道,以使所述表数据处理组件、所述读取组件和所述写组件的数据处理速度相匹配;
各并行处理通道用于同时从所述读取组件中读取所述待处理表数据的各数据块,并同时对读取的数据块进行相应处理。
2.根据权利要求1所述的数据处理系统,其特征在于,所述读取配置模块、所述读取数据模块,所述行列解析模块、所述过滤模块和所述写组件分别配置不同的数据位宽进行数据访问。
3.根据权利要求2所述的数据处理系统,其特征在于,每个计算单元具备独立的HBM存储空间,且每个计算单元均单独与第一HBM控制器和第二HBM控制器相连;
各计算单元通过所述第一HBM控制器从相应的HBM存储空间中读取目标原始数据库表数据,通过所述第二HBM控制器将所述运算结果写入至相应的HBM存储空间中。
4.根据权利要求1所述的数据处理系统,其特征在于,所述表数据处理组件包括行列解析模块,所述行列解析模块通过调用存储器中的行列解析程序执行下述操作:
对所述行列解析模块读取所述待处理表数据的每个数据块,获取当前页面的行数以及各行在所述当前页面的行位置及行长度;
对每一行,确定当前行所需查询的目标列的列偏移和列长度;
基于所述表描述符所记载的最后一个所需查询列的索引位置,判断所述目标列是否为所述当前行的最后一个所需查询列;
若所述目标列不为所述当前行的最后一个所需查询列,则确定所述当前行所需查询的下一个列的列偏移和列长度,直至确定最后一个所需查询列的列偏移和列长度。
5.根据权利要求4所述的数据处理系统,其特征在于,所述行列解析模块还通过调用所述行列解析程序的列信息解析子程序,执行下述操作:
对每一行,初始化列索引信息和所述当前行的第一列的当前位置偏移;
基于所述当前位置偏移,确定所述第一列按照相应数据类型进行存储对齐之后的初始偏移;
根据所述表描述符记载的所述第一列的列长度信息,确定所述第一列所属数据类型为定长数据类型还是变长数据类型;
若所述第一列所属数据类型为定长数据类型,则所述第一列的列偏移为所述初始偏移,所述第一列的列长度为所述第一列的列长度信息的长度值;并根据所述第一列的列长度更新所述当前位置偏移;
若所述第一列所属数据类型为变长数据类型,则若所述当前位置偏移满足偏移更新条件,将所述初始偏移作为所述当前位置偏移;根据从所述当前位置偏移读取的目标字节的数值确定存储长度字节数,根据所述存储长度字节数、所述当前位置偏移和所述目标字节确定所述第一列的列偏移;根据所述存储长度字节数和所述目标字节确定所述第一列的列长度。
6.根据权利要求1所述的数据处理系统,其特征在于,所述表数据处理组件包括过滤模块,所述过滤模块按照不同存储对齐方式,为算术运算创建多个相应数据位宽的算术RAM内存空间,且每个算术RAM存储空间以栈的形式存储中间运算结果;
所述过滤模块为比较运算和逻辑运算创建固定数据位宽的布尔RAM内存空间,且所述布尔RAM存储空间以栈的形式存储布尔运算结果。
7.根据权利要求6所述的数据处理系统,其特征在于,所述过滤模块通过调用存储器中的过滤程序执行下述操作:
通过所述过滤条件码流确定过滤条件个数,并初始化所有栈的栈顶位置;
对所述过滤条件码流中的各操作码,通过当前操作码的运算类型标识符确定当前运算类型,并进行相应的运算处理;
当对所有过滤条件均进行运算处理之后,通过布尔栈的栈顶值判断当前行是否满足过滤条件;
若所述当前行满足所述过滤条件,则将所述当前行的行位置和行长度存储至缓存中。
8.根据权利要求7所述的数据处理系统,其特征在于,所述过滤模块还通过调用所述过滤程序的运算处理子程序,执行下述操作:
若所述当前运算类型为算术运算或比较运算,获取待处理参数;根据所述待处理参数的标签值确定所述待处理参数的参数类型,并根据参数类型读取所述待处理参数的参数值;所述参数类型为列数据、常量和运算结果;基于所述待处理参数的参数值,执行当前操作码对应的操作函数;若所述当前运算类型为算术运算,将函数结果存储至对应位宽的算术RAM存储空间中,并更新相应栈的栈顶;若所述当前运算类型为比较运算,将函数结果存储至所述布尔RAM内存空间,并更新布尔栈的栈顶;
若所述当前运算类型为逻辑运算,从所述布尔RAM内存空间读取布尔值作为待处参数,执行当前操作码对应的操作函数,将函数结果存储至所述布尔RAM内存空间,并更新所述布尔栈的栈顶。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210332882.6A CN114647635B (zh) | 2022-03-31 | 2022-03-31 | 数据处理系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210332882.6A CN114647635B (zh) | 2022-03-31 | 2022-03-31 | 数据处理系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114647635A CN114647635A (zh) | 2022-06-21 |
CN114647635B true CN114647635B (zh) | 2024-01-23 |
Family
ID=81995536
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210332882.6A Active CN114647635B (zh) | 2022-03-31 | 2022-03-31 | 数据处理系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114647635B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115563116A (zh) * | 2022-10-11 | 2023-01-03 | 北京奥星贝斯科技有限公司 | 一种数据库表扫描方法、装置以及设备 |
CN116302178B (zh) * | 2023-02-23 | 2023-10-20 | 合肥申威睿思信息科技有限公司 | 一种列存数据的加速处理方法和装置 |
CN117493386B (zh) * | 2023-12-29 | 2024-03-01 | 苏州元脑智能科技有限公司 | 数据库访问方法及装置、存储介质和电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110990402A (zh) * | 2019-11-26 | 2020-04-10 | 中科驭数(北京)科技有限公司 | 由行存储到列存储的格式转化方法、查询方法及装置 |
CN113641701A (zh) * | 2021-10-13 | 2021-11-12 | 苏州浪潮智能科技有限公司 | 一种数据查询方法、系统、异构加速平台及存储介质 |
CN113704301A (zh) * | 2021-07-15 | 2021-11-26 | 苏州浪潮智能科技有限公司 | 异构计算平台的数据处理方法、装置、系统、设备及介质 |
CN114090592A (zh) * | 2022-01-24 | 2022-02-25 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
-
2022
- 2022-03-31 CN CN202210332882.6A patent/CN114647635B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110990402A (zh) * | 2019-11-26 | 2020-04-10 | 中科驭数(北京)科技有限公司 | 由行存储到列存储的格式转化方法、查询方法及装置 |
CN113704301A (zh) * | 2021-07-15 | 2021-11-26 | 苏州浪潮智能科技有限公司 | 异构计算平台的数据处理方法、装置、系统、设备及介质 |
CN113641701A (zh) * | 2021-10-13 | 2021-11-12 | 苏州浪潮智能科技有限公司 | 一种数据查询方法、系统、异构加速平台及存储介质 |
CN114090592A (zh) * | 2022-01-24 | 2022-02-25 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114647635A (zh) | 2022-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114647635B (zh) | 数据处理系统 | |
US10606787B2 (en) | Methods and apparatuses for providing data received by a state machine engine | |
US10915450B2 (en) | Methods and systems for padding data received by a state machine engine | |
US10254976B2 (en) | Methods and systems for using state vector data in a state machine engine | |
US11829311B2 (en) | Custom compute cores in integrated circuit devices | |
US10430210B2 (en) | Systems and devices for accessing a state machine | |
US11947979B2 (en) | Systems and devices for accessing a state machine | |
US20230176999A1 (en) | Devices for time division multiplexing of state machine engine signals | |
WO2022068328A1 (zh) | 数据迁移的方法、装置、处理器和计算设备 | |
CN117271953A (zh) | 一种用于优化快速傅里叶变换的存内计算加速电路及方法 | |
KR20220094180A (ko) | 병합 조인 동작들의 가속을 위한 시스템, 방법, 및 장치 | |
Hahn et al. | An FPGA Avro Parser Generator for Accelerated Data Stream Processing | |
Qiao | Customized Computing: Acceleration of Big-Data Applications | |
CN117493386B (zh) | 数据库访问方法及装置、存储介质和电子设备 | |
Hahn et al. | ABACUS: ASIP-Based Avro Schema-Customizable Parser Acceleration on FPGAs | |
Tao | FPGA-Based Graph Convolutional Neural Network Acceleration | |
김동영 | The Design Method and Application of Convolutional Neural Network Specialized Hardware Accelerator Utilizing Sparsity | |
WO2024056984A1 (en) | Multiple-outer-product instruction | |
CN117539546A (zh) | 基于非空列存储的稀疏矩阵向量乘加速方法及装置 | |
CN116775599A (zh) | 数据迁移方法、装置、电子设备、存储介质 | |
Bradley | Hardware methods to replace software procedures in sorting and array calculations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |