CN117349293A - 基于列存储格式的数据库并行聚合方法、计算机设备及存储介质 - Google Patents

基于列存储格式的数据库并行聚合方法、计算机设备及存储介质 Download PDF

Info

Publication number
CN117349293A
CN117349293A CN202311411779.1A CN202311411779A CN117349293A CN 117349293 A CN117349293 A CN 117349293A CN 202311411779 A CN202311411779 A CN 202311411779A CN 117349293 A CN117349293 A CN 117349293A
Authority
CN
China
Prior art keywords
aggregation
row position
sub
pos
column
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
Application number
CN202311411779.1A
Other languages
English (en)
Inventor
张东
赵远方
付新
王学海
姜久文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dameng Data Technology Jiangsu Co ltd
Original Assignee
Dameng Data Technology Jiangsu Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Dameng Data Technology Jiangsu Co ltd filed Critical Dameng Data Technology Jiangsu Co ltd
Priority to CN202311411779.1A priority Critical patent/CN117349293A/zh
Publication of CN117349293A publication Critical patent/CN117349293A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/244Grouping and aggregation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了基于列存储格式的数据库并行聚合方法、计算机设备及存储介质,包括:将待聚合数据划分为若干数据块;将所有数据块分配给多个分组任务并发执行对行位置的分组操作,得到分片子表;对于任意一分组任务,依据第一列聚合字段值对行位置信息进行分组,得到包括多条记录的第一分片子表,对于第一分片子表的每条记录,从记录中获取行位置序列中的行位置信息,并根据取得的行位置信息,从第二列聚合字段值中获取对应的聚合字段值,在第一分片子表的基础上,依据该聚合字段值对行位置信息进行再分组,得到包括多条记录的第二分片子表;以此类推;对所有分组任务的分片子表进行合并,得到分片;对所有分片进行合并,得到聚合结果。

Description

基于列存储格式的数据库并行聚合方法、计算机设备及存储 介质
技术领域
本发明属于数据库技术领域,具体为一种基于列存储格式的数据库并行聚合方法、计算机设备及存储介质。
背景技术
数据库中的聚合操作是对查询的结果先进行分组,并在分组过程中对需要进行聚合计算的字段进行聚合处理。通常聚合操作有两种实现算法:Sort聚合和Hash聚合。
传统基于Hash实现的多列聚合算法中需要对每一条记录中需要分组的字段计算Hash值,并且需要通过封装或拼接的方式实现多个字段的比较函数,当发生Hash冲突时再通过比较函数进行分组。这种方案性能较低,访问HashTable的次数较多,由于编程语言中对象的比较成本远高于原生数据类型的比较,导致通过拼接和封装方式比较的成本较高,性能低下。
基于Hash实现的多列聚合算法中还是以行的形式进行扫描数据,当数据库中的数据组织方式为列的形式时,由于该算法对内存的访问是随机访问的,且现代CPU的架构以顺序的形式访问内存性能更高,相比较而言该算法在列数据中实现的性能较低。
传统基于Hash实现的多列聚合算法中通过一个HashTable对数据进行分组,导致该算法的并行度受限于HashTable并行度较低,所以传统数据库通常采用单线程的模式进行聚合计算。
发明内容
发明目的:为解决现有基于Hash实现的多列聚合算法中存在的性能低、仅能采用单线程的模式进行聚合计算等问题,本发明提出了一种基于列存储格式的数据库并行聚合方法、计算机设备及存储介质,实现基于列存储格式的数据库单列或多列的数据聚合。
技术方案:一种基于列存储格式的数据库并行聚合方法,包括以下步骤:
步骤1:将待聚合数据划分为若干数据块,每块数据块包括多个基于列存储格式的聚合字段值;
步骤2:将所有数据块分配给多个分组任务并发执行对行位置的分组操作,得到包括多条记录的分片子表;对于任意一分组任务,依据第一列聚合字段值对行位置信息进行分组,得到包括多条记录的第一分片子表,每条记录用以聚合字段值列表为Key、行位置序列为Value的哈希表表示;对于第一分片子表的每条记录,从记录中获取行位置序列中的行位置信息,并根据取得的行位置信息,从第二列聚合字段值中获取对应的聚合字段值,在第一分片子表的基础上,依据该聚合字段值对行位置信息进行再分组,得到包括多条记录的第二分片子表;以此类推,最后一列聚合字段值对应的分片子表即为该分组任务得到的包括多条记录的分片子表;
步骤3:对所有分组任务的分片子表进行合并,得到分片;
步骤4:对所有分片进行合并,得到聚合结果。
进一步的,依据第一列聚合字段值对行位置信息进行分组,得到包括多条记录的第一分片子表,具体操作包括:
判断第一列聚合字段值上是否有未被使用过的行位置pos,若没有,则表示第一列聚合字段值上的所有行位置均已被使用,则完成分组,得到包括多条记录的第一分片子表;若有,则判断在行位置pos处的聚合字段值f[pos]能否在第一分片子表中查到,若能查到,则在第一分片子表中相应的行位置序列中添加行位置pos,再重复执行本步骤;若查不到,则建立新的聚合字段值列表key,并添加f[pos],建立新的行位置信息序列p,并添加初始元素pos,形成新的记录{key,p},将新的记录添加至第一分片子表,再重复执行本步骤。
进一步的,所述的对于第一分片子表的每条记录,从记录中获取行位置序列中的行位置信息,并根据取得的行位置信息,从第二列聚合字段值中获取对应的聚合字段值,在第一分片子表的基础上,依据该聚合字段值对行位置信息进行再分组,得到包括多条记录的第二分片子表,具体操作包括:
判断第一分片子表中是否有未使用过的记录rec,若没有,则得到包括多条记录的第二分片子表;若有,则判断记录rec中的行位置pos是否唯一,若唯一,则取记录rec中的行位置pos,将行位置pos的聚合字段值f[pos]追加至记录rec的聚合字段值列表中,将该记录rec添加至第二分片子表中,再重复执行本步骤;若不唯一,则建立以聚合字段值为键、行位置序列的指针为值的哈希表h,按序取记录rec中的行位置pos,若行位置pos的聚合字段值f[pos]已存在于哈希表h中,则根据聚合字段值f[pos]对应的行位置序列的指针取得行位置序列,在该行位置序列中添加行位置pos;若行位置pos的聚合字段值f[pos]不存在于哈希表h中,则构建新记录rec2{key,p},其中,新记录rec2中的key为行位置pos的聚合字段值f[pos],p为新的行位置序列,初始元素为pos,将新记录rec2{key,p}添加至第二分片子表中,并将{f[pos],rec2值的指针}添加到哈希表h,rec2值的指针为新的行位置序列的指针,再重复执行本步骤。
进一步的,所述的对所有分组任务的分片子表进行合并,得到分片,具体包括:
对Key相同的所有行位置序列,通过聚合算子进行合并,得到合并后的聚合结果,得到分片。
本发明公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现一种基于列存储格式的数据库并行聚合方法的步骤。
本发明公开了一种存储介质,所述存储介质存储有并行聚合程序,所述并行聚合程序被至少一个处理器执行时实现一种基于列存储格式的数据库并行聚合方法的步骤。
有益效果:本发明与现有技术相比,具有以下优点:
(1)本发明方法为针对于列存储格式的聚合算法,以列形式扫描数据进行分组的聚合计算,能有效提升数据扫描的性能;
(2)本发明方法将多列的聚合计算,拆分成对每个单独列的聚合计算,减少HashTable的访问和复合Key的比较操作;通过预先对每个列独立操作避免对内存的随机访问,充分利用现代CPU架构特性提升分组性能;
(3)本发明方法通过对每列单独分组避免了对多个分组字段比较时的拼接和封装,在实现时宽字节数据类型(例如:字符串类型)比较算法时可以使用SIMD指令进行流指令比较操作,提升比较性能;
(4)本发明方法解决传统Hash集合算法中HashTable导致的性能瓶颈,通过分片的技术提升数据库聚合算法的并行度;
(5)本发明方法根据列存储格式的数据的特性,使用符合现代CPU架构数据访问操作,提升聚合分组的性能。通过将分组任务拆分、数据分片的方式将聚合操作拆分成一个个子任务,每个子任务之间没有依赖关系,并行执行提升数据库的聚合算法的性能。
附图说明
图1为同一组数据按行与列形式组织的区别示意图;
图2为本发明的基于列存储格式的数据库并行聚合方法的流程示意图;
图3为聚合流程示意图;
图4为本发明的基于列存储格式的数据库并行聚合方法中任务内分组的流程示意图;
图5为步骤S22的流程示意图;
图6为步骤S23的流程示意图;
图7为对表1数据进行聚合的整体过程示意图。
具体实施方式
现对以下实施例中涉及的技术术语作如下解释:
列数据指具有相同数据类型的若干条数据,通常是数据表中某一列对应的数据,或者是由某个表达式计算得来的数据。列数据中每条数据都在列中有一个逻辑上的、连续的位置,并且可以根据该位置的编号访问列中该位置对应的一条数据。图1举例说明了同一组数据按行与列形式组织的区别。
数据库的数据聚合操作指根据指定的聚合字段,对一个或多个列的数据按照字段值进行分组,并在每一组中使用聚合算子进行运算的操作。具体来说,数据以行为单位分组,分为一组的所有数据行中,各聚合字段的数据值分别相等,且两类数据行间必有至少一个聚合字段的值不相等。若一数据行不能归于已有的任一组,则其自成一组。分组完成后,对每组数据分别使用聚合算子进行运算。聚合算子指对分组后的数据采用的运算操作,常见的聚合算子有sum、count、min、max等。
下面结合附图和实施例详细描述本发明提出的基于列存储格式的数据库并发聚合方法。
实施例1:
为便于理解,使用如表1所示的数据表Table1举例说明聚合流程,并约定聚合字段为F1和F2。
表1数据表Table1中的数据
行号\列名 F1 F2
0 1 2
1 3 4
2 1 2
3 2 2
4 1 2
5 4 5
如图2所示,本实施例的基于列存储格式的数据库并发聚合方法,主要包括以下步骤:
S11:按照当前机器的处理器核心数量、待聚合数据量等因素,将待聚合数据划分为若干段,并分配给若干分组任务并发执行。任务并发执行的具体实现可以采用线程、协程等可并发执行代码单元的方式。
以表1数据举例,假设数据被划分为{0,1,2}行和{3,4,5}行两段,且分别分配给分组任务1和分组任务2并发执行。
S12:每个分组任务中,根据已有的分组结果,逐字段(即逐列)扫描数据,对待聚合数据段进行分组操作,并按照相同的划分方式将各组数据划分到若干个分片内,并对分片进行编号(对Hash值取模),便于后续步骤的并发合并。
具体而言,首先对第一个分组字段进行扫描分组,可选择,不同的数据类型采用不同实现的Hash Table。通过Hash分组算法可以得到若干以当前被分组列字段值为Key、位置信息序列为Value的哈希表,其中每一条记录表示当前列中相同Key在该列中的位置信息;然后将位置序列代入下一个分组字段列中进行进一步分组,若该序列中只有一条数据,则后续字段无需对其进行进一步分组,该序列分组结束。下一分组列只根据代入的序列中的有效位置数据进行进一步分组,分组算法同上。重复该过程直到所有字段列均已完成对位置序列的分组,此时分组任务完成。
每个分组任务完成后,得到一个哈希表组H。哈希表组H是一个将待插入数据按照键选择并插入到组内某个哈希表的数据结构,每个哈希表组H中包含若干以聚合字段列表为键、行位置序列为值的哈希表h。对所有分组任务中的哈希表组H,组内哈希表h数量以及组内根据记录键分配哈希表的方法均一致。使用哈希表组H时,各分组任务内会按照相同的划分方法将已分组数据划分为若干部分,便于后续并发进行数据合并。
可选的,直接在分组任务中对当前已分组的数据进行增量聚合,从而无需在后续再次遍历行位置列表单独进行聚合操作。
S13:对各分组任务得到的中间结果进行并行合并,完成列数据的并发聚合。具体而言,对每个分组任务得到的哈希表组H,将组内编号相等的哈希表分配至同一合并任务中,得到若干合并任务。在合并任务中,对Key相同的所有位置序列数据,通过聚合算子进行合并,得到合并后的聚合结果,直到任务中所有相同Key的位置序列均以完成合并,此时合并任务完成。并发执行所有的合并任务,执行完成后,所有合并结果的组合即为最终聚合结果,每条记录代表一个分组。如果在分组任务中执行聚合算子,则在合并时也将聚合算子运算的中间结果通过增量聚合进行合并;如果未在分组任务中执行聚合算子,则在合并完成后,根据每条记录中的分组位置序列取得该分组所有的字段值,并执行聚合算子得到聚合结果。
整个聚合流程如图3所示,可以看到,分组操作是并发执行的,通过使用哈希表组,合并操作也可以并发执行,从而减少了聚合过程的耗时。
以表1数据为例,两分组任务并发分组完成后分别得到表2-1和表2-2所示的哈希表;最终聚合完成后得到表3所示的哈希表。
表2-1分组任务1完成后的哈希表
键:聚合字段值列表 值:行位置列表
1,2 0,2
3,4 1
表2-2分组任务2完成后的哈希表
键:聚合字段值列表 值:行位置列表
2,2 3
1,2 4
4,5 5
表3最终聚合完成后的哈希表
为便于描述,将哈希表的一条以key为键、value为值的记录简记为{key,value}的形式。
图4为任务内对聚合字段的分组的流程示意图,其主要包括以下步骤:
S21:建立以聚合字段列表为键、行位置序列为值的哈希表组。
S22:取第一个聚合字段F1进行分组,得到分组结果,并写入了哈希表H1。
S23:从第二个聚合字段F2开始,按序在指定的所有聚合字段中取一个本任务尚未分组的字段f,在H1的基础上进行分组。具体而言,根据H1中存储的中间分组结果,仅对其中包含多行的组进行按字段f的分组,仅包含单行的组无需再分组,直接将字段f的值追加到组的聚合字段列表中即可。
S24:若已经对所有聚合字段进行了分组,则该任务内的分组完成;否则继续执行步骤S22。
图5为步骤S22的流程示意图,主要包括以下步骤:
S31:建立以聚合字段值列表为键、行位置序列为值的哈希表H1。
S32:判断第一个聚合字段F1列上是否有未被使用过的位置pos,若没有,则表示第一个聚合字段F1列上的所有位置均已被使用,则执行步骤S34,若第一个聚合字段F1列上有未被使用的位置pos,则执行步骤S33;
S33:判断第一个聚合字段F1的列数据在位置pos处的值f[pos]能否在H1中查到,若能查到,则表明pos所在行应聚合到已有的一类,在H1中查到记录的值(即行位置列表)中添加pos,之后继续执行步骤S32。若不能在H1中查到,则表明pos所在行在本任务的聚合中首次出现,执行如下操作:
建立新的聚合字段值列表key,并添加f[pos];
建立新的行位置序列l,并添加初始元素pos;
将新的记录{key,l}添加到H1;
执行步骤S32;
S34:H1已经包含了聚合首个字段F1后的结果,合并H2与H1即完成对第一个聚合字段F1的聚合。
下面以分组任务1的聚合为例进行进一步说明。
聚合过程中,首先对聚合字段F1进行聚合。分组任务1建立哈希表H1后,首先取F1的位置0,F1[0]值为1,此时H1为空,值1是首次出现,于是将{字段值列表{1},位置序列{0}}添加到H1;然后取F1的位置1,F1[1]值为3,也是首次出现在H1中,将{字段值列表{3},位置序列{1}}添加到H1;最后取F1的位置2,F1[2]值为1,H1中已经存在,于是将位置信息2添加到已有记录中,添加后的记录为{字段值列表{1},位置序列{0,2}}。对聚合字段F1聚合完成后的H1如表4所示。
表4分组任务1聚合F1后的哈希表
键:聚合字段值列表 值:行位置列表
1 0,2
3 1
图6为步骤S23的流程示意图,其中,
S41:建立以聚合字段值列表为键、行位置序列为值的哈希表H2。
S42:从哈希表H1中取未使用过的记录rec。若哈希表H1为空,则说明哈希表H1的所有记录均已被使用,哈希表H2已经包含了H1基础上聚合字段f后的结果,合并H2与H1即完成对字段f的聚合。
S43:若记录rec的值包含唯一值,将其记为pos,向rec的键key里追加f[pos],并将一条新的记录{key,rec的值}添加到哈希表H2中,再执行步骤S42;否则表示rec的值包含多个行位置,建立以字段f的数据为键、行位置序列的指针为值的哈希表h。
S44:取rec的值中未使用过的位置信息pos。若rec的值中所有位置信息均已被使用,则执行步骤S42。
S45:若f[pos]不能在h中查到,则表明pos所在行在本任务的聚合中首次出现,执行如下操作:
向rec的键key追加f[pos];
建立新的行位置序列l,并添加初始元素pos;
将新记录rec2{key,l}添加到H2;
将新记录{f[pos],rec2值的指针}添加到h;
执行步骤S44。
否则,表明pos所在行应聚合到已有的一类,通过h中查到的记录的值(即行位置列表的指针)取得行位置列表,并在其中添加pos,之后执行步骤S44。
下面以分组任务1对聚合字段F2的聚合为例进行进一步说明。
分组任务1已经完成对聚合字段F1的聚合,哈希表H1如表4所示。分组任务1首先从哈希表H1中取记录{字段值列表{1},位置序列{0,2}},此时记录中包含多个位置信息,于是建立以F1的值为键、位置序列指针为值的哈希表h,并执行以下步骤:
从哈希表H1中取位置信息0的记录,此时哈希表h为空,F2[0](值为2)在哈希表h中查寻不到相同F2值的分组,于是向原记录的键key中添加值2,添加后的key为字段值列表{1,2};然后建立新的位置序列l{0};最后将记录rec2{key,l}添加到H2,并将新记录{2,rec2值的指针}添加到h。
从哈希表H1中取位置信息2的记录,F2[2](值为2)对应步骤1中添加的记录,于是通过记录中rec2值的指针,将位置信息2添加到rec2的值(即位置序列)中,添加后rec2为{字段值列表{1,2},位置序列{0,2}}。
接下来分组任务1在哈希表H1中取下一条(也是最后一条)记录{字段值列表{3},位置序列{1}},此时记录中仅包含单个位置,于是执行步骤S43中剩余逻辑,向记录的键key中添加F2[1](值为4),并将新记录{key,旧记录的值}({字段值列表{3,4},位置序列{1}})添加到H2。最后分组任务1合并H2与H1,自此完成对聚合字段F1和聚合字段F2的聚合,结果如表2-1所示。
对表1数据进行聚合的整体过程示意图如图7所示,其中假设了一种哈希表组分片的可能结果,并不作为限定。
实施例2:
本实施例公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任意一实施例公开的步骤。
实施例3:
本实施例公开了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任意一实施例公开的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (6)

1.一种基于列存储格式的数据库并行聚合方法,其特征在于:包括以下步骤:
步骤1:将待聚合数据划分为若干数据块,每块数据块包括多个基于列存储格式的聚合字段值;
步骤2:将所有数据块分配给多个分组任务并发执行对行位置的分组操作,得到包括多条记录的分片子表;对于任意一分组任务,依据第一列聚合字段值对行位置信息进行分组,得到包括多条记录的第一分片子表,每条记录用以聚合字段值列表为Key、行位置序列为Value的哈希表表示;对于第一分片子表的每条记录,从记录中获取行位置序列中的行位置信息,并根据取得的行位置信息,从第二列聚合字段值中获取对应的聚合字段值,在第一分片子表的基础上,依据该聚合字段值对行位置信息进行再分组,得到包括多条记录的第二分片子表;以此类推,最后一列聚合字段值对应的分片子表即为该分组任务得到的包括多条记录的分片子表;
步骤3:对所有分组任务的分片子表进行合并,得到分片;
步骤4:对所有分片进行合并,得到聚合结果。
2.根据权利要求1所述的一种基于列存储格式的数据库并行聚合方法,其特征在于:所述的依据第一列聚合字段值对行位置信息进行分组,得到包括多条记录的第一分片子表,具体操作包括:
判断第一列聚合字段值上是否有未被使用过的行位置pos,若没有,则表示第一列聚合字段值上的所有行位置均已被使用,则完成分组,得到包括多条记录的第一分片子表;若有,则判断在行位置pos处的聚合字段值f[pos]能否在第一分片子表中查到,若能查到,则在第一分片子表中相应的行位置序列中添加行位置pos,再重复执行本步骤;若查不到,则建立新的聚合字段值列表key,并添加f[pos],建立新的行位置信息序列p,并添加初始元素pos,形成新的记录{key,p},将新的记录添加至第一分片子表,再重复执行本步骤。
3.根据权利要求1所述的一种基于列存储格式的数据库并行聚合方法,其特征在于:所述的对于第一分片子表的每条记录,从记录中获取行位置序列中的行位置信息,并根据取得的行位置信息,从第二列聚合字段值中获取对应的聚合字段值,在第一分片子表的基础上,依据该聚合字段值对行位置信息进行再分组,得到包括多条记录的第二分片子表,具体操作包括:
判断第一分片子表中是否有未使用过的记录rec,若没有,则得到包括多条记录的第二分片子表;若有,则判断记录rec中的行位置pos是否唯一,若唯一,则取记录rec中的行位置pos,将行位置pos的聚合字段值f[pos]追加至记录rec的聚合字段值列表中,将该记录rec添加至第二分片子表中,再重复执行本步骤;若不唯一,则建立以聚合字段值为键、行位置序列的指针为值的哈希表h,按序取记录rec中的行位置pos,若行位置pos的聚合字段值f[pos]已存在于哈希表h中,则根据聚合字段值f[pos]对应的行位置序列的指针取得行位置序列,在该行位置序列中添加行位置pos;若行位置pos的聚合字段值f[pos]不存在于哈希表h中,则构建新记录rec2{key,p},其中,新记录rec2中的key为行位置pos的聚合字段值f[pos],p为新的行位置序列,初始元素为pos,将新记录rec2{key,p}添加至第二分片子表中,并将{f[pos],rec2值的指针}添加到哈希表h,rec2值的指针为新的行位置序列的指针,再重复执行本步骤。
4.根据权利要求1所述的一种基于列存储格式的数据库并行聚合方法,其特征在于:所述的对所有分组任务的分片子表进行合并,得到分片,具体包括:
对Key相同的所有行位置序列,通过聚合算子进行合并,得到合并后的聚合结果,得到分片。
5.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1至4任意一项所述的一种基于列存储格式的数据库并行聚合方法的步骤。
6.一种存储介质,其特征在于,所述存储介质存储有并行聚合程序,所述并行聚合程序被至少一个处理器执行时实现权利要求1至4任意一项所述的一种基于列存储格式的数据库并行聚合方法的步骤。
CN202311411779.1A 2023-10-30 2023-10-30 基于列存储格式的数据库并行聚合方法、计算机设备及存储介质 Pending CN117349293A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311411779.1A CN117349293A (zh) 2023-10-30 2023-10-30 基于列存储格式的数据库并行聚合方法、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311411779.1A CN117349293A (zh) 2023-10-30 2023-10-30 基于列存储格式的数据库并行聚合方法、计算机设备及存储介质

Publications (1)

Publication Number Publication Date
CN117349293A true CN117349293A (zh) 2024-01-05

Family

ID=89370828

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311411779.1A Pending CN117349293A (zh) 2023-10-30 2023-10-30 基于列存储格式的数据库并行聚合方法、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN117349293A (zh)

Similar Documents

Publication Publication Date Title
CA2232938C (en) Method and apparatus for performing a join query in a database system
US7240044B2 (en) Query optimization by sub-plan memoization
US7895216B2 (en) Method and system for sorting database tables according to a sort pattern and sort order
US6725223B2 (en) Storage format for encoded vector indexes
US6678687B2 (en) Method for creating an index and method for searching an index
US10769147B2 (en) Batch data query method and apparatus
US6009432A (en) Value-instance-connectivity computer-implemented database
EP2924594B1 (en) Data encoding and corresponding data structure in a column-store database
US6668263B1 (en) Method and system for efficiently searching for free space in a table of a relational database having a clustering index
US7650326B2 (en) Fast aggregation of compressed data using full table scans
US10037355B2 (en) Mechanisms for merging index structures in MOLAP while preserving query consistency
US20070027860A1 (en) Method and apparatus for eliminating partitions of a database table from a join query using implicit limitations on a partition key value
US20120166402A1 (en) Techniques for extending horizontal partitioning to column partitioning
US20160103880A1 (en) Embracing and exploiting data skew during a join or groupby
US8402016B2 (en) Fetching optimization in multi-way pipelined database joins
US20130013648A1 (en) Method for database storage of a table with plural schemas
US8682872B2 (en) Index page split avoidance with mass insert processing
CN114064984B (zh) 一种基于稀疏数组链表的世界状态增量更新方法及装置
US20080162591A1 (en) Method of Logging Transactions and a Method of Reversing a Transaction
CN106970937A (zh) 一种基于本地缓存快速建立索引的方法及系统
CN117349293A (zh) 基于列存储格式的数据库并行聚合方法、计算机设备及存储介质
CN109213751B (zh) 一种基于Spark平台的Oracle数据库并行迁移方法
CN116226086A (zh) 一种数据迁移过程中分段数据的顺序维护与校验方法
KR102013839B1 (ko) 데이터베이스 관리 방법, 시스템 및 데이터베이스 트리 구조
Faust et al. Footprint reduction and uniqueness enforcement with hash indices in SAP HANA

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