CN114047876B - 基于列式存储的数据排序方法、设备及存储介质 - Google Patents

基于列式存储的数据排序方法、设备及存储介质 Download PDF

Info

Publication number
CN114047876B
CN114047876B CN202111295205.3A CN202111295205A CN114047876B CN 114047876 B CN114047876 B CN 114047876B CN 202111295205 A CN202111295205 A CN 202111295205A CN 114047876 B CN114047876 B CN 114047876B
Authority
CN
China
Prior art keywords
data
sorting
key
data blocks
priority
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
Application number
CN202111295205.3A
Other languages
English (en)
Other versions
CN114047876A (zh
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.)
Henan Xinghuan Zhongzhi Information Technology Co ltd
Original Assignee
Henan Xinghuan Zhongzhi Information Technology 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 Henan Xinghuan Zhongzhi Information Technology Co ltd filed Critical Henan Xinghuan Zhongzhi Information Technology Co ltd
Priority to CN202111295205.3A priority Critical patent/CN114047876B/zh
Publication of CN114047876A publication Critical patent/CN114047876A/zh
Application granted granted Critical
Publication of CN114047876B publication Critical patent/CN114047876B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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/2272Management thereof

Landscapes

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

Abstract

本申请实施例公开了一种基于列式存储的数据排序方法、设备及存储介质。其中,方法包括:在按照预设分块算法将待排序数据流进行分块,得到多个数据区块后,对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码,按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。通过将相同键值的排序键转换成一个行程编码,可以将相同键值的排序键缩减成一个行程编码,进行后续的比较和排序,可以大大减少比较过程中函数调用的次数,提高排序性能。

Description

基于列式存储的数据排序方法、设备及存储介质
技术领域
本申请实施例涉及数据排序技术,尤其涉及一种基于列式存储的数据排序方法、设备及存储介质。
背景技术
在数据库领域中,排序是常用算子之一,为了提高对大数据量的排序性能,大部分数据库采用了地址排序和并行排序算法。其中,对于并行排序算法,主要是将数据流进行分块后分发,然后进行块内排序,最后将有序数据块进行归并,从而实现对数据流中的数据的排序。
通常,在具体排序时,一般会依次比较多个排序键,在不等时返回比较结果,在相等时比较下一个键,但是逐键比较的方式会导致比较函数的频繁调用,这就会使得在比较过程中函数调用耗费较大的运算开销,降低排序性能。
发明内容
本申请实施例提供一种基于列式存储的数据排序方法、设备及存储介质,以减少比较过程中函数调用的次数,提高排序性能。
第一方面,本申请实施例提供了一种基于列式存储的数据排序方法,包括:
按照预设分块算法将待排序数据流进行分块,得到多个数据区块;
对于任一所述数据区块,按照排序键的优先级对所述数据区块内的数据进行排序,并将相同键值的所述排序键转换成一个行程编码;
按照所述排序键的优先级以及所述行程编码,对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序。
第二方面,本申请实施例还提供了一种计算机设备,包括处理器和存储器,存储器用于存储指令,当指令执行时使得处理器执行以下操作:
按照预设分块算法将待排序数据流进行分块,得到多个数据区块;
对于任一所述数据区块,按照排序键的优先级对所述数据区块内的数据进行排序,并将相同键值的所述排序键转换成一个行程编码;
按照所述排序键的优先级以及所述行程编码,对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序。
第三方面,本申请实施例还提供了一种存储介质,存储介质用于存储指令,指令用于执行:
按照预设分块算法将待排序数据流进行分块,得到多个数据区块;
对于任一所述数据区块,按照排序键的优先级对所述数据区块内的数据进行排序,并将相同键值的所述排序键转换成一个行程编码;
按照所述排序键的优先级以及所述行程编码,对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序。
本申请实施例的技术方案,在按照预设分块算法将待排序数据流进行分块,得到多个数据区块后,对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码,按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。通过将相同键值的排序键转换成一个行程编码,可以将相同键值的排序键缩减成一个行程编码,进行后续的比较和排序,可以大大减少比较过程中函数调用的次数,提高排序性能。
附图说明
图1a为本申请的实施例一提供的一种基于列式存储的数据排序方法的流程示意图;
图1b为现有技术中并行排序的流程示意图;
图1c为现有技术中进行多路并归的流程示意图;
图1d为本申请的实施例一提供的一种单排序键的并归排序示意图;
图2a为本申请实施例二提供的一种将排序键转换成行程编码的流程示意图;
图2b为本申请的实施例二提供的一种转换行程编码的示例图;
图3a为本申请实施例三提供的一种归并排序的流程示意图;
图3b为本申请的实施例三提供的一种对行程编码进行比较的示例图;
图3c为本申请的实施例三提供的一种并归排序输出的示例图;
图4为本申请实施例四提供的一种基于列式存储的数据排序装置的结构示意图;
图5为本申请实施例五提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
本文使用的术语“列式存储”是指的是数据库中存储数据的方式,按照列进行存储。
本文使用的术语“预设分块算法”指的是对待排序数据流进行分块所依据的算法。
本文使用的术语“数据区块”指的是对待排序数据流进行分块后,得到的包含有一定数据条数的区块。
本文使用的术语“排序键”指的是在排序时所要基于的列数据。
本文使用的术语“键值”指的是排序键的具体数值,比如某列排序键为数字,那么该列的每个数据具体的值便是键值。
本文使用的术语“行程编码”指的是是一种统计编码。主要技术是检测重复的比特或字符序列,并用它们的出现次数取而代之。
本文使用的术语“预设数据条数”指的是在对待排序数据流进行分块时,每个数据区块中所需包含的数据的条数。
本文使用的术语“内存空间”指的是运行本申请的方案所基于的硬件系统的内存的空间,该内存需要加载数据区块进行块内排序以及归并排序。
本文使用的术语“目标数据条数”指的是根据内存空间确定出的分块出的数据区块需要包含的数据的条数。
本文使用的术语“目标排序键”指的是多个排序键中的任一排序键。
为了便于理解,将本申请实施例的主要发明构思进行简述。
现有技术中,在具体排序时,一般会依次比较多个排序键,在不等时返回比较结果,在相等时比较下一个键,但是逐键比较的方式会导致比较函数的频繁调用,这就会使得在比较过程中函数调用耗费较大的运算开销,降低排序性能。
发明人针对上述情况,将相同键值的所述排序键转换成一个行程编码,以减少需要比较的数据的数量,进而减少调用比较函数的次数。
基于上述思考,发明人创造性的提出,在按照预设分块算法将待排序数据流进行分块,得到多个数据区块后,对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码,按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。通过将相同键值的排序键转换成一个行程编码,可以将相同键值的排序键缩减成一个行程编码,进行后续的比较和排序,可以大大减少比较过程中函数调用的次数,提高排序性能。
实施例一
图1a为本申请的实施例一提供的一种基于列式存储的数据排序方法的流程示意图。本申请实施例可适用于对于基于列式存储的数据进行排序的情况,该方法可以由本申请实施例提供的基于列式存储的数据排序装置来执行,该装置可采用软件和/或硬件的方式实现,并一般可集成在计算机设备中。如图1a所示,本申请实施例的方法具体包括:
步骤101、按照预设分块算法将待排序数据流进行分块,得到多个数据区块。
需要说明的是,本实施例的方案是对基于列式存储的数据流进行的排序,在面对行式存储的数据流时,可以将其转换为列式存储。具体的,对行式存储的数据流进行排序,其同样会具有一个或者多个排序键,那么在转换的过程中,可以按照排序键进行转换。
在一个具体的例子中,第一行的数据可以包括A-1,B-1,C-1,第二行数据为A-2,B-2,C-2。其中,排序键为A和B,那么就可以将A-1和A-2作为一列,B-1,B-2作为一列,剩余的其他数据作为一列,然后再按照本实施例进行数据排序。
另外,本步骤中,分块的具体方式可以但不仅限于有一下两种:
第一种,可以设置一个固定的预设数据条数,按照该预设数据条数来进行分块,具体的,可以按照预设数据条数对待排序数据流进行分块,得到多个数据区块,其中,每个数据区块中最多包含预设数据条数的数据。
在一个具体的例子中,预设数据条数可以是1万条,那么可以对待排序数据流进行分块,从数据流的起始开始计数,每累计计数到1万条,将之前的数据确定为一个数据块,然后重新开始计数,直到累计完数据流中所有的数据,当然,最后一个数据块中的数据可能不足1万条,但是也可以将其确定为一个数据块。
第二种,可以根据当前的内存空间,动态确定每个数据区块中的数据的条数,具体的,获取当前的内存空间,并基于内存空间确定每个数据区块中包含的目标数据条数;按照目标数据条数对对待排序数据流进行分块,得到多个数据区块。
在一个具体的例子中,由于硬件系统中内存的空间是动态变化的,因此,可以对内存空间进行动态获取,也就是说,每次需要进行分块时,实时获取当前的内存空间,由于每条数据的大小是比较固定的,而且内存空间还需要留有一定的空间进行运算、函数调取等,因此,可以将当前内存空间的部分空间作为加载数据块的空间,那么可以将获取的当前内存空间乘以一定的比例,比如70%,然后让得到的数值除以每条数据的大小,便可以得到目标数据体条数。
步骤102、对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码。
本步骤是对于数据区块内的数据进行的排序,一般,数据区块中可能会存在相同键值的排序键,以单排序键进行排序为例,可以参阅图1b,图1b为现有技术中并行排序的流程示意图。
如图1b所示,首先对数据流(data stream)进行分块(fetch),得到下述数据区块:“1,9,0,3”,……,“6,7,4”,“5,8,2”。对各数据区块进行块内排序(intrablock sort),得到排序后的数据区块:“0,1,3,9”,……,“4,7,6”,“2,5,8”;然后对各排序后的数据块进行多路并归(即本申请中的并归排序),得到最终的排序结果。
上述图1b的示例中,在多路并归时,一般是对各排序后的数据区块中,处于首位的排序键进行比较,将最小的输出,比如在0、4、2中,最小的是0,那么就可以先将0输出,然后对于第一个数据区块,剩下的排序键中,1就处于了首位,然后再比较1、4、2,直到比较完全部的数据区块中的排序键,得到最终的排序结果。
其中,若数据区块中存在相同键值的排序键,比如在第一个数据区块中,具体的排序键如下“0,0,0,1,1,1,1,1,3,9”,那么在后续多路并归时,就需要比较3次0、4、2中那个排序键最小,需要比较5次1、4、2中哪个排序键最小,而每次比较都需要调用比较函数,这就会导致函数调用次数较多,影响排序性能。
本步骤中,将相同键值的排序键转换成一个行程编码,在后续并归排序时,利用行程编码进行排序即可。
仍以图1b中第一个数据区块为“0,0,0,1,1,1,1,1,3,9”时为例,将相同键值的排序键生成行程编码则可以是,将“0,0,0”转换为“0:3”,其中,冒号前为键值,冒号后为键值数量。
为了后续并归排序过程中的统一,对于相同键值数量为1的排序键,也会生成相应的行程编码,其中,行程编码中的键值数量为1。
对于多排序键的数据区块转换成行程编码的情况,可以参考后续实施例,本步骤不再赘述。
步骤103、按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。
本步骤中,对于多排序键的排序场景,各排序键会存在优先级前后,对于单排序键的排序场景,可以认为该单排序键即是优先级最高的排序键。
其中,按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,指的是需要按照排序键的优先级,从高优先级到低优先级进行排序,且排序时所需要的比较的不再是排序键,而是转换成的行程编码。
请参阅图1c,图1c为现有技术中进行多路并归的流程示意图。其中,排序键为第一列的数据,在对左右两个数据区块进行多路并归时,需要逐行比较,即先比较第一行的“1,1,a”中的第一列“1”与右边数据区块“2,0,a”中的第一列“2”的大小,1小于2,输出左边数据区块的第一行数据,以此类推,比较完全部的数据,那么图1c的示例中,需要比较4次。
请参阅图1d,图1d为本申请的实施例一提供的一种单排序键的并归排序示意图。首先对排序键所在列进行行程编码的转换,图中是将每一列都进行了转换,这种其实是在每一列都是排序键的情况下,才有必要将每一列进行转换,对于单排序键的排序场景,只需要转换排序键所在列就可以了。
在转换完成后,对行程编码中的键值进行比较即可,1小于2,则输出行程编码对应的4行数据即可。图1d的示例中,只需要比较1次即可,这就大大减少了比较函数(cmp)的调用,可以有效提高排序效率。
另外,对于多排序键的情况,即多级行程编码的情况,会在后续实施例进行详细说明,此处不再赘述。
本实施例中,在按照预设分块算法将待排序数据流进行分块,得到多个数据区块后,对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码,按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。通过将相同键值的排序键转换成一个行程编码,可以将相同键值的排序键缩减成一个行程编码,进行后续的比较和排序,可以大大减少比较过程中函数调用的次数,提高排序性能。
实施例二
图2a为本申请实施例二提供的一种将排序键转换成行程编码的流程示意图。本申请实施例可以与上述一个或者多个实施例中各个可选方案结合。
如图2a所示,本申请实施例的方法具体包括:
步骤201、对于任一数据区块,当排序到目标排序键时,对从上一优先级的排序键对应的等值区间中的数据进行排序。
由于对于每一排序键所在的列的数据,进行转换的方式都是相同的,因此,本步骤以排序到目标排序键时的操作进行说明。由于目标排序键可能会存在上一优先级的排序键,在上一优先级的排序键中,已经进行了行程编码的转换,其中每个行程编码对应一个等值区间。由于上一优先级中,等值区间之间的排序已经完成,那么在等值区间之间,比对后续优先级的排序键时,不会出现等值区间之间的数据排序发生变化。
比如上一优先级的等值区间1与等值区间2之间的排序为:等值区间1、等值区间2,那么在下一优先级的比较过程中,必然不会将等值区间2中的数据排序到等值区间1的任一数据之前,因此,本步骤中仅需要对上一优先级排序键对应的等值区间中的数据,按照目标排序键进行排序即可。
在一个具体的例子中,请参阅图2b,图2b为本申请的实施例二提供的一种转换行程编码的示例图。如图2b所示,index指的是行序号,每个行序号代表改行的数据,在本申请中,进行排序时,可以仅对行序号的排序进行更新,当然,每个行序号与其对应的数据之间的映射关系,不可以改变。
图2b所示的是两列数据(data),两列数据均是排序键,其中,左侧数据的排序键的优先级高于右侧的排序键的优先级。左侧排序键不存在上一优先级的排序键,因此,可以将全部的数据看做等值区间进行排序,也就是说,根据左侧排序键对行序号进行排序,排序后行序号如图2b中间的index所示,对应的排序键的顺序为“1,1,1,1,1,1,2,2,2,2,2,2,3,3,3”。
然后对于右侧的排序键,由于存在上一优先级的排序键,那么就是对上一优先级的排序键对应的等值区间中数据进行排序。相应的,上一优先级的排序键,即左侧排序键,存在3个等值区间,行序号分别是“3,6,7,8,11,12”、“0,1,5,4,10,14”和“9,2,13”,那么在根据右侧排序键进行排序时,便是分别对各等值区间的数据进行的排序,比如对“3,6,7,8,11,12”内的数据按照右侧排序键排序后,行序号又会更新为“7,12,6,11,8,3”,对应的右侧排序键为“a,a,b,b,c,c”,其中,对于该左侧的排序键对应的等值区间中,右侧排序键还会出现新的等值区间,即“7,12”、“6,11”、“8,3”,用作下一优先级的排序键进行排序的基础。
步骤202、对于上一优先级的排序键对应的任一等值区间中的数据,将相同键值的排序键确定为一个等值区间,并合并为一个行程编码。
本步骤中,在完成排序后,会将相同键值的排序键确定为一个等值区间,具体可以参阅步骤201所说明的等值区间的确定方式,此处不再赘述。
另外,关于合并得到行程编码,具体可以是确定各键值对应的排序键的数量;对于任一键值,将键值和键值对应的排序键的数量确定为一个行程编码。行程编码为是一种统计编码,主要技术是检测重复的比特或字符序列,并用它们的出现次数取而代之。本实施例中,对于任一等值区间,采用“键值:相同键值的排序键数量”作为行程编码,那么以图2b所示,“3,6,7,8,11,12”、“0,1,5,4,10,14”和“9,2,13”分别为“1:6”、“2:6”和“3:3”。
实施例三
图3a为本申请实施例三提供的一种归并排序的流程示意图。本申请实施例可以与上述一个或者多个实施例中各个可选方案结合。
如图3a所示,本申请实施例的方法具体包括:
步骤301、在对两个数据区块进行归并排序的情况下,从优先级最高的排序键开始,对两个数据区块的行程编码进行比较。
步骤302、若两个数据区块的行程编码相同,则对下一优先级的排序键中的行程编码进行比较。
步骤303、若两个数据区块的行程编码不同,则输出比较结果靠前的行程编码对应的行,直至输出所有行,完成对两个数据区块的归并排序。
本实施例中,进行比较的,是各数据块中排序最靠前的行程编码,首先要从优先级高的排序键开始比较,若两个数据区块的行程编码相同,则对下一优先级的排序键中的行程编码进行比较,若两个数据区块的行程编码不同,则输出比较结果靠前的行程编码对应的行。
在一个具体的例子中,可以参阅图3b,图3b为本申请的实施例三提供的一种对行程编码进行比较的示例图。
如图3b所示,排序键从左到右依次降低,c1为最高优先级,c3为最低优先级,从c1开始,“1:16”中的1与“1:7”中的1相等,那么则比较c2的行程编码,“1:3”中的1小于“3:3”中的3,1应该排在前边,因此,先输出stream0中的“1:3”对应的前三行数据,如图3c所示,图3c为本申请的实施例三提供的一种并归排序输出的示例图。此时,stream0中排在首位的便是从第4行开始的数据。
此时仍从c1开始比较,行程编码中的1仍然相等,比较c2的行程编码,“2:1”中的2小于“3:3”中的3,2应该排在前边,再输出stream0中的“2:1”对应的数据。以此类推,直至输出全部的数据。
步骤304、将输出的所有行作为新的数据区块,与其他数据区块进行归并排序,直至完成所有数据区块的归并排序,实现对待排序数据流的排序。
本步骤是针对算法只能实现两个数据区块进行并归排序的情形,此时需要将得到的输出作为新的数据区块,再与其他数据区块进行归并排序,直至完成所有数据区块的归并排序,实现对待排序数据流的排序。
为了减少本步骤带来的额外的运算,本实施例还可以按照排序键的优先级以及行程编码,利用预设的二叉最小堆算法对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。
需要说明的是,本步骤是将每个数据区块看做是一个堆,堆内排序靠前的为堆顶,每次对各个堆的堆顶的行程编码按照排序键的优先级进行比较,比如对于三个堆而言,先比较最高优先级的排序键处于堆顶的行程编码,若不同,则输出排序为最前的行程编码对应的数据,然后后续行的数据则自动滤升至堆顶,进行再次的比较。若相同,则比较次优先级的排序键处于堆顶的行程编码。
具体的,以算法的角度进行描述,本实施例的过程如下:堆内元素保存多级行程(levels),和排序键一一对应。对每一级行程,保存当前行程偏移和需跳跃到上一级的结束偏移。对堆顶元素,保存下次提取可前进级别,以及比较起始级别。初始化时比较起始级别设置为最高级别。
每一次对堆的提取,都会将堆顶元素最低级别的当前行,推进到可前进级别。其间跨越的所有索引都关联原始数据并输出,并更新涉及到的各级别当前行程偏移。推进时需比较推进后的行程偏移是否达到需跳跃上一级的结束偏移,如达到,则需要推进上一级,并依次向上迭代。同时,设置比较级别为其上一级不再需要推进的级别。如果当前元素所代表的任一级别的行程全部遍历完,则该结果集已结束,从堆中移除,移除后将最后一个元素置于堆顶并更新堆结构以保持堆特性。如未遍历完,则将堆顶元素与左右两子节点进行比较,确定是否仍保持在堆顶,并更新堆顶元素的下次提取可前进级别。
这里可以设置一个标记位,保存左右节点何者较小,并在比较后更新比较起始级别,在每次提取后与较小者从比较起始级别向后比较。仅在堆顶元素与子节点交换位置时重置该标记。
当堆仅剩一个元素时,直接输出剩余所有记录。
实施例四
图4为本申请实施例四提供的一种基于列式存储的数据排序装置的结构示意图。该装置可采用软件和/或硬件的方式实现,并一般可集成在计算机设备中。如图4所示,装置包括:分块模块401、转换模块402、归并模块403。
其中,分块模块401,用于按照预设分块算法将待排序数据流进行分块,得到多个数据区块;转换模块402,用于对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码;归并模块403,用于按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。
本申请实施例提供了一种基于列式存储的数据排序装置,在按照预设分块算法将待排序数据流进行分块,得到多个数据区块后,对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码,按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。通过将相同键值的排序键转换成一个行程编码,可以将相同键值的排序键缩减成一个行程编码,进行后续的比较和排序,可以大大减少比较过程中函数调用的次数,提高排序性能。
在上述各实施例的基础上,分块模块可以包括:
第一分块单元,用于按照预设数据条数对待排序数据流进行分块,得到多个数据区块,其中,每个数据区块中最多包含预设数据条数的数据。
在上述各实施例的基础上,分块模块可以包括:
获取单元,用于获取当前的内存空间,并基于内存空间确定每个数据区块中包含的目标数据条数;
第二分块单元,用于按照目标数据条数对对待排序数据流进行分块,得到多个数据区块。
在上述各实施例的基础上,转换模块包括:
排序单元,用于对于任一数据区块,当排序到目标排序键时,对从上一优先级的排序键对应的等值区间中的数据进行排序;
合并单元,用于对于上一优先级的排序键对应的任一等值区间中的数据,将相同键值的排序键确定为一个等值区间,并合并为一个行程编码。
在上述各实施例的基础上,合并单元包括:
第一确定子单元,用于确定各键值对应的排序键的数量;
第二确定子单元,用于对于任一键值,将键值和键值对应的排序键的数量确定为一个行程编码。
在上述各实施例的基础上,归并模块包括:
第一比较单元,用于在对两个数据区块进行归并排序的情况下,从优先级最高的排序键开始,对两个数据区块的行程编码进行比较;
第二比较单元,用于若两个数据区块的行程编码相同,则对下一优先级的排序键中的行程编码进行比较;
输出单元,用于若两个数据区块的行程编码不同,则输出比较结果靠前的行程编码对应的行,直至输出所有行,完成对两个数据区块的归并排序;
新区块确定单元,用于将输出的所有行作为新的数据区块,与其他数据区块进行归并排序,直至完成所有数据区块的归并排序,实现对待排序数据流的排序。
在上述各实施例的基础上,归并模块包括:
归并单元,用于按照排序键的优先级以及行程编码,利用预设的二叉最小堆算法对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。
上述基于列式存储的数据排序装置可执行本申请任意实施例所提供的基于列式存储的数据排序方法,具备执行基于列式存储的数据排序方法相应的功能模块和有益效果。
实施例五
图5为本申请实施例五提供的一种计算机设备的结构示意图。图5示出了适于用来实现本申请实施方式的示例性计算机设备包括处理器510、存储器520、输入装置530和输出装置540;计算机设备510的数量可以是一个或多个,图5中以一个处理器510为例;设备/终端/服务器中的处理器510、存储器520、输入装置530和输出装置540可以通过总线或其他方式连接,图5中以通过总线连接为例。
存储器520作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的基于列式存储的数据排序方法对应的程序指令/模块(例如,基于列式存储的数据排序装置中的分块模块401、转换模块402、归并模块403)。处理器510通过运行存储在存储器520中的软件程序、指令以及模块,从而执行设备/终端/服务器的各种功能应用以及数据处理,即实现上述实施例的方法:
处理器510通过运行存储在存储器520中的指令,从而执行各种功能应用以及数据处理,例如执行以下操作:
按照预设分块算法将待排序数据流进行分块,得到多个数据区块;
对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码;
按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。
在上述各实施例的基础上,处理器是设置为通过以下方式得到多个数据区块:
按照预设数据条数对待排序数据流进行分块,得到多个数据区块,其中,每个数据区块中最多包含预设数据条数的数据。
在上述各实施例的基础上,处理器是设置为通过以下方式得到多个数据区块:
获取当前的内存空间,并基于内存空间确定每个数据区块中包含的目标数据条数;
按照目标数据条数对对待排序数据流进行分块,得到多个数据区块。
在上述各实施例的基础上,处理器是设置为通过以下方式进行块内排序:
对于任一数据区块,当排序到目标排序键时,对从上一优先级的排序键对应的等值区间中的数据进行排序;
对于上一优先级的排序键对应的任一等值区间中的数据,将相同键值的排序键确定为一个等值区间,并合并为一个行程编码。
在上述各实施例的基础上,处理器是设置为通过以下方式得到行程编码:
确定各键值对应的排序键的数量;
对于任一键值,将键值和键值对应的排序键的数量确定为一个行程编码。
在上述各实施例的基础上,处理器是设置为通过以下方式对所有数据区块中的数据进行归并排序:
在对两个数据区块进行归并排序的情况下,从优先级最高的排序键开始,对两个数据区块的行程编码进行比较;
若两个数据区块的行程编码相同,则对下一优先级的排序键中的行程编码进行比较;
若两个数据区块的行程编码不同,则输出比较结果靠前的行程编码对应的行,直至输出所有行,完成对两个数据区块的归并排序;
将输出的所有行作为新的数据区块,与其他数据区块进行归并排序,直至完成所有数据区块的归并排序,实现对待排序数据流的排序。
在上述各实施例的基础上,处理器是设置为通过以下方式对所有数据区块中的数据进行归并排序:
按照排序键的优先级以及行程编码,利用预设的二叉最小堆算法对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。
存储器520可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器520可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器520可进一步包括相对于处理器510远程设置的存储器,这些远程存储器可以通过网络连接至设备/终端/服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置530可用于接收输入的数字或字符信息,以及产生与设备/终端/服务器的用户设置以及功能控制有关的键信号输入。输出装置540可包括显示屏等显示设备。
实施例六
本申请实施例六提供了一种计算机可读存储介质,存储介质用于存储指令,指令用于执行本申请任一实施例所提供的基于列式存储的数据排序方法。方法如下:
按照预设分块算法将待排序数据流进行分块,得到多个数据区块;
对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码;
按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。
在上述各实施例的基础上,按照预设分块算法将待排序数据流进行分块,得到多个数据区块,包括:
按照预设数据条数对待排序数据流进行分块,得到多个数据区块,其中,每个数据区块中最多包含预设数据条数的数据。
在上述各实施例的基础上,按照预设分块算法将待排序数据流进行分块,得到多个数据区块,包括:
获取当前的内存空间,并基于内存空间确定每个数据区块中包含的目标数据条数;
按照目标数据条数对对待排序数据流进行分块,得到多个数据区块。
在上述各实施例的基础上,对于任一数据区块,按照排序键的优先级对数据区块内的数据进行排序,并将相同键值的排序键转换成一个行程编码,包括:
对于任一数据区块,当排序到目标排序键时,对从上一优先级的排序键对应的等值区间中的数据进行排序;
对于上一优先级的排序键对应的任一等值区间中的数据,将相同键值的排序键确定为一个等值区间,并合并为一个行程编码。
在上述各实施例的基础上,将相同键值的排序键确定为一个等值区间,并合并为一个行程编码,包括:
确定各键值对应的排序键的数量;
对于任一键值,将键值和键值对应的排序键的数量确定为一个行程编码。
在上述各实施例的基础上,按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序,包括:
在对两个数据区块进行归并排序的情况下,从优先级最高的排序键开始,对两个数据区块的行程编码进行比较;
若两个数据区块的行程编码相同,则对下一优先级的排序键中的行程编码进行比较;
若两个数据区块的行程编码不同,则输出比较结果靠前的行程编码对应的行,直至输出所有行,完成对两个数据区块的归并排序;
将输出的所有行作为新的数据区块,与其他数据区块进行归并排序,直至完成所有数据区块的归并排序,实现对待排序数据流的排序。
在上述各实施例的基础上,按照排序键的优先级以及行程编码,对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序,包括:
按照排序键的优先级以及行程编码,利用预设的二叉最小堆算法对所有数据区块中的数据进行归并排序,以实现对待排序数据流的排序。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本申请的较佳实施例及所运用技术原理。本领域技术人员会理解,本申请不限于这里的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由所附的权利要求范围决定。

Claims (11)

1.一种基于列式存储的数据排序方法,其特征在于,包括:
按照预设分块算法将待排序数据流进行分块,得到多个数据区块;
对于任一所述数据区块,按照排序键的优先级对所述数据区块内的数据进行排序,并将相同键值的所述排序键转换成一个行程编码;
按照所述排序键的优先级以及所述行程编码,对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序;
所述对于任一所述数据区块,按照排序键的优先级对所述数据区块内的数据进行排序,并将相同键值的所述排序键转换成一个行程编码,包括:
对于任一所述数据区块,当排序到目标排序键时,对从上一优先级的排序键对应的等值区间中的数据进行排序;
对于上一优先级的排序键对应的任一等值区间中的数据,将相同键值的排序键确定为一个等值区间,并合并为一个行程编码;
所述将相同键值的排序键确定为一个等值区间,并合并为一个行程编码,包括:
确定各键值对应的排序键的数量;
对于任一键值,将所述键值和所述键值对应的排序键的数量确定为一个行程编码。
2.根据权利要求1所述的方法,其特征在于,所述按照预设分块算法将待排序数据流进行分块,得到多个数据区块,包括:
按照预设数据条数对所述待排序数据流进行分块,得到多个数据区块,其中,每个所述数据区块中最多包含所述预设数据条数的数据。
3.根据权利要求1所述的方法,其特征在于,所述按照预设分块算法将待排序数据流进行分块,得到多个数据区块,包括:
获取当前的内存空间,并基于所述内存空间确定每个数据区块中包含的目标数据条数;
按照所述目标数据条数对所述待排序数据流进行分块,得到多个数据区块。
4.根据权利要求1所述的方法,其特征在于,所述按照所述排序键的优先级以及所述行程编码,对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序,包括:
在对两个数据区块进行归并排序的情况下,从优先级最高的排序键开始,对两个数据区块的行程编码进行比较;
若两个数据区块的行程编码相同,则对下一优先级的排序键中的行程编码进行比较;
若两个数据区块的行程编码不同,则输出比较结果靠前的行程编码对应的行,直至输出所有行,完成对两个数据区块的归并排序;
将输出的所有行作为新的数据区块,与其他数据区块进行归并排序,直至完成所有数据区块的归并排序,实现对所述待排序数据流的排序。
5.根据权利要求1所述的方法,其特征在于,所述按照所述排序键的优先级以及所述行程编码,对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序,包括:
按照所述排序键的优先级以及所述行程编码,利用预设的二叉最小堆算法对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序。
6.一种计算机设备,包括处理器和存储器,所述存储器用于存储指令,当所述指令执行时使得所述处理器执行以下操作:
按照预设分块算法将待排序数据流进行分块,得到多个数据区块;
对于任一所述数据区块,按照排序键的优先级对所述数据区块内的数据进行排序,并将相同键值的所述排序键转换成一个行程编码;
按照所述排序键的优先级以及所述行程编码,对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序;
所述处理器是设置为通过以下方式进行块内排序:
对于任一所述数据区块,当排序到目标排序键时,对从上一优先级的排序键对应的等值区间中的数据进行排序;
对于上一优先级的排序键对应的任一等值区间中的数据,将相同键值的排序键确定为一个等值区间,并合并为一个行程编码;
所述处理器是设置为通过以下方式得到行程编码:
确定各键值对应的排序键的数量;
对于任一键值,将所述键值和所述键值对应的排序键的数量确定为一个行程编码。
7.根据权利要求6所述的计算机设备,其特征在于,所述处理器是设置为通过以下方式得到多个数据区块:
按照预设数据条数对所述待排序数据流进行分块,得到多个数据区块,其中,每个所述数据区块中最多包含所述预设数据条数的数据。
8.根据权利要求6所述的计算机设备,其特征在于,所述处理器是设置为通过以下方式得到多个数据区块:
获取当前的内存空间,并基于所述内存空间确定每个数据区块中包含的目标数据条数;
按照所述目标数据条数对所述待排序数据流进行分块,得到多个数据区块。
9.根据权利要求6所述的计算机设备,其特征在于,所述处理器是设置为通过以下方式对所有所述数据区块中的数据进行归并排序:
在对两个数据区块进行归并排序的情况下,从优先级最高的排序键开始,对两个数据区块的行程编码进行比较;
若两个数据区块的行程编码相同,则对下一优先级的排序键中的行程编码进行比较;
若两个数据区块的行程编码不同,则输出比较结果靠前的行程编码对应的行,直至输出所有行,完成对两个数据区块的归并排序;
将输出的所有行作为新的数据区块,与其他数据区块进行归并排序,直至完成所有数据区块的归并排序,实现对所述待排序数据流的排序。
10.根据权利要求6所述的计算机设备,其特征在于,所述处理器是设置为通过以下方式对所有所述数据区块中的数据进行归并排序:
按照所述排序键的优先级以及所述行程编码,利用预设的二叉最小堆算法对所有所述数据区块中的数据进行归并排序,以实现对所述待排序数据流的排序。
11.一种存储介质,所述存储介质用于存储指令,所述指令用于执行如权利要求1-5中任一所述的基于列式存储的数据排序方法。
CN202111295205.3A 2021-11-03 2021-11-03 基于列式存储的数据排序方法、设备及存储介质 Active CN114047876B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111295205.3A CN114047876B (zh) 2021-11-03 2021-11-03 基于列式存储的数据排序方法、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111295205.3A CN114047876B (zh) 2021-11-03 2021-11-03 基于列式存储的数据排序方法、设备及存储介质

Publications (2)

Publication Number Publication Date
CN114047876A CN114047876A (zh) 2022-02-15
CN114047876B true CN114047876B (zh) 2022-11-18

Family

ID=80207097

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111295205.3A Active CN114047876B (zh) 2021-11-03 2021-11-03 基于列式存储的数据排序方法、设备及存储介质

Country Status (1)

Country Link
CN (1) CN114047876B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103744628A (zh) * 2014-01-27 2014-04-23 北京奇虎科技有限公司 SSTable文件存储方法及装置
CN112085644A (zh) * 2019-06-12 2020-12-15 上海赜睿信息科技有限公司 多列数据排序方法、装置、可读存储介质和电子设备
CN112236759A (zh) * 2018-09-14 2021-01-15 谷歌有限责任公司 日志结构合并森林中的交错合并

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103744628A (zh) * 2014-01-27 2014-04-23 北京奇虎科技有限公司 SSTable文件存储方法及装置
CN112236759A (zh) * 2018-09-14 2021-01-15 谷歌有限责任公司 日志结构合并森林中的交错合并
CN112085644A (zh) * 2019-06-12 2020-12-15 上海赜睿信息科技有限公司 多列数据排序方法、装置、可读存储介质和电子设备

Also Published As

Publication number Publication date
CN114047876A (zh) 2022-02-15

Similar Documents

Publication Publication Date Title
US10831738B2 (en) Parallelized in-place radix sorting
US9223809B2 (en) Code processing technique
CN107565973B (zh) 一种结点可扩展的哈夫曼编码的实现方法及电路结构
KR20110095049A (ko) 명령어 병렬 처리 컴퓨터를 위한 명령어 압축 장치 및 방법
CN101022552A (zh) 一种实现霍夫曼译码的方法和装置
CN112015366B (zh) 数据排序方法、数据排序装置及数据库系统
WO2023202149A1 (zh) 有限状态熵编码的状态选择方法、系统、存储介质及设备
JP7495933B2 (ja) ソート方法、装置、電子デバイス及びコンピュータプログラム
CN108959571B (zh) Sql语句的运算方法、装置、终端设备及存储介质
US9858040B2 (en) Parallelized in-place radix sorting
CN114047876B (zh) 基于列式存储的数据排序方法、设备及存储介质
CN111384972A (zh) 多进制ldpc解码算法的优化方法、装置及解码器
JP2007233554A (ja) 高速パターンマッチング装置の探索方法
CN111915091A (zh) 一种车位排布方法、装置、终端和介质
CN107623524B (zh) 一种基于硬件的Huffman编码方法及系统
CN115563116A (zh) 一种数据库表扫描方法、装置以及设备
CN103678545A (zh) 进行网络资源聚类的方法及装置
CN110222051B (zh) 以太坊区块链的智能合约压缩方法
CN111224674A (zh) 多进制ldpc码的解码方法、装置及解码器
CN112911314B (zh) 一种熵编码器的编码方法及熵编码器
CN111782645A (zh) 数据处理方法和装置
CN117707791B (zh) 用于进行注意力运算的方法、设备和存储介质
CN111384978A (zh) 一种极化码译码方法、装置及通信设备
CN115001510B (zh) 一种加速Polar码实施FSCL译码的码字构造方法
CN116340692A (zh) Top-k的估算方法

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