CN115757533A - 用于数据查询的数据过滤方法及装置 - Google Patents
用于数据查询的数据过滤方法及装置 Download PDFInfo
- Publication number
- CN115757533A CN115757533A CN202211273807.3A CN202211273807A CN115757533A CN 115757533 A CN115757533 A CN 115757533A CN 202211273807 A CN202211273807 A CN 202211273807A CN 115757533 A CN115757533 A CN 115757533A
- Authority
- CN
- China
- Prior art keywords
- target
- data
- operator
- function
- query
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 82
- 238000001914 filtration Methods 0.000 title claims abstract description 74
- 230000006870 function Effects 0.000 claims abstract description 191
- 230000008569 process Effects 0.000 claims description 38
- 239000011159 matrix material Substances 0.000 claims description 35
- 238000005457 optimization Methods 0.000 claims description 14
- 238000012545 processing Methods 0.000 claims description 12
- 230000003044 adaptive effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000010223 real-time analysis Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
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/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9035—Filtering based on additional data, e.g. user or group profiles
-
- 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/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Operations Research (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本说明书实施例提供一种用于数据查询的数据过滤方法和装置,过滤方法通过目标设备执行,该目标设备作用为数据库的存储节点。该方法包括,确定查询涉及的目标过滤算子,并获取目标设备中存储的经编码的目标数据块。进而,利用目标数据块的数据特征和编码特征,查询预先构建的算子函数集,得到目标过滤算子的目标执行函数。其中,算子函数集用于记录各种数据类型、各种编码方式所对应适合使用的过滤算子执行函数。于是,可以利用查询匹配出的目标执行函数过滤目标数据块,得到过滤结果。
Description
技术领域
本说明书一个或多个实施例涉及数据库查询领域,尤其涉及一种用于数据查询的数据过滤方法及装置。
背景技术
互联网的发展产生了海量数据存储需求。海量数据可以包括租户或用户的个人数据、隐私数据等,这些数据常常以数据表的形式,存储于数据库集群中。为了高效地进行数据的存储和管理,目前多种主流的数据库采用LSM(Log Structured Merge)的存储方式,通过增量写日志与多级日志数据合并实现数据存储。在此架构下,一般采用SSTable(sorted-string table)的数据结构,进行数据的持久化存储。根据SSTable,将数据按照主键key进行排序,从而提供有序的数据存储,索引与查询服务。
随着数字化进程的推进,数据库系统存储的数据量在不断上升,对于大量数据的实时分析与查询需求也随之增长,数据库需要提供性能较好的静态数据扫描能力以高效地支持分析型负载。
谓词下推是一种常见的对大量数据过滤扫描(selective scan)性能进行优化的方法。具体而言,在一些数据查询系统中,把一些能够减小中间结果集大小的过滤算子,在不影响最终结果集的情况下下推到执行链路中的更底层先进行计算,从而减小后续处理的数据量,加速查询过程。一些主流数据库通过将过滤算子下推到存储层来实现更高效的SSTable扫描速度。
然而,数据一般是经过压缩和编码后进行存储的。因此,将过滤算子下推到存储层进行初步数据过滤扫描,就不得不考虑数据编码解码的问题。这一问题的处理,往往成为查询执行中的瓶颈。
希望能有改进的方案,可以优化编码数据的过滤扫描过程,从而加速数据查询执行,提升数据库性能。
发明内容
鉴于上述问题,本说明书提供了一种用于数据查询的数据过滤方法和装置,可以在数据扫描过滤时,确定当前数据块适用的过滤算子执行函数,利用该函数对编码状态的数据进行过滤,有效促进谓词下推,提升数据查询效率。
根据第一方面,提供一种用于数据查询的数据过滤方法,通过目标设备执行,该目标设备作用为数据库的存储节点,所述方法包括:
确定查询涉及的目标过滤算子;
获取目标设备中存储的经编码的目标数据块;
利用所述目标数据块的数据特征和编码特征,查询预先构建的算子函数集,得到所述目标过滤算子的目标执行函数;
利用所述目标执行函数过滤所述目标数据块,得到第一过滤结果。
根据一种实现方式,所述算子函数集是根据所述目标设备的硬件平台和运行环境定制的函数集。
在上述实现方式的一个实施例中,算子函数集具体通过以下方式得到:获取基础函数集,所述基础函数集是在编译数据库程序阶段生成的、适用于多种硬件平台的函数集;在运行所述数据库程序过程中,根据运行环境获取优化函数集,所述优化函数集是在所述编译阶段,根据编译环境编译的附加函数集,其中包括,对所述基础函数集中若干函数的优化执行函数;将所述优化函数集添加至所述基础函数集,得到所述算子函数集。
在一个实施例中,算子函数集具体包括,对应于所述目标过滤算子的、多维度的函数矩阵;所述多维度包括,对应于所述数据特征的若干维度,和对应于所述编码特征的若干维度。在这样的情况下,对算子函数集的查询过程可以包括:根据所述数据特征和编码特征,确定所述多维度中各个维度的索引值;根据各个维度的索引值,从所述函数矩阵中确定对应的算子函数,作为所述目标执行函数。
在另一个实施例中,算子函数集具体包括,多个元操作对应的多个子函数矩阵。在这样的情况下,对算子函数集的查询过程可以包括:从所述多个子函数矩阵中,确定所述目标过滤算子所涉及的若干目标元操作对应的若干目标子函数矩阵;根据所述数据特征和编码特征,查询各个目标子函数矩阵,得到若干目标子函数;基于所述若干目标子函数的组合,确定所述目标执行函数。
在具体实施例中,数据特征可以包括以下中的若干项:数据类型,数据长度,元数据类型;编码特征可以包括,编码方式,与编码方式对应的辅助特征。
进一步的,当所述编码方式包括数据按位对齐,所述辅助特征包括对齐位宽;
当所述编码方式包括借助字典的编码,所述辅助特征包括所述字典的相关特征。
在一个实施例中,目标数据块为行列混存数据块;所述第一过滤结果指示,过滤出的目标数据行;所述方法还包括:获取所述查询对应的执行计划中的目标数据列;通过所述目标数据行和目标数据列,确定目标数据范围;对所述目标数据范围中的数据进行解码。
在一个例子中,所述第一过滤结果为结果位图的形式,该结果位图分别以第一值和第二值指示是否属于过滤结果。
根据一种实施方式,目标设备具有支持单指令流多数据流SIMD的向量化寄存器;所述目标执行函数包括针对SIMD的优化操作,所述优化操作包括,根据所述向量化寄存器的向量长度组织数据,采用所述硬件平台对应的指令集基于所述向量化寄存器对组织的数据进行处理。
在一种实现方式中,目标过滤算子涉及比较操作;所述目标数据块的编码方式基于字典进行;所述目标执行函数的执行路径包括:在所述字典的字典引用表中查找所述比较操作的目标值所对应的引用词;在所述字典引用表中,对所述目标数据块中的编码词与上述引用词进行比较处理。
在上述实现方式的一个例子中,所述目标过滤算子包括,比较算子,IN算子,或between算子。
在上述实现方式的一个例子中,目标设备具有支持单指令流多数据流SIMD的向量化寄存器;所述比较处理,包括:利用SIMD在所述字典引用表中进行并行比较处理。
根据第二方面,提供了一种用于数据查询的数据过滤装置,部署在目标设备中,该目标设备作用为数据库的存储节点,所述装置包括:
算子确定单元,配置为确定查询涉及的目标过滤算子;
数据块获取单元,配置为获取目标设备中存储的经编码的目标数据块;
函数查询单元,配置为利用所述目标数据块的数据特征和编码特征,查询预先构建的算子函数集,得到所述目标过滤算子的目标执行函数;
过滤单元,配置为利用所述目标执行函数过滤所述目标数据块,得到第一过滤结果。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面所述的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面所述的方法。
在本说明书实施例中,基于对各种编码方式和各种数据结构特点的研究,可以预先设计出各种编码特征、数据特征所对应的较佳执行函数,从而设计出算子函数集。在执行数据查询过程中,根据当前的编码特征和数据特征查询该算子函数集,可以匹配出当前环境下优选的执行函数。特别是在硬件平台支持单指令流多数据流SIMD计算的情况下,执行函数可以针对当前硬件平台采用优化的SIMD执行方式。通过以上方式,可以在存储层数据解码前,实现数据的有效过滤,减少需解码的数据量,也减少中间结果集的数据量,提升总体查询效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出在一个实施例中实施过程示意图;
图2示出根据一个实施例的数据过滤方法的流程图;
图3示出列存编码下数据过滤过程的具体例子;
图4示出在利用字典的编码方式下具体的过滤函数执行过程;
图5示出根据一个实施例的数据过滤装置的示意框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
如前所述,为了加速数据查询,一些数据库将过滤算子下推到存储层进行初步数据过滤扫描。这个过程中,需要考虑数据编码解码的问题。
在一种相关方案中,在存储数据表时,指定列的编码方式。由于列的编码方式是确定的,这样就可以在扫描开始时选择与该编码方式对应的过滤方案,该过滤方案可以基于编码后的数据进行。但这种编码方式与元数据schema(可限定各个列)绑定的方案下,数据库不能根据数据的特征灵活地选择更合适的编码方式进行存储,会牺牲一定的数据压缩能力。固定编码方式后,实际数据有可能会触发对应编码算法的bad case(较差性能情况),影响压缩和查询性能。
在另一种相关方案中,在存储数据表时,根据数据特点使用自适应编码,但查询时不感知编码数据,数据的扫描和过滤算子都在解码后的结果集上进行操作。也就是说,先对存储的数据块中的数据进行解码,然后进行扫描和过滤。这种方案下数据编码模块与查询执行模块解耦,但对参与扫描的数据块所有数据都需要进行反序列化/解码,解码的过程容易成为查询执行中的性能瓶颈。
在又一种相关方案中,根据数据特点采用自适应编码方式,编码并存储数据块。在数据查询时,针对数据特征来进行过滤优化,通过大量条件分支来确定解码和扫描的执行路径。在数据特征存在一定差异的自适应编码中,这种方案容易在执行时触发CPU分支预测的失败,破坏指令执行的流水线。尤其是在大数据量查询中更优的向量化执行中,频繁地引入分支预测失败会带来显著的性能下降。
在另一个方面,为了加速数据查询和数据过滤,考虑从数据库存储设备的硬件性能提升的角度进行优化。受到摩尔定律的限制,近年来CPU的主频提升有限,一些硬件平台提供向量化寄存器,通过单指令流多数据流SIMD操作来提升数据处理效率。在SIMD中,将多个数据存入向量化寄存器,使用统一的控制信号,控制向量化寄存器中的多个数据进行统一的、并行的计算,如此,提升数据处理速度。
近来,硬件厂商一直在尝试通过提供位宽更大、性能更好的向量化寄存器,来为CPU提供更好的SIMD能力,以增强计算性能。但是向量化寄存器的使用有着一定的限制,需要对软件和算法进行相应的改造,并且结合整个计算的流程进行优化才能达到理想的效果。在谓词下推的场景中,若要利用SIMD模式进行加速,需要结合硬件厂商提供的硬件能力和指令集对具体的过滤算子进行优化,而不同硬件厂商提供的硬件配置和指令集往往是不同的,这使得数据库软件要么难以利用SIMD能力进行查询加速,要么不能适用于不同平台,带来跨平台兼容性问题。
鉴于以上考虑,在本说明书的实施例中,提供一种数据过滤方案,该方案可以针对自适应编码的数据,采用适合硬件平台和数据特点的过滤执行函数,对数据块进行过滤扫描,从而加速数据查询。
图1示出在一个实施例中实施过程示意图。整体实施过程可以划分为编译阶段和执行阶段。
在常规的数据库启用过程中,具有存储和计算能力的目标设备,对数据库程序代码进行编译,生成可执行文件。然后,运行该可执行文件,即运行数据库程序,此时该目标设备即作为数据库的存储节点,可以执行数据库存储节点相应的存储和查询功能。
在上述常规过程基础上,根据图1所示的实施例,在编译数据库程序时,还生成一个算子函数集,其中记录各种数据类型、各种编码方式所对应适合使用的过滤算子执行函数。典型的,该算子函数集可以整理组织为算子函数矩阵,以示出各个算子执行函数与各种数据特征、编码特征的对应关系。目标设备存储该算子函数矩阵,并在运行数据库程序时,加载该算子函数矩阵,用于后续查询执行。
特别的,在一些实施例中,数据库采用自适应编码方式,即根据真实数据的不同特点,动态采用不同的编码方式进行编码,并对编码后的数据进行存储。那么相应的,数据库程序中即包括,对数据进行自适应编码的逻辑代码。上述算子函数矩阵可以根据自适应编码的逻辑代码而设计构建。
进一步的,为了使得数据库程序具有跨平台的兼容性,又可利用一些硬件平台的SIMD能力,在一些实施例中,针对部分可以通过SIMD优化的过滤算子,使用不同硬件厂商提供的不同硬件指标和向量化指令集设计多版本的实现函数。在编译阶段,首先生成跨平台兼容的基础算子函数矩阵,其中的算子执行函数适合于各种平台。此外,在编译过程中,检测编译环境,其中可以指示出目标设备的一些硬件配置信息。然后根据编译环境编译出对应版本的优化算子函数。在目标设备运行数据库程序时,通过运行环境判断可用的优化函数版本,将其添加到基础算子函数矩阵中,得到最终的算子函数矩阵。如此,作为存储节点的目标设备中存储的算子函数矩阵,是适配于目标设备硬件平台的算子函数集合,而上述数据库程序则仍可通用适用于多种不同平台。
在目标设备运行数据库程序后,该目标设备即作用为数据库系统中的存储节点,可以执行数据的存储和查询功能。特别地,该目标设备可以利用前述的算子函数矩阵,加速数据查询过程。
具体地,在查询执行阶段,目标设备(作为存储节点)根据当前的查询请求,获取编码后的数据块,按照查询中涉及的过滤算子对其扫描过滤。典型的,查询请求例如是SQL查询语句。为了加速扫描过滤,目标设备根据数据块的数据特征和编码特征,在之前加载的算子函数矩阵中进行查询匹配,得到过滤算子的优化执行函数。于是,目标设备可以利用该优化执行函数,对编码形态的数据进行过滤。
可以理解,上述算子函数矩阵是预先根据数据库程序的编码逻辑而设计的,其中记录了各种数据类型、各种编码方式所适合使用的过滤算子执行函数,并且在一些实施例中,该算子函数矩阵还是针对目标设备的硬件平台而优化过的函数矩阵,因此,根据当前数据块的数据特征和编码特征查询该算子函数矩阵所得到的优化执行函数,必然是适合目标设备的硬件特点、当前数据块的数据特点和编码特点的执行函数。利用这样的执行函数,可以更加快速准确地对数据块进行扫描过滤,减少后续需要解码的数据量,将过滤操作下推到解码之前。
下面详细描述数据查询阶段的实施方式。
图2示出根据一个实施例的数据过滤方法的流程图,其中的数据过滤用于加速或优化数据查询。该方法通过目标设备执行,该目标设备运行有数据库程序,作用为数据库的存储节点。目标设备具体可以体现为任何具有计算、存储和处理能力的计算单元、服务器、计算机设备等。如图2所示,该数据过滤方法可以包括以下具体描述的步骤。
在步骤21,确定查询涉及的目标过滤算子。这里的目标过滤算子,是根据查询请求确定的、可以下推到存储层的算子。查询请求例如可以是SQL查询语句的形式。在典型的查询执行过程中,有可能下推到存储层的过滤算子可以包括,比较算子,IN算子,between算子,NULL算子,等等。
具体的,在一个例子中,查询请求涉及的查询条件包含某个字段的字段值与设定值的比较,例如,查询的目标表可以是包含多个科目的成绩表,查询请求中的一个查询条件是,数学成绩>=80分。此时可以确定,查询涉及的目标过滤算子包括比较算子。在其他查询条件的情况下,可能涉及其他算子作为目标过滤算子。
在步骤22,获取目标设备中存储的经编码的目标数据块。可以理解,在数据库系统中,数据表中的数据通常被拆分为数据块,存储于持久化存储介质。例如,在某主流数据库系统中,数据块大小约为2M,其中包含多个键值对(k,v)形式的数据项。并且,在SStable数据格式下,数据项按照主键的大小有序存储。这里的目标数据块,可以是待查询的目标数据表(例如前述的成绩表)中的任一数据块。需要强调的是,目标数据块中的数据项处于编码状态。
需要说明的是,以上的步骤21和22,可以以任何合理顺序执行,在此不做限定。
在一个实施例中,目标设备运行的数据库程序采用自适应编码方式,对数据进行编码和存储。在这样的情况下,存储层存储的不同数据表,不同数据块之间,可能采用不同的编码方式进行编码。如此,在以上获取目标数据块的基础上,还可以提取出目标数据块的数据特征和编码特征。
进而,在步骤23,利用上述目标数据块的数据特征和编码特征,查询预先构建的算子函数集,得到与所述数据特征和编码特征对应的执行函数,作为目标过滤算子的目标执行函数。
根据一种实施方式,上述算子函数集是在数据库程序编译阶段(如图1所示)生成的,其中记录各种数据类型、各种编码方式所对应适合使用的过滤算子执行函数。在一个实施例中,该算子函数集可以整理组织为算子函数矩阵,以示出各个算子执行函数与各种数据特征、编码特征的对应关系。
根据一种实施方式,上述算子函数集是根据目标设备的硬件平台和运行环境而定制的函数集。在此情况下,该算子函数集可以通过以下方式得到。在编译阶段,目标设备获取基础函数集,该基础函数集是在编译数据库程序阶段生成的、适用于多种硬件平台的函数集。在目标设备运行数据库程序过程中,根据运行环境获取优化函数集,该优化函数集是在所述编译阶段,根据编译环境编译的函数集,其中包括,对所述基础函数集中若干函数的优化执行函数。于是,目标设备可以将该优化函数集添加至基础函数集,得到最终的算子函数集。此时的算子函数集,是适配于目标设备的硬件平台和运行环境的函数集。
可以理解,算子函数集需要记录各种数据类型、各种编码方式所对应适合使用的过滤算子执行函数,为此,可以根据数据库程序中的编码逻辑,考虑各种数据类型和编码方式的特点,组织和设计该算子函数集。下面举例描述几种算子执行函数。
在数据编码中,通常会通过数据按位对齐bitpacking的方式来减少冗余。当一个数据块中对齐的位数相同时,相应执行函数的执行路径可以包括,通过无分支编程,循环展开和SIMD来对不同位宽的数据实现更高效的数据还原(unpacking)。实践中,bitpacking通常也会和其他编码方式组合使用。因此,可以根据编码方式的特征(例如,是否进行过bitpacking),与编码方式对应的辅助特征(若进行了bitpacking,对齐的位宽值),结合数据特征,对上述执行路径中各个步骤的函数实现具体化。这些数据特征可以包括,例如,列数据的类型,元数据的类型,数据为定长或变长等等。
对于一些数据结构上可以帮助过滤扫描加速的编码方式,也可以针对性设计优化的执行函数。如字典编码和游程编码中,都涉及字典的使用。针对这类编码方式,相应执行函数的执行路径可以包括,通过有序字典二分查找定位过滤的边界,后续就可以直接通过对对齐方式更优,位宽更小的字典引用进行批量操作,生成过滤结果。
对于数据块内绝大多数数据相同的情况,可以采用常量编码方式,其中只存储基数高的数据作为常量,再额外存储其他数据和对应的行索引即可。对于这样的编码方式,可以采用的执行路径包括,通过对常量数据进行比较,过滤掉数据块中的大多数数据。
差值编码也是一种较常采用的编码方式,适用于值域较小的数值数据类型。根据该编码方式,只存储最小的数据和每一行与最小数据的差值。对于这样的编码方式,可以采用的执行路径包括,计算过滤数据的差值,然后在差值间进行比较,如此实现过滤。
上述方法中进行如比较字典引用,差值等操作时,还可以用SIMD进一步优化,编码后数据更小的位宽使得可以在CPU的向量寄存器中一次填充更多数据,提供更高的计算效率。
如此,针对每种过滤算子,可以根据不同编码方式,不同数据特征,以及可选的不同硬件配置(例如向量寄存器的位宽)设计不同的过滤执行函数,将其组织为算子函数集。
在一个实施例中,算子函数集可以体现为,针对各种过滤算子各自整理的算子函数矩阵。该算子函数矩阵是一个n维矩阵,n个维度对应于,前述设计各种过滤执行函数时所基于的各种因素,包括数据特征、编码特征等。更具体的,数据特征可以包括,例如,数据类型(布尔型,数值型,字符串等,数值型又可以划分为整形、浮点型等),数据长度,元数据类型等;编码特征可以包括,编码方式,以及与编码方式对应的辅助特征。例如,当编码方式包括数据按位对齐,所述辅助特征包括对齐位宽;当编码方式包括借助字典的编码,所述辅助特征包括所述字典的相关特征。由于不同过滤算子的过滤目标不同,对应的算子函数矩阵的维度有可能不同。
在一个具体例子中,一个n维的算子函数矩阵中的过滤算子执行函数可以表示为A(I1,I2,…,In)=f,其中,I1,I2,…,In为n个维度各自的索引,f为具体的函数表达。例如,I1对应于数据特征中的定长或不定长的特征项,取值范围为0(表示不定长)或1(表示定长),I2对应于编码方式,取值为编码方式的编号,等等。
在算子函数集体现为算子函数矩阵的情况下,步骤23中查询算子函数集的过程可以包括,确定对应于所述目标过滤算子的目标函数矩阵,例如当目标过滤算子为比较算子,则确定出对应于比较算子的函数矩阵。进而,根据目标数据块的数据特征和编码特征,确定矩阵各个维度的索引值。例如,在n维算子函数矩阵的情况下,即根据目标数据块的具体数据特征和编码特征,为各个索引I1,I2,…,In赋值。从而,根据各个维度的索引值,从目标函数矩阵中确定对应的算子函数,作为目标执行函数。
在另一个实施例中,在构建算子函数集时,将各个过滤算子拆分为基础操作的组合,这样的基础操作可以称为原语(primitive)或元操作。例如,元操作可以包括,以一定方式读数据的操作;将数据按照对应长度,存入向量寄存器的操作;利用特定控制指令,控制向量寄存器进行一次数据处理的操作,等等。针对各个元操作,确定其在各种数据特征、编码特征的情况下,所适合的子执行函数,得到该元操作对应的子函数矩阵。如此,算子函数集可以包括,多个元操作对应的多个子函数矩阵。取决于各个元操作所依赖的因素可能不同,各个子函数矩阵的维度可以相同也可以不同。
在这样的情况下,步骤23查询算子函数集的过程可以包括,首先确定目标过滤算子所涉及的若干目标元操作,也就是将目标过滤算子拆解为若干目标元操作的组合。然后,从所述多个子函数矩阵中,确定该若干目标元操作对应的若干目标子函数矩阵。根据目标数据块的数据特征和编码特征,查询各个目标子函数矩阵,得到若干目标子函数。查询目标子函数矩阵时也可以采用上述方式。也就是说,根据数据特征和编码特征确定目标子函数矩阵的索引值,根据索引值进行查询。从而,可以基于查询得到的若干目标子函数的组合,得到目标执行函数。
在确定出目标执行函数之后,在步骤24,就可以利用该目标执行函数,过滤前述目标数据块,得到第一过滤结果。
在一个实施例中,待查询的目标数据表采用列存编码,此时目标数据块是目标数据表中待查询的某一目标列中的数据。此时,第一过滤结果即对应于该目标列中满足过滤算子的那些数据。在该情况下,可以对第一过滤结果进行解码,将解码后的数据返回查询引擎。或者,在存在其他过滤算子的情况下,还基于第一过滤结果进行进一步过滤。
在另一实施例中,待查询的目标数据表采用行列混存编码,此时目标数据块包含目标数据表中多个行多个列的数据。此时,第一过滤结果指示,过滤出的目标数据行。通常,在该情况下,还需获取当前查询对应的执行计划中的目标数据列,通过目标数据行和数目数据列,确定目标数据范围。也就是,目标数据范围是同时属于目标数据列和目标数据行的那些数据。接着,可以对目标数据范围中的数据进行解码,例如进行批量解码,将解码后的数据返回查询引擎。或者,在存在其他过滤算子的情况下,还基于目标范围进行进一步过滤。
根据一种实现方式,上述第一过滤结果可以为结果位图(bitmap)的形式,该结果位图分别以第一值和第二值指示是否属于过滤结果。典型地,结果位图中以1指示命中(属于过滤结果),以0指示未命中(不属于过滤结果)。例如,在行列混存编码的情况下,结果位图中的位数可以对应于行数;过滤出的目标数据行所对应的那些位,其值被设定为1,其他位的值为0,如此可以直观指示过滤结果。
下面描述在具体编码方式下执行上述方案的具体示例。
图3示出列存编码下数据过滤过程的具体例子。需说明的是,在此假定执行该数据过滤过程的目标设备的硬件平台具有支持SIMD的向量化寄存器。
在图3中,目标设备首先确定出目标过滤算子,可以是比较算子,between算子,IN算子。其中,between算子可以转换为比较算子(例如2次比较的叠加),IN算子执行过程与比较算子类似,因此,后续执行过程以比较算子为示例。然后获取数据块的数据特征,包括数据类型(例如是数值型,则进一步确定其为整形或浮点数),数据是否定长;还获取编码特征,例如列存编码下,是否进行了bitpacking,对齐位宽,是常量存储还是差值存储等。然后基于这些信息与目标设备的算子函数集匹配。若没有匹配到,则说明,在当前的数据特征和编码特征下,必须先解码才能过滤。如此,执行解码后计算的分支。如果匹配到一种执行函数,即按照该执行函数对数据块进行过滤。具体地,由于目标设备支持SIMD,可以假定匹配出的执行函数包括针对SIMD的优化操作,在图3中示出为SIMD计算。上述优化操作具体可以包括,根据向量化寄存器的向量长度(例如256位)组织数据,采用硬件平台对应的指令集基于向量化寄存器对组织的数据进行处理。例如,可以将多组数据合并为256位的向量(位数不足的进行填补),一次性将其存入寄存器,通过单个指令并行统一处理该多组数据。最终,得到结果位图,其示出设定列的某个数据块中过滤出的数据项。
实践中,很多数据库支持数据表中一些数据项设为空值(Null)。相应的,在这种情况下,还需将NULL算子与常规的过滤算子的结果进行组合。具体的,可以读取编码的null位图(其示出哪些位置对应于空值),在利用执行函数得到的位图基础上,过滤编码的null位图,得到最终的结果位图。
图4示出在利用字典的编码方式下具体的过滤函数执行过程。同样假定,执行该数据过滤过程的目标设备支持SIMD。并且,可以理解,该过滤函数可以是通过前述的算子函数集匹配确定出的。
如图4所示,由于编码方式涉及字典的使用,例如是字典编码,游程编码等,在编码特征提取阶段,可以获取字典的信息,其可以是有序编排的字典引用表,其中记录,真实数据与字典中“词”的对应关系。
对于between算子,其可以转换为比较算子。下面描述比较算子的过滤函数执行过程。对于比较算子,可以确定出比较的边界值,并且在字典引用表中查找到对该边界值的引用,即边界值对应的引用词。然后在字典引用表中针对该引用词进行比较。在目标设备具有向量寄存器的情况下,该步骤可以实现为,在字典引用表中利用SIMD进行比较,如图4所示。即,利用SIMD,确定数据块中数据项编码后的编码词,与上述引用词的比较结果。从而可以得到结果位图。
IN算子用来确定数据的值是否落入某个集合S。为此,可以在字典中查找对集合S中各个值的引用,得到多个引用词。然后,通过循环控制,转化为字典引用表中针对引用词的比较操作。具体地,可以利用SIMD,确定数据块中的编码词与多个引用词中各个引用词的比较结果,从而得到结果位图。
也就是说,对于涉及比较操作的过滤算子(比较算子,IN算子,between算子),都可以在字典引用表中查找比较涉及的目标值对应的引用词,然后对数据块中的编码词与上述引用词进行比较操作,从而执行过滤算子对应的数据过滤。该比较操作可以进行SIMD优化。也就是,可以利用SIMD在字典引用表中进行并行优化比较处理,从而优化比较过程。
以上仅针对部分过滤算子,在部分编码方式下的算子执行过程进行了举例描述。应理解,基于对各种编码方式和各种数据结构特点的研究,可以设计出各种编码特征、数据特征所对应的较佳执行函数,从而设计出算子函数集。在执行数据查询过程中,根据当前的编码特征和数据特征查询该算子函数集,可以匹配出当前环境下优选的执行函数,从而在存储层数据解码前,实现数据的有效过滤,减少需解码的数据量,也减少中间结果集的数据量,提升总体查询效率。
根据另一方面的实施例,与图2所示的数据过滤方法相对应的,本说明书还提供一种用于数据查询的数据过滤装置,部署在目标设备中,该目标设备作用为数据库的存储节点,该目标设备可以体现为任何具有计算、存储和处理能力的计算单元、服务器、计算机设备等。图5示出根据一个实施例的数据过滤装置的示意框图。如图5所示,该数据过滤装置500包括:
算子确定单元51,配置为确定查询涉及的目标过滤算子;
数据块获取单元52,配置为获取目标设备中存储的经编码的目标数据块;
函数查询单元53,配置为利用所述目标数据块的数据特征和编码特征,查询预先构建的算子函数集,得到所述目标过滤算子的目标执行函数;
过滤单元54,配置为利用所述目标执行函数过滤所述目标数据块,得到第一过滤结果。
该数据过滤装置及其各个单元的执行过程细节,可以参见结合图2描述的数据过滤方法的具体实现过程,不复赘述。
根据其他方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行前述结合图2描述的方法过程。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,该存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现前述结合图2描述的方法过程。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (15)
1.一种用于数据查询的数据过滤方法,通过目标设备执行,该目标设备作用为数据库的存储节点,所述方法包括:
确定查询涉及的目标过滤算子;
获取目标设备中存储的经编码的目标数据块;
利用所述目标数据块的数据特征和编码特征,查询预先构建的算子函数集,得到所述目标过滤算子的目标执行函数;
利用所述目标执行函数过滤所述目标数据块,得到第一过滤结果。
2.根据权利要求1所述的方法,其中,所述算子函数集是根据所述目标设备的硬件平台和运行环境定制的函数集。
3.根据权利要求2所述的方法,其中,所述算子函数集通过以下方式得到:
获取基础函数集,所述基础函数集是在编译数据库程序阶段生成的、适用于多种硬件平台的函数集;
在运行所述数据库程序过程中,根据运行环境获取优化函数集,所述优化函数集是在所述编译阶段,根据编译环境编译的附加函数集,其中包括,对所述基础函数集中若干函数的优化执行函数;
将所述优化函数集添加至所述基础函数集,得到所述算子函数集。
4.根据权利要求1所述的方法,其中,所述算子函数集包括,对应于所述目标过滤算子的、多维度的函数矩阵;所述多维度包括,对应于所述数据特征的若干维度,和对应于所述编码特征的若干维度;
所述查询预先存储的算子函数集,得到所述目标过滤算子的目标执行函数,包括:
根据所述数据特征和编码特征,确定所述多维度中各个维度的索引值;
根据各个维度的索引值,从所述函数矩阵中确定对应的算子函数,作为所述目标执行函数。
5.根据权利要求1所述的方法,其中,所述算子函数集包括,多个元操作对应的多个子函数矩阵;
所述查询预先存储的算子函数集,得到所述目标过滤算子的目标执行函数,包括:
从所述多个子函数矩阵中,确定所述目标过滤算子所涉及的若干目标元操作对应的若干目标子函数矩阵;
根据所述数据特征和编码特征,查询各个目标子函数矩阵,得到若干目标子函数;
基于所述若干目标子函数的组合,确定所述目标执行函数。
6.根据权利要求1所述的方法,其中,
所述数据特征包括以下中的若干项:数据类型,数据长度,元数据类型;
所述编码特征包括,编码方式,与编码方式对应的辅助特征。
7.根据权利要求5所述的方法,其中,
当所述编码方式包括数据按位对齐,所述辅助特征包括对齐位宽;
当所述编码方式包括借助字典的编码,所述辅助特征包括所述字典的相关特征。
8.根据权利要求1所述的方法,其中,所述目标数据块为行列混存数据块;所述第一过滤结果指示,过滤出的目标数据行;所述方法还包括:
获取所述查询对应的执行计划中的目标数据列;
通过所述目标数据行和目标数据列,确定目标数据范围;
对所述目标数据范围中的数据进行解码。
9.根据权利要求1所述的方法,其中,所述第一过滤结果为结果位图的形式,该结果位图分别以第一值和第二值指示是否属于过滤结果。
10.根据权利要求1所述的方法,其中,所述目标设备具有支持单指令流多数据流SIMD的向量化寄存器;所述目标执行函数包括针对SIMD的优化操作,所述优化操作包括,根据所述向量化寄存器的向量长度组织数据,采用所述硬件平台对应的指令集基于所述向量化寄存器对组织的数据进行处理。
11.根据权利要求1所述的方法,其中,所述目标过滤算子涉及比较操作;所述目标数据块的编码方式基于字典进行;所述目标执行函数的执行路径包括:
在所述字典的字典引用表中查找所述比较操作的目标值所对应的引用词;
在所述字典引用表中,对所述目标数据块中的编码词与上述引用词进行比较处理。
12.根据权利要求11所述的方法,其中,所述目标过滤算子包括,比较算子,IN算子,或between算子。
13.根据权利要求11所述的方法,其中,所述目标设备具有支持单指令流多数据流SIMD的向量化寄存器;所述比较处理,包括:
利用SIMD在所述字典引用表中进行并行比较处理。
14.一种用于数据查询的数据过滤装置,部署在目标设备中,该目标设备作用为数据库的存储节点,所述装置包括:
算子确定单元,配置为确定查询涉及的目标过滤算子;
数据块获取单元,配置为获取目标设备中存储的经编码的目标数据块;
函数查询单元,配置为利用所述目标数据块的数据特征和编码特征,查询预先构建的算子函数集,得到所述目标过滤算子的目标执行函数;
过滤单元,配置为利用所述目标执行函数过滤所述目标数据块,得到第一过滤结果。
15.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-13中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211273807.3A CN115757533A (zh) | 2022-10-18 | 2022-10-18 | 用于数据查询的数据过滤方法及装置 |
US18/483,087 US20240126818A1 (en) | 2022-10-18 | 2023-10-09 | Data filtering methods and apparatuses for data queries |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211273807.3A CN115757533A (zh) | 2022-10-18 | 2022-10-18 | 用于数据查询的数据过滤方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115757533A true CN115757533A (zh) | 2023-03-07 |
Family
ID=85352255
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211273807.3A Pending CN115757533A (zh) | 2022-10-18 | 2022-10-18 | 用于数据查询的数据过滤方法及装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20240126818A1 (zh) |
CN (1) | CN115757533A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116821174A (zh) * | 2023-07-17 | 2023-09-29 | 深圳计算科学研究院 | 一种基于逻辑数据块的数据查询方法及其装置 |
-
2022
- 2022-10-18 CN CN202211273807.3A patent/CN115757533A/zh active Pending
-
2023
- 2023-10-09 US US18/483,087 patent/US20240126818A1/en active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116821174A (zh) * | 2023-07-17 | 2023-09-29 | 深圳计算科学研究院 | 一种基于逻辑数据块的数据查询方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
US20240126818A1 (en) | 2024-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11886407B2 (en) | Method of performing transactional and analytical data processing using a data structure | |
Lemire et al. | Consistently faster and smaller compressed bitmaps with roaring | |
Kärkkäinen | Fast BWT in small space by blockwise suffix sorting | |
Muja et al. | Flann-fast library for approximate nearest neighbors user manual | |
Gaffney et al. | Sqlite: past, present, and future | |
US10831773B2 (en) | Method and system for parallelization of ingestion of large data sets | |
Jiang et al. | Good to the last bit: Data-driven encoding with codecdb | |
US20140114924A1 (en) | Data loading tool | |
US20120317094A1 (en) | Sideways Information Passing | |
CN110990402B (zh) | 由行存储到列存储的格式转化方法、查询方法及装置 | |
US10169388B2 (en) | Methods and systems for indexing references to documents of a database and for locating documents in the database | |
EP3913494A1 (en) | Data compression techniques | |
US20240126818A1 (en) | Data filtering methods and apparatuses for data queries | |
Jenkins et al. | ALACRITY: Analytics-driven lossless data compression for rapid in-situ indexing, storing, and querying | |
Liu et al. | A deep dive into common open formats for analytical dbmss | |
Zeng et al. | An empirical evaluation of columnar storage formats | |
JP5303213B2 (ja) | データ圧縮処理を伴うデータ管理方法 | |
US20170371927A1 (en) | Method for predicate evaluation in relational database systems | |
RU2417424C1 (ru) | Способ компрессии многомерных данных для хранения и поиска информации в системе управления базами данных и устройство для его осуществления | |
Nowakiewicz et al. | BIPie: fast selection and aggregation on encoded data using operator specialization | |
CN116955403B (zh) | 无模式数据运算加速方法、装置、计算机设备及介质 | |
Surti et al. | LittleLog: A log compression and querying service | |
Faust et al. | Vertical bit-packing: optimizing operations on bit-packed vectors leveraging SIMD instructions | |
Narayanan | Embedding Indices and Bloom Filters in Parquet Filesfor Fast Apache Arrow Retrievals | |
Laanti et al. | GPU accelerating distributed succinct de Bruijn graph construction |
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 |