CN113032427B - 一种用于cpu和gpu平台的向量化查询处理方法 - Google Patents
一种用于cpu和gpu平台的向量化查询处理方法 Download PDFInfo
- Publication number
- CN113032427B CN113032427B CN202110388426.9A CN202110388426A CN113032427B CN 113032427 B CN113032427 B CN 113032427B CN 202110388426 A CN202110388426 A CN 202110388426A CN 113032427 B CN113032427 B CN 113032427B
- Authority
- CN
- China
- Prior art keywords
- vector
- vector index
- grouping
- value
- index
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 26
- 239000013598 vector Substances 0.000 claims abstract description 364
- 238000004364 calculation method Methods 0.000 claims abstract description 67
- 238000004220 aggregation Methods 0.000 claims abstract description 62
- 230000002776 aggregation Effects 0.000 claims abstract description 62
- 239000012634 fragment Substances 0.000 claims abstract description 19
- 238000005259 measurement Methods 0.000 claims abstract description 16
- 238000013507 mapping Methods 0.000 claims abstract description 14
- 238000012545 processing Methods 0.000 claims description 80
- 239000011159 matrix material Substances 0.000 claims description 40
- 238000000034 method Methods 0.000 claims description 39
- 230000008569 process Effects 0.000 claims description 20
- 230000006835 compression Effects 0.000 claims description 4
- 238000007906 compression Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 14
- 238000003860 storage Methods 0.000 description 10
- 238000004590 computer program Methods 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000005111 flow chemistry technique Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- GKQPCPXONLDCMU-CCEZHUSRSA-N lacidipine Chemical compound CCOC(=O)C1=C(C)NC(C)=C(C(=O)OCC)C1C1=CC=CC=C1\C=C\C(=O)OC(C)(C)C GKQPCPXONLDCMU-CCEZHUSRSA-N 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000007500 overflow downdraw method Methods 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/24—Querying
- G06F16/245—Query processing
- G06F16/24569—Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
-
- 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/2228—Indexing structures
- G06F16/2237—Vectors, bitmaps or matrices
-
- 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/2228—Indexing structures
- G06F16/2264—Multidimensional index structures
-
- 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/2228—Indexing structures
- G06F16/2272—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/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
- G06F16/24556—Aggregation; Duplicate elimination
-
- 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/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种用于CPU和GPU平台的向量化查询处理方法,包括以下步骤:S1将数据库中事实表的数据列划分为若干向量分片,并将每一向量分片分配到一个对应的线程中;S2将查询命令SQL生成维向量,所有的维向量组成分组立方体;S3事实表的外键列对应的向量分片与维向量通过向量连接操作,获得事实表记录在相应分组立方体中的地址分量,并将地址分量记录在向量索引相应的位置上;S4基于分组立方体生成分组向量,并根据向量索引的非空值访问事实表对应度量数据的向量分片,并对向量分片进行聚集计算,将聚集计算的结果映射到分组向量中;S5对分组向量进行归并计算,生成查询结果集。
Description
技术领域
本发明涉及一种用于CPU和GPU平台的向量化查询处理方法,属于数据查询技术领域。
背景技术
OLAP(On-Line Analytical Processing,联机分析处理)是数据仓库系统最主要的应用技术,用于支持复杂的分析操作,可以根据分析人员的要求快速、灵活地进行大数据量的复杂查询处理,OLAP查询的核心是在事实表与多个维表连接的基础上对连接结果进行分组聚集计算。OLAP在逻辑上构成一个多维数据集,维表对应数据集的维度,事实表对应数据的多维空间,事实表由外键和度量数据组成,事实表外键是事实表度量数据在各维表上的索引位置。
OLAP查询处理过程主要由选择、投影、连接、分组、聚集五种关系操作组成,具体包括:将查询命令SQL分解为应用于各个维表上的子SQL命令,按照WHERE条件投影出当前维表中GROUP BY子句对应的分组属性,不满足选择条件输出空值,满足条件则输出分组属性值,通过子查询生成维向量;将维向量与事实表外键进行连接操作,生成用于度量列聚集计算的向量索引;基于该向量索引进行向量分组聚集计算,生成查询结果集。
其中,对OLAP查询处理时,通常采用行式处理方法和列式处理方法。
行式处理方法一次处理一条记录,跨列访问记录的各属性值时,通过操作符间的流水处理完成。行式处理的流水线模式消除查询的中间结果,但跨列的访问属性增加了cache line miss延迟,数据访问和计算以细粒度的行为单位,CPU数据处理效率相对较低。
列式处理方法在列上执行完整的操作任务,通过中间结果列记录列操作的结果以执行后续的列操作。列式处理在列上执行相同的操作,CPU效率较高,但中间结果列的物化增加了内存开销,中间结果列的内存访问也使查询处理的内存访问延迟。
发明内容
针对上述问题,本发明的目的是提供一种用于CPU和GPU平台的向量化查询处理方法,以减少列存储数据在查询处理过程中产生的中间结果物化开销,提高查询处理性能,同时能够较好的适用于CPU缓存与GPU共享内存/cache上的查询优化。
为实现上述目的,本发明采取以下技术方案:一种用于CPU和GPU平台的向量化查询处理方法,包括以下步骤:S1将数据库中事实表的数据列划分为若干向量分片,并将每一向量分片分配到一个对应的线程中;S2将查询命令SQL生成维向量,数据库中的维表按照WHERE条件投影出当前维表中GROUP BY子句对应的分组分量,维向量的非空值即为对应GROUP BY子句的分量值,所有的维向量组成分组立方体;S3事实表的外键列对应的向量分片与维向量通过向量连接操作,获得事实表记录在相应分组立方体中的地址分量,并将地址分量记录在向量索引相应的位置上;S4基于分组立方体生成分组向量,并根据向量索引的非空值访问事实表对应度量数据的向量分片,并对向量分片进行聚集计算,将聚集计算的结果映射到分组向量中;S5对分组向量进行归并计算,生成查询结果集。
进一步,在CPU端,向量索引为定长向量索引时,向量索引用作选择操作的位图,在进行连接操作时,向量索引的值为分组立方体在维表产生的维向量中的分组分量值;向量索引与分组向量共同完成事实表度量数据的选择、映射和聚集计算。
进一步,在CPU端,向量分片的向量长度满足:查询处理过程中所需要访问的列向量与向量索引向量的总大小不超过L1 cache。
进一步,定长向量索引中位图和向量索引与向量分片的向量长度相同,位图或向量索引中每个元素存储对应查询的中间结果,在向量分片内执行列式处理,每次执行一个列向量的处理,处理结果存储在位图或向量索引中;当执行多表连接时,向量索引首先用作位图,根据向量索引中非空单元位置访问下一个外键列,进行连接操作,并更新向量索引相应单元的分组立方体GCube的分组分量值;创建分组向量GVec,读取向量索引,根据其非空位置访问聚集属性列,执行聚集计算并将计算结果根据向量索引单元值映射到分组向量GVec对应的单元进行归并计算。
进一步,在CPU端,向量索引为压缩向量索引时,向量索引采用二元结构(OID,VALUE)进行表示,OID表示记录偏移位置,VALUE存储分组立方体的分组分量值,选择操作使用OID列存储压缩的选择操作结果,连接操作使用压缩向量索引连续记录满足连接条件的连接结果;聚集操作访问压缩向量索引,根据OID列的值按照位置访问事实表的度量数据的向量分片,进行聚集计算。
进一步,在GPU端,向量索引为定长向量索引时,按照GPU的流处理器(SM)和线程块将数据划分为矩阵组,作为GPU向量化查询处理的数据粒度,位图与向量索引对应的矩阵组记录每个线程的数据在选择、连接操作过程的中间结果;聚集操作时,相同SM共享一个分组向量用于聚集计算,不同SM的分组向量通过全局归并操作计算出最终的分组聚集计算结果。
进一步,在GPU端,向量分片的向量大小由GPU可编程的共享显存、位图以及向量索引的大小决定,若GPU可编程的共享显存大小为M,位图宽度为b,向量索引宽度为v,线程块内线程数量为n,则GPU端的每线程向量长度为:M/[(b+v)×n];当使用向量索引表示位图时,则GPU端的向量长度为M/(b×n)。
进一步,在GPU端进行向量化查询处理时,以数据矩阵方式访问数据,将选择操作结果存储于位图矩阵,将连接操作结果存储于向量索引矩阵,各线程根据向量索引矩阵执行SM内的基于分组向量的聚集计算,最终执行SM间分组向量的归并处理,完成查询处理任务;当执行多表连接时,根据向量索引的位置访问、向量连接和分组立方体的分组分量值进行迭代计算,连接操作结束后,根据向量索引非空值位置访问度量列矩阵,执行聚集计算并将结果映射到分组向量相应的位置进行归并计算。
进一步,在GPU端,向量索引为压缩向量索引时,向量索引采用二元结构(OID,VALUE)进行表示,OID表示记录偏移位置,VALUE存储分组立方体的分组分量值,将定长的位图或向量索引压缩为紧缩结构,定长位图压缩为变长的OID序列,定长的向量索引压缩为变长的(OID,VALUE)数据对,在下一个操作符执行时仅顺序扫描连续的压缩位图或向量索引,GPU线程按照OID值访问下一数据列,完成查询处理。
进一步,在GPU端,每个线程均设置一个计数器变量,存储相应线程向量中连续存储的压缩数据的数量,在选择操作中,满足条件记录的OID连续存储在线程向量中,对应计数器更新为满足条件记录的数量,不满足条件记录的OID被其后的满足条件记录的OID更新,同时更新计数器的值,各线程根据计数器的值访问压缩位图中的OID,按照偏移位置访问外键列,在压缩向量索引中记录满足连接条件数据的OID值和分组立方体的分组分量值,同时更新线程计数器的值,连接操作完成后,线程通过计数器的值访问压缩向量索引中的(OID,VALUE)数据对,根据OID值访问事实表度量列数据矩阵上的数据,执行聚集计算,并将聚集计算的结果映射到分组向量中进行归并计算。
本发明由于采取以上技术方案,其具有以下优点:
1、本发明采用基于向量索引的OLAP查询处理方法,使用向量连接、向量分组聚集算法简化传统的哈希表结构,减少向量化查询处理时复杂数据结构和操作对CPU、GPU等向量化查询处理效率的影响。
2、本发明通过位图、向量索引、压缩向量索引融合方法简化查询处理中间结果的数据类型,降低存储开销;
3、通过面向GPU硬件架构特征的向量化处理方法支持GPU平台上高存储效率的向量化查询处理。
附图说明
图1是本发明一实施例中用于CPU和GPU平台的向量化查询处理的结构示意图;
图2是本发明一实施例中向量化OLAP查询处理方法的示意图;
图3是本发明一实施例中CPU端采用定长向量索引方法的示意图;
图4是本发明一实施例中CPU端采用压缩向量索引方法的示意图;
图5是本发明一实施例中GPU端采用定长向量索引方法的示意图;
图6是本发明一实施例中GPU端采用压缩向量索引方法的示意图;
图7是本发明一实施例中分组向量的归并计算方法的示意图;
图8是本发明一实施例中流处理器处理方法的示意图。
具体实施方式
为了使本领域技术人员更好的理解本发明的技术方向,通过具体实施例对本发明进行详细的描绘。然而应当理解,具体实施方式的提供仅为了更好地理解本发明,它们不应该理解成对本发明的限制。在本发明的描述中,需要理解的是,所用到的术语仅仅是用于描述的目的,而不能理解为指示或暗示相对重要性。
本发明涉及一种用于CPU和GPU平台的向量化查询处理方法,特别是关于列存储引擎上如何通过将查询处理的数据以适合cache大小的向量为单位的处理方法使查询中间结果以向量索引的形式在cache中存储、访问和计算,减少查询处理过程中中间结果的存储访问代价,提高查询处理性能。根据处理器cache结构和线程访问特点的不同,在CPU和GPU端采用不同的向量索引访问和压缩方法。本发明基于向量索引机制将数据库的选择、投影、连接、分组和聚集操作通过一系列基于向量索引的算法实现,并通过将数据列划分为适合cache处理的向量组方法实现以向量索引为中间结果的cache内查询处理,消除常规列存储模型上查询处理过程中较大的中间结果列的物化和访问代价,提高内存利用率,同时通过cache内向量索引的物化和访问方法继承列式数据处理的高效率,提高查询处理性能,尤其在GPU平台通过向量化查询处理方法减少对GPU内存的消耗,提高GPU内存数据处理容量。下面通过一具体实施例对本发明中技术方案进行详细说明。
实施例:
基于向量索引(Vector Index)的查询处理方法是一种MOLAP(多维OLAP)模型与ROLAP(关系OLAP)模型结合OLAP查询处理方法,本实施例公开了一种用于CPU和GPU平台的向量化查询处理方法,如图1所示,包括以下步骤:
S1将数据库中事实表的数据列划分为若干向量分片,并将每一向量分片分配到一个对应的线程中。
数据库由事实表和维表构成,在逻辑上构成一个多维数据集,维表对应数据集的维度,事实表对应数据的多维空间,事实表由外键和度量数据组成,事实表外键是事实表度量数据在各维表上的索引位置。
S2维表是多维数据集的元数据,对应各维度上的描述信息,包括维属性和层次属性,将查询命令SQL生成维向量,数据库中的维表按照WHERE条件投影出当前维表中GROUPBY子句对应的分组分量,维向量的非空值即为对应GROUP BY子句的分量值,所有的维向量中GROUP BY属性值组成分组立方体(GCube)。维向量记录维表相应的选择结果的非空值为该维表记录在查询中GROUP BY子句在查询分组立方体(GCube)上的分组分量。
S3事实表的外键列对应的向量分片与维向量通过向量连接操作,获得事实表记录在相应分组立方体中的地址分量,并将地址分量记录在向量索引相应的位置上。
维表主键为代表键,即为连续的自然数1,2,3……,维向量的单元位置映射为维表主键值,事实表外键列将外键值直接映射到相应的维向量对应单元,事实表外键列与维向量通过连接操作获得该事实表记录在相应维向量中分组立方体(GCube)的地址分量,记录在向量索引相应的位置上。
向量索引记录了事实表外键列与相应的维向量之间的连接结果,空值代表该事实表的数据在查询中不输出,非空值代表该事实表的数据参与查询输出并记录其在分组立方体(GCube)中的地址分量,该部分计算是在较小的事实表外键列数据上进行的CPU消耗较大的计算,称为计算密集型负载。
S4基于分组立方体生成分组向量,并根据向量索引的非空值访问事实表对应度量数据的向量分片,并对向量分片进行聚集计算,将聚集计算的结果映射到分组向量中。
分组立方体(GCube)转换为分组向量(GVec),分组向量用于记录事实表度量数据在GROUP BY分组中的聚集值。根据向量索引非空值访问相应的事实表度量数据,并进行聚集计算,将聚集计算的结果映射到分组向量中,并进行归并计算。该部分计算是在较大的事实表数据上进行的对CPU消耗较轻量的计算,称为数据密集型计算。
S5对分组向量进行归并计算,生成查询结果集。
查询处理生成的分组向量将维表元数据管理负载计算中GROUP BY分组属性、映射信息还原为GROUP BY分组属性和聚集值,生成查询结果集。
如图2所示,查询处理中的位图(bitmap)可以看作是简化的向量索引(VecInx),DVec为维向量,GVec为分组向量。事实表上的选择操作lo_discount<5AND lo_quantity<20的选择结果存储于位图,然后根据位图中非零的位置访问事实表外键列,与维向量DVec执行连接操作,并将连接操作结果存储于向量索引VecInx中。创建分组向量GVec,基于向量索引中非空位置访问事实表度量列执行聚集计算,将计算结果映射到向量索引中记录的分组向量GVec的地址中进行归并计算。
向量化处理是将列数据划分为向量大小的行组,通过优化的向量大小设置使查询处理的所有列分片在L1 cache内流水处理,中间结果列以向量形式物化在L1 cache中,消除内存空间的存储开销和访问延迟,既保留了列式处理较高的CPU效率,又通过L1 cache缓存的向量优化中间结果物化性能,支持流水处理。
如图3所示,在CPU端,向量索引为定长向量索引时,向量索引用作选择操作的位图,取值为0或1,在进行连接操作时,向量索引的值为分组立方体GCube在相应维表产生的维向量中的分组分量值;在进行聚集操作时,向量索引与分组向量共同完成事实表度量数据的选择、映射和聚集计算。
事实表数据列划分为若干向量分片。在系统中向量长度默认为1024,但向量分片的向量长度满足:查询处理过程中所需要访问的列向量与向量索引向量的总大小不超过L1cache。定长向量索引中位图和向量索引与向量分片的向量长度相同,位图或向量索引中每个元素存储对应查询的中间结果,在向量分片内执行列式处理,每次执行一个列向量的处理,处理结果存储在位图或向量索引中。如图3中所示,首先执行discount列上的选择操作discount<5,执行结果以0或1记录在位图中,然后再扫描位图,根据其中非零项的位置访问quantity列,执行选择操作quantity<20,并将选择操作的结果更新在位图中。执行完选择操作后,根据位图中非零项的位置访问外键列lo_orderdate,将值映射到维向量DVec对应单元中,即进行连接操作,读取分组立方体GCube分组分量存储在向量索引VecInx中的位置,当位图与向量索引使用相同数据结构时在向量索引中将非零项即“1”更新为分组立方体GCube分组分量值。
当执行多表连接时,向量索引首先用作位图,根据向量索引中非空单元位置访问下一个外键列,进行连接操作,并更新向量索引相应单元的分组立方体GCube的分组分量值;创建分组向量GVec,读取向量索引,根据其非空位置访问聚集属性列exprice和discount,执行聚集计算并将计算结果根据向量索引单元值映射到分组向量GVec对应的单元进行归并计算。
在CPU中,每个线程处理的是都是连续的列向量分片,位图、向量索引记录查询处理的中间结果由于向量长度较小,可以自动缓存于L1 cache中,实现以向量分片为粒度的流水处理。每个线程执行完后获得了自身向量分片上经过聚集计算获得的分组向量GVec,最后通过全局的线程间分组向量GVec归并操作生成全局查询结果。
在CPU端,向量索引为压缩向量索引时,如图4所示,向量索引采用二元结构(OID,VALUE)进行表示,OID表示记录偏移位置,VALUE存储分组立方体的分组分量值,选择操作使用OID列存储压缩的选择操作结果,连接操作使用压缩向量索引连续记录满足连接条件的连接结果;聚集操作访问压缩向量索引,根据OID列的值按照位置访问事实表的度量数据的向量分片,进行聚集计算。
位图压缩结构中连续存储非零项位置对应的OID值,后续操作可以连续访问OID值,并按OID值访问下一列相应位置的数据。压缩向量索引连续记录满足选择和连接条件记录的OID和分组立方体GCube的分组分量值,当前位置不满足连接条件时该位置被后续满足连接条件的数据(OID,VALUE)替代,在多表连接操作中压缩向量索引长度持续递减。压缩位图与向量索引的长度与向量长度相同,当选择率较高或选择率较低但数据分布偏斜时,也满足压缩数据存储空间需求。
在GPU端,向量索引为定长向量索引时,按照GPU的SM(流处理器)和线程块(threadblock)将数据划分为矩阵组,作为GPU向量化查询处理的数据粒度,位图与向量索引对应的矩阵组记录每个线程的数据在选择、连接操作过程的中间结果;每个线程通过位图与向量索引矩阵完成对应数据的查询处理过程,聚集操作时,相同SM共享一个分组向量用于聚集计算,不同SM的分组向量通过全局归并操作计算出最终的分组聚集计算结果。
在GPU端,向量分片的向量大小由GPU可编程的共享显存(shared memory)、位图以及向量索引的大小决定,通过共享显存物化查询中间结果,减少内存物化存储空间开销。若GPU可编程的共享显存大小为M,位图宽度为b,向量索引宽度为v,线程块内线程数量为n,则GPU端的每线程向量长度为:M/[(b+v)×n];当使用向量索引表示位图时(仅取值0或1),则GPU端的向量长度为M/(b×n)。
与CPU不同,GPU各SM线程块内的线程共同访问连续的数据区域,每线程访问的数据不连续,形成矩阵结构。在GPU端进行向量化查询处理时,以数据矩阵方式访问数据,将选择操作结果存储于位图矩阵,将连接操作结果存储于向量索引矩阵,各线程根据向量索引矩阵执行SM内的基于分组向量的聚集计算,最终执行SM间分组向量的归并处理,完成查询处理任务。如图5所示,Discount列数据矩阵被GPU各SM的线程并行访问,执行discount<5操作,选择操作结果记录在位图矩阵相应的位置上,然后线程按位图中非零项的位置访问quantity列数据矩阵的数据,执行quantity<20操作,根据选择操作的结果更新位图矩阵相应位置的值。选择操作完成后,按位图矩阵访问外键列矩阵lo_orderdate相应的位置,将外键值映射到维向量相应的位置上,若为空值则将向量索引矩阵相应位置设置为空值,否则计算相应的分组立方体GCube分组分量值并存储入相应位置。
当执行多表连接时,根据向量索引的位置访问、向量连接和分组立方体的分组分量值进行迭代计算,连接操作结束后,根据向量索引非空值位置访问度量列矩阵exprice和discount,执行聚集计算并将结果映射到分组向量相应的位置进行归并计算。定长向量索引方法使用GPU和SM中的较小但访问延迟较低的共享内存(shared memory)存储查询处理过程中的位图和向量索引中间结果,通过向量化处理使中间结果在共享内存中物化和访问,减少查询中间结果的GPU内存物化消耗和查询处理延迟。
在GPU端,向量索引为压缩向量索引时,向量索引采用二元结构(OID,VALUE)进行表示,OID表示记录偏移位置,VALUE存储分组立方体的分组分量值,记录OID与VALUE值,GPU线程按OID访问对应的数据,完成查询处理。其具体过程为:
将定长的位图或向量索引压缩为紧缩结构,定长位图压缩为变长的OID序列,定长的向量索引压缩为变长的(OID,VALUE)数据对,在下一个操作符执行时仅顺序扫描连续的压缩位图或向量索引,GPU线程按照OID值访问下一数据列,完成查询处理。这种查询处理方法减少了位图或向量索引的访问,消除定长位图或向量索引使用中的分支判断指令,提高GPU计算效率。
与定长向量索引相比,压缩向量索引下位图矩阵和向量索引矩阵中每个线程对应的向量采用预设定长存储空间和紧缩数据存储模式。如图6所示,位图矩阵由每个线程对应的向量分片构成,每个向量分片并不连续,向量分片的向量大小由GPU中的SM数量和线程块数量确定。每个线程均设置一个计数器变量,存储相应线程向量中连续存储的压缩数据的数量。例如,数据矩阵discount执行选择操作discount<5后,满足条件记录的OID连续存储在线程向量中,相应的计数器更新为满足条件记录的数量。然后按计数器数量扫描线程向量单元,按OID位置访问quantity数据矩阵相应的数据执行quantity<20的选择操作,满足条件记录的OID连续更新到线程向量中,不满足条件记录的OID被其后的满足条件记录的OID更新,同时更新计数器counter的值。各线程根据计数器counter的值访问压缩位图中的OID,按照偏移位置访问外键列,通过向量连接算法完成连接操作,在压缩向量索引中记录满足连接条件数据的OID值和分组立方体的分组分量值,同时更新线程计数器的值,连接操作完成后,线程通过计数器counter的值访问压缩向量索引中的(OID,VALUE)数据对,根据OID值访问事实表度量列数据矩阵上的数据,执行聚集计算,并将聚集计算的结果映射到分组向量中进行归并计算。
在聚集计算中,CPU端每线程使用L1 cache进行聚集计算,通过私有分组向量进行分组聚集计算,各线程间分组向量通过归并计算得到全局分组向量结果。如图7所示,每个线程访问各自的压缩向量索引,根据压缩向量索引中的OID值映射的位置访问度量数据向量,将聚集表达式结果映射到私有分组向量中进行聚集计算,最后,各线程的私有分组向量通过全局归并计算获得全局分组向量,作为查询结果。
GPU端每个SM对应一个块(BLOCK),每个SM内通过线程块管理并行计算线程,每个线程处理一个向量分片,全部线程构成一个向量矩阵形式。相同的SM共享统一的共享内存(shared memory),不同的SM间通过全局内存进行数据共享访问。如图8所示,GPU中有2个SM,每个SM内线程块中线程的数量为2,数据按线程分配,每个线程对应不连续的向量数据。相同SM内的线程共享访问共享内存中的分组向量GVec,通过并发控制完成线程块内各线程基于压缩向量索引访问度量数据上的聚集计算结果的归并计算,各线程块执行完毕后,各SM共享内存中的分组向量通过全局内存进行归并计算,得到查询对应的全局分组向量结果。
本发明提出了一种适合CPU和GPU的向量化查询处理方法,基于定制化的向量连接、向量分组聚集算法实现了向量化的查询处理方法,使复杂的OLAP查询处理简化为一系列向量计算,并通过位图、向量索引以及压缩位图、压缩向量索引技术优化cache内查询中间结果的物化和访问,降低列存储数据在查询处理时中间结果物化的内存空间开销,提高查询处理性能。
本发明可以应用于CPU与GPU平台上,通过向量索引、向量连接、向量分组聚集的向量化查询处理方法实现对OLAP查询中间结果的cache优化,利用位图、向量索引实现在cache内查询中间结果的物化访问与计算,减少OLAP查询处理过程中中间结果物化的内存开销和访问延迟,尤其在GPU平台上通过共享内存中的位图、向量索引物化技术消除查询处理时中间结果在全局内存的开销,提高GPU内存的利用率,降低GPU查询处理时全局内存访问延迟,通过对位图、向量索引的压缩和基于压缩数据的向量化流水处理方法提升查询处理性能。
上述各实施例仅用于说明本发明,各部件的数据类型、应用位置及数据结构都是可以有所变化的,在本发明技术方案的基础上,凡根据本发明原理对个别部件进行的改进和等同变换,均不应排除在本发明的保护范围之外。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。上述内容仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围。
Claims (7)
1.一种用于CPU和GPU平台的向量化查询处理方法,其特征在于,包括以下步骤:
S1将数据库中事实表的数据列划分为若干向量分片,并将每一所述向量分片分配到一个对应的线程中;
S2将查询命令SQL生成维向量,所述数据库中的维表按照WHERE条件投影出当前维表中GROUPBY子句对应的分组分量,所述维向量的非空值即为对应GROUP BY子句的分量值,所有的维向量组成分组立方体;
S3所述事实表的外键列对应的向量分片与所述维向量通过向量连接操作,获得所述事实表记录在相应分组立方体中的地址分量,并将所述地址分量记录在向量索引相应的位置上;
S4基于所述分组立方体生成分组向量,并根据所述向量索引的非空值访问事实表对应度量数据的向量分片,并对所述向量分片进行聚集计算,将所述聚集计算的结果映射到所述分组向量中;
S5对所述分组向量进行归并计算,生成查询结果集;
在CPU和GPU端采用不同的向量索引访问和压缩方法:
在CPU端,向量索引为定长向量索引时,所述向量索引用作选择操作的位图,在进行连接操作时,所述向量索引的值为所述分组立方体在所述维表产生的维向量中的分组分量值;所述向量索引与分组向量共同完成事实表度量数据的选择、映射和聚集计算;
在GPU端,向量索引为定长向量索引时,按照GPU的SM和线程块将数据划分为矩阵组,作为GPU向量化查询处理的数据粒度,位图与向量索引对应的矩阵组记录每个线程的数据在选择、连接操作过程的中间结果;聚集操作时,相同SM共享一个分组向量用于聚集计算,不同SM的分组向量通过全局归并操作计算出最终的分组聚集计算结果;
在GPU端,所述向量索引为压缩向量索引时,所述向量索引采用二元结构(OID,VALUE)进行表示,OID表示记录偏移位置,VALUE存储所述分组立方体的分组分量值,将定长的位图或向量索引压缩为紧缩结构,定长位图压缩为变长的OID序列,定长的向量索引压缩为变长的(OID,VALUE)数据对,在下一个操作符执行时仅顺序扫描连续的压缩位图或向量索引,GPU线程按照OID值访问下一数据列,完成查询处理。
2.如权利要求1所述的用于CPU和GPU平台的向量化查询处理方法,其特征在于,在CPU端,所述向量分片的向量长度满足:查询处理过程中所需要访问的列向量与向量索引向量的总大小不超过L1 cache。
3.如权利要求2所述的用于CPU和GPU平台的向量化查询处理方法,其特征在于,所述定长向量索引中位图和向量索引与向量分片的向量长度相同,所述位图或向量索引中每个元素存储对应查询的中间结果,在向量分片内执行列式处理,每次执行一个列向量的处理,处理结果存储在所述位图或向量索引中;
当执行多表连接时,所述向量索引首先用作位图,根据所述向量索引中非空单元位置访问下一个外键列,进行连接操作,并更新所述向量索引相应单元的分组立方体GCube的分组分量值;创建分组向量GVec,读取向量索引,根据其非空位置访问聚集属性列,执行聚集计算并将计算结果根据向量索引单元值映射到分组向量GVec对应的单元进行归并计算。
4.如权利要求1所述的用于CPU和GPU平台的向量化查询处理方法,其特征在于,在CPU端,所述向量索引为压缩向量索引时,所述向量索引采用二元结构(OID,VALUE)进行表示,OID表示记录偏移位置,VALUE存储所述分组立方体的分组分量值,选择操作使用OID列存储压缩的选择操作结果,连接操作使用压缩向量索引连续记录满足连接条件的连接结果;聚集操作访问压缩向量索引,根据OID列的值按照位置访问事实表的度量数据的向量分片,进行聚集计算。
5.如权利要求1所述的用于CPU和GPU平台的向量化查询处理方法,其特征在于,在GPU端,所述向量分片的向量大小由GPU可编程的共享显存、位图以及向量索引的大小决定,若GPU可编程的共享显存大小为M,位图宽度为b,向量索引宽度为v,线程块内线程数量为n,则GPU端的每线程向量长度为:M/[(b+v)×n];当使用向量索引表示位图时,则GPU端的向量长度为M/(b×n)。
6.如权利要求5所述的用于CPU和GPU平台的向量化查询处理方法,其特征在于,在GPU端进行向量化查询处理时,以数据矩阵方式访问数据,将选择操作结果存储于位图矩阵,将连接操作结果存储于向量索引矩阵,各线程根据向量索引矩阵执行SM内的基于分组向量的聚集计算,最终执行SM间分组向量的归并处理,完成查询处理任务;
当执行多表连接时,根据所述向量索引的位置访问、向量连接和分组立方体的分组分量值进行迭代计算,连接操作结束后,根据所述向量索引非空值位置访问度量列矩阵,执行聚集计算并将结果映射到分组向量相应的位置进行归并计算。
7.如权利要求1所述的用于CPU和GPU平台的向量化查询处理方法,其特征在于,在GPU端,每个线程均设置一个计数器变量,存储相应线程向量中连续存储的压缩数据的数量,在选择操作中,满足条件记录的OID连续存储在线程向量中,对应计数器更新为满足条件记录的数量,不满足条件记录的OID被其后的满足条件记录的OID更新,同时更新计数器的值,各线程根据计数器的值访问压缩位图中的OID,按照偏移位置访问外键列,在压缩向量索引中记录满足连接条件数据的OID值和分组立方体的分组分量值,同时更新线程计数器的值,连接操作完成后,线程通过计数器的值访问压缩向量索引中的(OID,VALUE)数据对,根据OID值访问事实表度量列数据矩阵上的数据,执行聚集计算,并将所述聚集计算的结果映射到分组向量中进行归并计算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110388426.9A CN113032427B (zh) | 2021-04-12 | 2021-04-12 | 一种用于cpu和gpu平台的向量化查询处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110388426.9A CN113032427B (zh) | 2021-04-12 | 2021-04-12 | 一种用于cpu和gpu平台的向量化查询处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113032427A CN113032427A (zh) | 2021-06-25 |
CN113032427B true CN113032427B (zh) | 2023-12-08 |
Family
ID=76456490
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110388426.9A Active CN113032427B (zh) | 2021-04-12 | 2021-04-12 | 一种用于cpu和gpu平台的向量化查询处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113032427B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113254427B (zh) * | 2021-07-15 | 2021-11-16 | 深圳市同富信息技术有限公司 | 一种数据库扩展方法和装置 |
CN116028541B (zh) * | 2023-02-15 | 2023-06-20 | 山东浪潮科学研究院有限公司 | 一种数据向量化聚集方法、装置、设备及存储介质 |
CN116501828B (zh) * | 2023-06-27 | 2023-09-12 | 北京大学 | 基于非结构化数据集的服务器无感知向量查询方法和系统 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663116A (zh) * | 2012-04-11 | 2012-09-12 | 中国人民大学 | 面向列存储数据仓库的多维olap查询处理方法 |
CN103309958A (zh) * | 2013-05-28 | 2013-09-18 | 中国人民大学 | Gpu和cpu混合架构下的olap星型连接查询优化方法 |
CN104361118A (zh) * | 2014-12-01 | 2015-02-18 | 中国人民大学 | 一种适应协处理器的混合olap查询处理方法 |
CN104866608A (zh) * | 2015-06-05 | 2015-08-26 | 中国人民大学 | 一种数据仓库中基于连接索引的查询优化方法 |
CN105868388A (zh) * | 2016-04-14 | 2016-08-17 | 中国人民大学 | 一种基于fpga的内存olap查询优化方法 |
CN106844703A (zh) * | 2017-02-04 | 2017-06-13 | 中国人民大学 | 一种面向数据库一体机的内存数据仓库查询处理实现方法 |
CN107784001A (zh) * | 2016-08-26 | 2018-03-09 | 北京计算机技术及应用研究所 | 基于cuda的并行空间查询方法 |
CN109906451A (zh) * | 2016-09-07 | 2019-06-18 | 脸谱公司 | 使用多义码的相似性搜索 |
CN110263038A (zh) * | 2019-06-11 | 2019-09-20 | 中国人民大学 | 一种基于分组向量的哈希多表连接实现方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10747737B2 (en) * | 2014-11-25 | 2020-08-18 | Sap Se | Altering data type of a column in a database |
-
2021
- 2021-04-12 CN CN202110388426.9A patent/CN113032427B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663116A (zh) * | 2012-04-11 | 2012-09-12 | 中国人民大学 | 面向列存储数据仓库的多维olap查询处理方法 |
CN103309958A (zh) * | 2013-05-28 | 2013-09-18 | 中国人民大学 | Gpu和cpu混合架构下的olap星型连接查询优化方法 |
CN104361118A (zh) * | 2014-12-01 | 2015-02-18 | 中国人民大学 | 一种适应协处理器的混合olap查询处理方法 |
CN104866608A (zh) * | 2015-06-05 | 2015-08-26 | 中国人民大学 | 一种数据仓库中基于连接索引的查询优化方法 |
CN105868388A (zh) * | 2016-04-14 | 2016-08-17 | 中国人民大学 | 一种基于fpga的内存olap查询优化方法 |
CN107784001A (zh) * | 2016-08-26 | 2018-03-09 | 北京计算机技术及应用研究所 | 基于cuda的并行空间查询方法 |
CN109906451A (zh) * | 2016-09-07 | 2019-06-18 | 脸谱公司 | 使用多义码的相似性搜索 |
CN106844703A (zh) * | 2017-02-04 | 2017-06-13 | 中国人民大学 | 一种面向数据库一体机的内存数据仓库查询处理实现方法 |
CN110263038A (zh) * | 2019-06-11 | 2019-09-20 | 中国人民大学 | 一种基于分组向量的哈希多表连接实现方法 |
Non-Patent Citations (5)
Title |
---|
GPU数据库OLAP优化技术研究;张延松 等;《软件学报》;第34卷(第11期);5205-5229 * |
Parallel online spatial and temporal aggregations on multi-core CPUs and many-core GPUs;Jianting Zhang 等;《Information Systems》;第44卷;134-154 * |
一种适应GPU的混合OLAP查询处理模型;张宇 等;《软件学报》;第27卷(第5期);1246-1265 * |
内存OLAP多核并行查询优化技术研究;焦敏 等;《计算机学报》;第37卷(第9期);1895-1910 * |
面向多核CPU和GPU平台的数据库星形连接优化;刘专 等;《计算机应用》;第41卷(第3期);611-617 * |
Also Published As
Publication number | Publication date |
---|---|
CN113032427A (zh) | 2021-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113032427B (zh) | 一种用于cpu和gpu平台的向量化查询处理方法 | |
US10331572B2 (en) | Selective data mirroring for in-memory databases | |
CN107851123B (zh) | 在存储器中虚拟列单元内具体化表达式以加速分析查询 | |
US8660985B2 (en) | Multi-dimensional OLAP query processing method oriented to column store data warehouse | |
CN103631911B (zh) | 基于数组存储和向量处理的olap查询处理方法 | |
US10366083B2 (en) | Materializing internal computations in-memory to improve query performance | |
US5943677A (en) | Sparsity management system for multi-dimensional databases | |
CN104361113B (zh) | 一种内存‑闪存混合存储模式下的olap查询优化方法 | |
CN106844703B (zh) | 一种面向数据库一体机的内存数据仓库查询处理实现方法 | |
US8762407B2 (en) | Concurrent OLAP-oriented database query processing method | |
CN103942342B (zh) | 一种内存数据库oltp&olap并发查询优化方法 | |
CN105589951B (zh) | 一种海量遥感影像元数据分布式存储方法及并行查询方法 | |
CN103177062B (zh) | 用于高速内存在线分析处理查询和操作的加速查询操作器 | |
US20120011144A1 (en) | Aggregation in parallel computation environments with shared memory | |
US11797509B2 (en) | Hash multi-table join implementation method based on grouping vector | |
WO2013152543A1 (zh) | 面向列存储数据仓库的多维olap查询处理方法 | |
Chavalier et al. | Document-oriented data warehouses: Models and extended cuboids, extended cuboids in oriented document | |
US20080016322A1 (en) | Fast aggregation of compressed data using full table scans | |
CN102521406A (zh) | 海量结构化数据复杂查询任务的分布式查询方法和系统 | |
EP2469423B1 (en) | Aggregation in parallel computation environments with shared memory | |
US11294816B2 (en) | Evaluating SQL expressions on dictionary encoded vectors | |
CN112269797A (zh) | 一种卫星遥感数据在异构计算平台上的多维查询方法 | |
Dhanasree et al. | A survey on OLAP | |
CN112463904B (zh) | 一种分布式空间矢量数据与单点空间数据混合分析方法 | |
CN111026817B (zh) | 一种多维计算方法及装置 |
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 |