一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

多进程负载均衡的数据库文件排序优化方法及装置

2022-06-01 17:25:55 来源:中国专利 TAG:


1.本发明涉及数据库技术领域,尤其涉及一种多进程负载均衡的数据库文件排序优化方法及装置。


背景技术:

2.在数据库领域中,排序(sort)是最为重要的操作之一,广泛被用于实现:分组(grouping)、聚合(aggregation)、连接(join)和shuffle等操作。为了处理任意大小的数据集(可能大于内存容量),数据库中的sort一般均指的是外部排序(external sort)。外部排序算法可分为两个阶段,其过程如下:
3.基于内存的排序,将需要排序的数据在内存中进行缓存,当无更多可用内存时,进行一次基于内存数据的局部排序,并将结果溢写(spill)到磁盘文件中。当所有需要排序的数据都进行完内存排序,形成多个局部序时,归并多个局部序,并生成最终的、全局的序。
4.而现有的数据库的外部排序需要读取大量的外部数据,导致了数据库排序的过程冗长,缓慢。


技术实现要素:

5.本发明实施例提供一种多进程负载均衡的数据库文件排序优化方法及装置,极大提高外部排序的效率,并且充分利用现有的硬件优势,达到硬件的负载均衡。
6.本发明实施例提出一种多进程负载均衡的数据库文件排序优化方法,包括:
7.基于参与排序的进程的数量为各进程分配固定大小的排序内存;
8.根据排序内存的大小,按照待排序的数据文件的原始顺序,将待排序的数据文件,划分出多个子块,并将待排序的数据文件,按照所述原始顺序,划分为多部分子数据,每部分子数据包括至少两个子块;
9.为该部分子数据配置两个进程,且其中一个进程从该部分子数据的数据首开始读取一个子块,另一个进程从该部分子数据的数据尾开始读取一个子块;
10.该进程执行如下步骤:
11.从该子块的至少两个位置分别选取一个数据段,判断该至少两个数据段的数据顺序是否一致;
12.若至少两个数据段的数据顺序一致,且与当前数据读取的方向相反,则改变该进程读取该子块的顺序,否则按照当前读取顺序,将该子块读取到内存,并执行排序;
13.将各进程输出的文件序列按照所述原始顺序进行整理,以获得排序结果。
14.可选的,从该子块的至少两个位置分别选取一个数据段包括:
15.随机从该子块的至少两个位置选取一个数据段,并基于该进程的数据读取方向读取该两个位置的数据段。
16.可选的,所选取的数据段与该子块的大小比例满足:1:90-1:110。
17.可选的,判断该至少两个数据段的数据顺序是否一致包括:
18.以该进程的数据读取方向为正方向,不执行排序,确定该数据段中与正方向相同顺序的数据占该数据段的比例;
19.在所述比例超过第一预设阈值的情况下,确定该数据段的数据顺序;
20.对比至少两个数据段数据顺序,以确定该至少两个数据段的数据顺序是否一致。
21.可选的,判断该至少两个数据段的数据顺序是否一致还包括:
22.在随机从该子块的多个位置选取数据段的情况下,判断具有相同数据顺序的数据段的占比是否超过第二预设阈值;
23.在超过第二预设阈值的情况下,确定多个数据段具有相应的数据顺序。
24.可选的,将各进程输出的文件序列按照所述原始顺序进行整理包括:
25.调用多个归并进程,通过该归并进程接收并处理该排序进程输出的文件序列,以获得相应的子文件;
26.整理各子文件,以获得所述排序文件。
27.可选的,将待排序的数据文件,按照所述原始顺序,所划分出的多部分子数据的大小相同。
28.本发明实施例还提出一种多进程负载均衡的数据库文件排序优化装置,包括处理器,所述处理器具有多个进程,所述处理器被配置为:
29.基于参与排序的进程的数量为各进程分配固定大小的排序内存;
30.根据排序内存的大小,按照待排序的数据文件的原始顺序,将待排序的数据文件,划分出多个子块,并将待排序的数据文件,按照所述原始顺序,划分为多部分子数据,每部分子数据包括至少两个子块;
31.为该部分子数据配置两个进程,且其中一个进程从该部分子数据的数据首开始读取一个子块,另一个进程从该部分子数据的数据尾开始读取一个子块;
32.该进程执行如下步骤:
33.从该子块的至少两个位置分别选取一个数据段,判断该至少两个数据段的数据顺序是否一致;
34.若至少两个数据段的数据顺序一致,且与当前数据读取的方向相反,则改变该进程读取该子块的顺序,否则按照当前读取顺序,将该子块读取到内存,并执行排序;
35.将各进程输出的文件序列按照所述原始顺序进行整理,以获得排序结果。
36.本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现本技术各实施例所述的多进程负载均衡的数据库文件排序优化方法的步骤。
37.本发明实施例通过将外部排序利用多个进程来执行,并且在排序过程中通过改变进程的数据读取顺序,能够保证每个进程的负载均衡,充分利用了当前的硬件资源,极大提高排序的效率。
38.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
39.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
40.图1为本实施例的排序方法的基本流程示意图;
41.图2为本实施例的排序方法的数据读取示例。
具体实施方式
42.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
43.本发明实施例提出本发明实施例提出一种多进程负载均衡的数据库文件排序优化方法,本技术的方法可以应用于处理器包括多个进程的场景,如图1所示,本技术的排序方法包括如下步骤:
44.在步骤s10中,基于参与排序的进程的数量为各进程分配固定大小的排序内存。例如当前共有6个进程执行排序,而总的可用内存为1.2g,则每个进程可以获得200m的内存,具体的可以根据进程的数量以及当前总的可用内存来确定各进程分配的内存。本示例中,将总的可用内存均分给各进程,从而能够保证各进程每次读取的数据量是相同的,保证各进程的负载均衡。
45.在步骤s20中,根据排序内存的大小,按照待排序的数据文件的原始顺序,将待排序的数据文件,划分出多个子块,并将待排序的数据文件,按照所述原始顺序,划分为多部分子数据,每部分子数据包括至少两个子块。例如图2所示,本示例中按照待排序的数据文件的原始顺序,将待排序的数据文件,划分出多个子块,根据前述示例,每个子块的大小可以是200m,由此每个进程可用读取完整的200m的数据,从而保证硬件资源的利用率。进一步的本示例中还将待排序的数据文件,按照所述原始顺序,划分为多部分子数据,例如图2中包括一个部分的子数据,该子数据包括多个子块,且子块的数量可以是偶数。可选的,将待排序的数据文件,按照所述原始顺序,所划分出的多部分子数据的大小相同,通过这样的数据划分能够保证每两个进程所分到的子数据是相同的,从而进一步提高各进程负载的均衡性。
46.在步骤s30中,为该部分子数据配置两个进程,且其中一个进程从该部分子数据的数据首开始读取一个子块,另一个进程从该部分子数据的数据尾开始读取一个子块。本示例中以图2为例,例如一共利用6个进程进行排序,该分数据利用进程1和进程2进行读取并排序,其中进程1和进程2的数据读取的方向是相对的。本示例中数据读取的方向相对是指进程1顺序读取,进程2倒序读取,例如总的子块数量为n,进程1顺序读取子块1,而进程2倒序读取子块i,i=n/3。
47.该进程执行如下步骤:
48.在步骤s40中,从该子块的至少两个位置分别选取一个数据段,判断该至少两个数据段的数据顺序是否一致;
49.在步骤s50中,若至少两个数据段的数据顺序一致,且与当前数据读取的方向相反,则改变该进程读取该子块的顺序,否则按照当前读取顺序,将该子块读取到内存,并执行排序。
50.本示例中的读取数据是具有方向性的,在不改变数据读取方向的情况下,进程1从子块1顺序读取是指:进程1从子块1的第1个字节一直读取到子块1的最后一个字节。进程2从子块i倒序读取是指:进程2从子块i的尾字节一直读到子块i的首字节,然后,进程2依此继续读取子块i-1。通过设计这样的数据载入方式能够有效避免并行读取可能带来的数据乱序问题。并且有利于根据数据的原始顺序排序后输出。本技术中进一步的,还判断了该子块的数据顺序,在该进程读取完整的该子块到内存之前,本示例中从该子块的至少两个位置分别选取一个数据段,判断该至少两个数据段的数据顺序是否一致。在数据库中数据的排列较多是有大致顺序的,但是具体的顺序是不定的。较为简单的示例,例如数据段{23,22,26,28,25,31,35},显然按照正序读取,处理效率会更高;而相反,则逆序处理效率会更高。本发明所指的排序可以是从小到大的正序排序,具体的排序方式也可以是其他设定的顺序。本示例中,通过从该子块选取至少两个数据段,从而能够判断出该子块的大致的数据方向,从而确定出该进程读取该子块的方向,极大提高处理效率,并且通过这样的方式,还解决了例如进程1正序读取而子块全是逆序所可能造成的与进程2的数据处理量的差距,从而使得每个进程能够处理的子块的量基本相同,提高排序的效率。
51.在步骤s60中,将各进程输出的文件序列按照所述原始顺序进行整理,以获得排序结果。
52.本发明实施例通过将外部排序利用多个进程来执行,并且在排序过程中通过改变进程的数据读取顺序,能够保证每个进程的负载均衡,充分利用了当前的硬件资源,极大提高排序的效率。
53.可选的,从该子块的至少两个位置分别选取一个数据段包括:
54.随机从该子块的至少两个位置选取一个数据段,并基于该进程的数据读取方向读取该两个位置的数据段。本示例中读取的两个位置的数据段的大小是相同的,例如子块的大小为200m,则读取2m的数据段进行预先处理,并且读取该数据段的顺序与该进程读取顺序的方向相同。通过这样的设计能够快速判断出各数据段的数据顺序。
55.可选的,所选取的数据段与该子块的大小比例满足:1:90-1:110。本示例中通过设置合适的数据段的比例能够确保快速判定出数据段的数据方向,并且具有很小的数据处理量,例如以200m的子块为例,若该子块为逆序子块,并且进程1按照正序读取并处理,相比本技术的方案的能够至少提高55%的数据处理效率。
56.可选的,判断该至少两个数据段的数据顺序是否一致包括:
57.以该进程的数据读取方向为正方向,不执行排序,确定该数据段中与正方向相同顺序的数据占该数据段的比例;
58.在所述比例超过第一预设阈值的情况下,确定该数据段的数据顺序。具体的例如第一预设阈值可以为60%、70%等。
59.对比至少两个数据段数据顺序,以确定该至少两个数据段的数据顺序是否一致。也即本示例中对于各进程初始读取的子块,可以随机从该子块中选取至少两个数据段,不执行排序并判断该子块的数据顺序(例如可以在至少两个数据段数据顺序相同的情况下,
确定该子块具有相应的数据顺序)。在一些场景中,例如在进程2处理完子块i之后,进入子块i-1,在确定子块i的数据顺序并执行数据读取后,可以以子块i所确定的数据顺序为基础,在子块i-1中减少选取的数据段的数量,例如从子块i-1中选取至少一个数据段,并与在先所确定的进程对子块i的数据读取正方向进行比对,若比对一致,则不改变对子块i-1的读取方向,若不一致,则从子块i-1中再选取至少一个数据段,重复前述判断该至少两个数据段的数据顺序是否一致的过程。通过这样的设计能够加速确定各子块的数据读取方向,进一步提高进程执行数据排序的效率。
60.可选的,判断该至少两个数据段的数据顺序是否一致还包括:
61.在随机从该子块的多个位置选取数据段的情况下,判断具有相同数据顺序的数据段的占比是否超过第二预设阈值;
62.在超过第二预设阈值的情况下,确定多个数据段具有相应的数据顺序。
63.具体的,本示例中例如在随机从该子块的五个位置选取数据段,可以根据每个数据段所确定的数据顺序,综合判断五个数据段的数据顺序,并在例如比例超过70%的情况下,确定多个数据段具有相应的数据顺序。
64.可选的,将各进程输出的文件序列按照所述原始顺序进行整理包括:
65.调用多个归并进程,通过该归并进程接收并处理该排序进程输出的文件序列,以获得相应的子文件;
66.整理各子文件,以获得所述排序文件。
67.具体的,本示例中例如可以通过与执行排序进程数量相同数量的归并进程,在一个排序进程处理完成一个子块后,通过相应的归并进程执行归并,最终并行输出排序文件。例如,对25g的数据进行排序,如果每个子块是200mb,则共会产生125个排序文件。为了最大化提高并行性,在这125个文件输出的过程中,归并进程可以同步执行归并处理。6个进程最终产生6个排序后的子文件,最后需要将这6个子文件进行归并排序,得到最终的排序文件。
68.综上,本技术提出了一种多进程负载均衡的数据库文件排序优化方法,通过优化进程对待排序文件的读取方式,以及根据数据子块中包含的数据段的数据顺序确定出对子块的数据读取方向,从而极大提高了负载均衡性以及排序的效率。
69.可选的,将待排序的数据文件,按照所述原始顺序,所划分出的多部分子数据的大小相同。也即每两个进程所分配的部分子数据
70.本发明实施例还提出一种多进程负载均衡的数据库文件排序优化装置,包括处理器,所述处理器具有多个进程,所述处理器被配置为:
71.基于参与排序的进程的数量为各进程分配固定大小的排序内存;
72.根据排序内存的大小,按照待排序的数据文件的原始顺序,将待排序的数据文件,划分出多个子块,并将待排序的数据文件,按照所述原始顺序,划分为多部分子数据,每部分子数据包括至少两个子块;
73.为该部分子数据配置两个进程,且其中一个进程从该部分子数据的数据首开始读取一个子块,另一个进程从该部分子数据的数据尾开始读取一个子块;
74.该进程执行如下步骤:
75.从该子块的至少两个位置分别选取一个数据段,判断该至少两个数据段的数据顺序是否一致;
76.若至少两个数据段的数据顺序一致,且与当前数据读取的方向相反,则改变该进程读取该子块的顺序,否则按照当前读取顺序,将该子块读取到内存,并执行排序;
77.将各进程输出的文件序列按照所述原始顺序进行整理,以获得排序结果。
78.本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现本技术各实施例所述的多进程负载均衡的数据库文件排序优化方法的步骤。
79.此外,尽管已经在本文中描述了示例性实施例,其范围包括任何和所有基于本公开的具有等同元件、修改、省略、组合(例如,各种实施例交叉的方案)、改编或改变的实施例。权利要求书中的元件将被基于权利要求中采用的语言宽泛地解释,并不限于在本说明书中或本技术的实施期间所描述的示例,其示例将被解释为非排他性的。因此,本说明书和示例旨在仅被认为是示例,真正的范围和精神由以下权利要求以及其等同物的全部范围所指示。
80.以上描述旨在是说明性的而不是限制性的。例如,上述示例(或其一个或更多方案)可以彼此组合使用。例如本领域普通技术人员在阅读上述描述时可以使用其它实施例。另外,在上述具体实施方式中,各种特征可以被分组在一起以简单化本公开。这不应解释为一种不要求保护的公开的特征对于任一权利要求是必要的意图。相反,本公开的主题可以少于特定的公开的实施例的全部特征。从而,以下权利要求书作为示例或实施例在此并入具体实施方式中,其中每个权利要求独立地作为单独的实施例,并且考虑这些实施例可以以各种组合或排列彼此组合。本发明的范围应参照所附权利要求以及这些权利要求赋权的等同形式的全部范围来确定。
81.以上实施例仅为本公开的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本公开的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献