System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据库技术,特别是涉及一种数据排序方法、存储介质与设备。
技术介绍
1、数据库进行order by + limit语句执行的时候,在设置内存大小足够的情况下会触发sort节点中的top-n的堆排序算法,最终从待处理数据集中获取前n个符合条件的元组。在数据库执行器的排序节点普遍操作为:当判断需要进行top-n排序时,为了保证构建大顶堆(或小顶堆)的元组比较顺序正确,先将整体的排序方向进行反转;每次从下层节点读取一个元组数据(若为列存储数据库则会从一批数据中读取一行数据);初始依次将新元组放入到堆尾再进行旋转来建立大小为n的堆;一旦堆内元组个数到达了n,后续通过依次比较新引入的元组和堆顶元组的排序键来判断新引入的元组是否能够替换堆顶元组;当不能替换时,就直接释放掉新引入的元组;需要替换时,会释放掉堆顶元组,把新元组放到堆顶,再将堆进行整理;当读取完后续所有数据之后,将最终的堆内存的堆顶元组依次与末尾元组进行交换,减小堆长度,重新整理堆,直到堆长度为零完成排序;排序后的元组依次返回给上层节点,来最终获得order by + limit语句执行结果。在普遍算法中,一旦需要对某个排序键进行比较,程序就会从内存中读取实际值进行比较(若为复杂排序键会从内存中寻找实际值进行拷贝,这个过程更加耗费时间)。
2、然而,在上述依次比较新引入的元组和堆顶元组的排序键的过程中,在一些情况下比较操作是无意义的。例如,前期通过比较非首个排序键判断需要放入到堆中的数据,在后期通过判断首个排序键就被释放。因此,现有的top-n堆排序算法
技术实现思路
1、鉴于上述问题,提出了一种克服上述问题或者至少部分地解决上述问题的数据排序方法、存储介质与设备。
2、本专利技术的一个目的是要提供一种数据排序方法,以减少堆排序过程中的节点替换操作,从而提高整体排序执行效率。
3、本专利技术一个进一步的目的是要优化数据结构,提高排序准确性。
4、本专利技术另一个进一步的目的是要减少堆排序过程中的比较操作,以进一步提高整体排序执行效率。
5、特别地,本专利技术提供了一种数据排序方法,包括:
6、获取待排序元素和预先构建的数据结构,其中,数据结构包括堆结构和以堆结构中的堆节点作为链表节点的链表;
7、基于待排序元素的首个排序键,判断待排序元素是否满足加入链表的条件;
8、若是,则将待排序元素加入到链表中。
9、进一步地,堆结构中的不同堆节点用于存储首个排序键不同的元素,每个链表中的不同链表节点用于存储首个排序键相同的元素;并且
10、基于待排序元素的首个排序键,判断待排序元素是否满足加入链表的条件的步骤包括:
11、判断待排序元素的首个排序键是否与堆结构中的任一堆节点中存储的元素的首个排序键相同;
12、若相同,则确认待排序元素满足加入链表的条件;
13、若不相同,则确认待排序元素不满足加入链表的条件。
14、进一步地,数据结构中的每个节点用于存储一个元素;并且
15、在将待排序元素加入到链表中的步骤之后,数据排序方法还包括:
16、以数据结构中除了堆顶链表以外的节点内存储的元素的数量作为非堆顶元素数,其中,堆顶链表为以堆结构的堆顶节点作为链表节点的链表;
17、判断非堆顶元素数是否达到设定的边界值,其中,边界值为从待处理数据集中获取目标元素的目标获取数量;
18、若是,则释放堆顶链表的所有元素。
19、进一步地,获取待排序元素的步骤包括:
20、判断是否存在待处理元素,其中,待处理元素为待处理数据集中未加入数据结构且未被释放的元素;
21、若存在,则获取待处理元素;
22、判断数据结构中存储的元素的数量是否达到边界值;
23、若未达到,则将获取到的待处理元素作为待排序元素;
24、若达到,则基于待处理元素的首个排序键,判断待处理元素是否满足加入数据结构的条件;
25、若满足,则将获取到的待处理元素作为待排序元素。
26、进一步地,在判断是否存在待处理元素的步骤之后,数据排序方法还包括:
27、在不存在待处理元素的情况下,基于数据结构中存储的元素的非首个排序键对数据结构中存储的元素进行排序,直至数据结构中存储的元素的数量与边界值相同,以获取所有目标元素。
28、进一步地,基于待处理元素的首个排序键,判断待处理元素是否满足加入数据结构的条件的步骤包括:
29、在堆结构的类型为小顶堆的情况下,判断待处理元素的首个排序键是否不小于堆顶节点中存储的元素的首个排序键,若不小于,则确认待处理元素满足加入数据结构的条件,若小于,则确认待处理元素不满足加入数据结构的条件;或者
30、在堆结构的类型为大顶堆的情况下,判断待处理元素的首个排序键是否不大于堆顶节点中存储的元素的首个排序键,若不大于,则确认待处理元素满足加入数据结构的条件,若大于,则确认待处理元素不满足加入数据结构的条件。
31、进一步地,在基于待处理元素的首个排序键,判断待处理元素是否满足加入数据结构的条件的步骤之后,数据排序方法还包括:
32、在待处理元素不满足加入数据结构的条件的情况下,释放待处理元素。
33、进一步地,数据结构通过以下步骤构建:
34、基于待处理数据集中所有待处理元素的首个排序键构建索引数组结构,其中,索引数组结构包括多个数组,多个数组与所有待处理元素一一对应,并且每个数组包括和其对应的待处理元素的首个排序键、行索引和下一跳索引,行索引用于表示待处理元素的内存位置,下一跳索引用于指向首个排序键与待处理元素的首个排序键相同的另一个待处理元素在索引数组结构中的位置,以模拟链表;
35、设置分别指向索引数组结构中的多个数组的头部指针以及尾部指针,头部指针用于表示与所指向的数组对应的待处理元素为堆结构的堆顶,尾部指针用于表示所指向的数组为堆结构的尾部,以模拟堆结构。
36、根据本专利技术的另一个方面,还提供了一种机器可读存储介质,其上存储有机器可执行程序,机器可执行程序被处理器执行时实现上述任一种的数据排序方法的步骤。
37、根据本专利技术的又一个方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的机器可执行程序,并且处理器执行机器可执行程序时实现上述任一种的数据排序方法的步骤。
38、本专利技术的数据排序方法,通过预先构建了包括堆结构和以堆结构中的堆节点作为链表节点的链表的数据结构,优化了用于堆排序的数据存储结构,并通过在获取待排序元素和预先本文档来自技高网...
【技术保护点】
1.一种数据排序方法,包括:
2.根据权利要求1所述的数据排序方法,其中,所述堆结构中的不同所述堆节点用于存储首个排序键不同的元素,每个所述链表中的不同所述链表节点用于存储首个排序键相同的元素;并且
3.根据权利要求2所述的数据排序方法,其中,所述数据结构中的每个节点用于存储一个元素;并且
4.根据权利要求3所述的数据排序方法,其中,
5.根据权利要求4所述的数据排序方法,其中,
6.根据权利要求4所述的数据排序方法,其中,
7.根据权利要求4所述的数据排序方法,其中,
8.根据权利要求2所述的数据排序方法,其中,所述数据结构通过以下步骤构建:
9.一种机器可读存储介质,其上存储有机器可执行程序,所述机器可执行程序被处理器执行时实现根据权利要求1至8任一项所述的数据排序方法。
10.一种计算机设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的机器可执行程序,并且所述处理器执行所述机器可执行程序时实现根据权利要求1至8任一项所述的数据排序方法。
【技术特征摘要】
1.一种数据排序方法,包括:
2.根据权利要求1所述的数据排序方法,其中,所述堆结构中的不同所述堆节点用于存储首个排序键不同的元素,每个所述链表中的不同所述链表节点用于存储首个排序键相同的元素;并且
3.根据权利要求2所述的数据排序方法,其中,所述数据结构中的每个节点用于存储一个元素;并且
4.根据权利要求3所述的数据排序方法,其中,
5.根据权利要求4所述的数据排序方法,其中,
6.根据权利要求4所述的数据排序方法,其中,<...
【专利技术属性】
技术研发人员:张子珩,王鸿翔,
申请(专利权)人:中电科金仓北京科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。