用于数据集的可扩展排序的方法和设备与流程

文档序号:11288603阅读:226来源:国知局
用于数据集的可扩展排序的方法和设备与流程

相关申请案交叉申请

本发明要求2014年12月31日递交的发明名称为“用于数据集的可扩展排序的方法和设备(methodandapparatusforscalablesortingofadataset)”的美国申请案14/588,033的在先申请优先权,该在先申请的内容以全文引入的方式并入本文本中。

本发明的实施例一般涉及对数据进行排序,由此将数据分配到范围,对每个范围进行排序,从而形成整个排序数据集。



背景技术:

数据库是以电子方式存储在基于计算机的存储系统上的有组织的数据集合。使用由计算机软件组成的数据库管理系统来与数据库相互作用。数据库管理系统提供允许输入、存储、处理和检索信息的各种功能。通常对数据库执行的功能之一是排序操作。通常根据一个或多个准则对数据进行排序。例如,这可用于预期购房者根据价格(例如,最低到最高);位置(例如,距特定所需位置最近到最远);使用年限(例如,最新到最旧);大小(例如,最大到最小)等对标价出售的新住宅的数据库进行排序。

在过去,已经使用简单排序程序来执行排序操作。例如,mapreduce是用于支持经由分布式处理系统的大量计算节点对存储于文件系统中的大数据集进行可扩展分布式处理的流行软件程序。许多企业依赖mapreduce框架及其开源实现hadoop的及时分析作为对大量非结构化信息进行高效处理和高级分析的平台选择。

基本上,mapreduce包含映射和规约函数。映射函数将输入数据划分成较小项目并且将所述项目分布到工作节点。工作节点处理所述项目并返回应答到主节点。作为规约函数的部分,主节点收集应答并组合它们以提供输出。

更确切地说,映射阶段被分成映射任务并且规约阶段被分成规约任务。每个映射任务处理一般存在于分布式文件系统上的输入数据的逻辑拆分。映射任务读取数据,对每个记录应用用户定义的映射函数,并且缓存所得输出。在许多情况下,在将此数据写入到执行映射任务的机器的本地磁盘之前,针对不同规约任务对此数据进行排序和划分。

规约阶段由几个阶段构成:随机播放阶段、排序阶段和规约阶段。排序操作通常花费最长时间并且成为数据处理的瓶颈,特别是对于大数据集。考虑到要求进行排序的数据的量不断增加,这会产生问题。即使使用最新技术,利用mapreduce的大型服务器集群也会花费数小时对拍字节规模的数据进行排序。实际上,致力于提高处理能力而增添更多节点会导致收益递减,因为这会导致节点之间的过多数据传送,反过来又成为明显瓶颈。

因此,需要对存储于数据库中的大量数据进行排序、检索和更新的更高效且更快速方式。



技术实现要素:

公开一种用于对分布式数据库系统中的数据进行排序由此将所述数据选择性地发送到适当节点以进行排序的方法和设备。首先,将数据划分成值的范围。这些值可以是数值,或可以是具有预定顺序的字符(例如,字母),或其组合。所述范围是相连的。出于排序的目的,为分布式数据库系统的节点分配不同的值范围。接着将数据分布到具有所述数据属于的值范围的节点。一旦已经将数据集分配给各个节点,个别节点就对其数据执行排序。接着将节点执行的排序的结果写入到预定位置。因为每个范围内的值都经过排序并且范围是相连的,所以来自每个节点的结果可以写入到预定存储器位置,因此能在无须进行任何其它处理的情况下对整个数据集进行排序。

在一个实施例中,将范围存储为排序索引,排序索引可以用于促进后续排序操作。

附图说明

包含在并且构成本说明书的一部分的附图示出了本发明的各种实施例,并且与描述内容一起用于解释本发明的原则:

图1是在其上可以实践本发明的实施例的数据库系统的图。

图2是根据本发明的实施例的排序缓存处理的流程图。

图3是根据本发明的实施例的基于排序索引的并行排序及合并操作的流程图。

图4是根据本发明的实施例的排序索引树中的节点的结构图。

具体实施方式

现在将详细地给出一些实施例的参考。虽然结合可替代的实施例描述该主题,但应该理解它们不是旨在将请求保护的主题限制于这些实施例。相反,请求保护的主题旨在覆盖可以包括在由附加的权利要求书限定的请求保护的主题的精神和范围内的替代物、修改和等同物。

另外,在以下本发明的详细描述中,阐述了许多特定细节以便提供对请求保护主题的透彻理解。然而,所属领域的技术人员将认识到,可以在没有这些具体细节的情况下实践实施例。在其它实例中没有详细描述众所周知的方法、流程、部件和电路,以免对本请求保护的主题的各方面和特征造成不必要地模糊。该具体实施方式的一些部分按照程序、步骤、逻辑块、处理、以及对计算机存储器中的数据位的操作的其它符号表示来呈现。

这些描述和表示是数据处理领域技术人员向该领域其他技术人员有效传达工作实质内容使用的方法。将程序、计算机执行的步骤、逻辑块、过程等一般设想为首尾一致的步骤或指令序列,以产生期望的结果。这些步骤需要物理量的物理操控。

在本发明的一个实施例中,对数据集执行排序操作。本发明可以处理任何大小的数据集。将数据集划分成对应于处理待排序的数据的节点数量的多个范围。所述范围是相连的、不重叠的,并且它们覆盖数据中存储的值的整个集合。这些值可以是数值,或可以是具有预定顺序的字符(例如,字母),或其组合。出于排序的目的,为分布式数据库系统的节点分配值的不同范围。一般来说,选择设置两个范围之间的界限的值。接着将数据分布到具有所述数据正好属于的值范围的特定节点。一旦已经将数据集分配给各个节点,个别节点就对其自身的数据执行排序。接着将节点执行的排序的结果写入到预定位置。这自动地形成待排序的整个数据集而无须执行任何额外处理步骤。在一个实施例中,将范围存储为排序索引,排序索引可以用于促进后续排序操作。不必针对每一个排序操作再次计算它们,由此节省可贵的处理能力和时间。这些排序索引在数据集发生改变(例如,增添或删除数据)时更新。

现在描述实例以帮助理解本发明的一个实施例。在此实例中,出于清楚且简单说明本发明起见给出小数据集。在实际应用中,数据集相当大且广泛。假设任务是对以下数值的数据集从最小到最大进行排序:1、3、4、2、6和5。首先,选择分隔两个范围的值。在此实例中,选择值“3”。任何值3或更小的值属于第一范围,而大于3的任何值属于第二范围。换句话说,第一范围是1到3,且第二范围是4到6。一旦确立范围,排序处理就将个别数据值分配到其适当范围中。在此实例中,将值1分配到第一范围,因为其属于1到3之间。将下一个值3也分配到第一范围,因为其属于1到3之间。第三个值是4。将其分配到第二范围,因为其属于4到6之间。将第四个值2分配到第一范围。最后两个值6和5属于第二范围。因此,第一分区含有值1、3和2。第二分区含有值4、6和5。对这些分区中的每个分区执行排序操作。可以并行地(即,通过两个不同节点同时地)对这些较小分区执行排序操作。更确切地说,一个节点对分配到第一分区的值进行排序。另一个节点对分配到第二分区的值进行排序。在此实例中,一个节点对值1、3和2进行排序;另一个节点对值4、6和5进行排序。在完成排序操作后,第一分区含有值1、2和3,且第二分区含有值4、5和6。接着将这两个分区直接写入到相连存储器位置而无须执行任何后续操作。换句话说,将第一分区写入到存储器位置,且将第二分区写入到后续相邻的存储器位置。在实例中,通过将第一分区(1、2和3)写入到存储器,紧接着将第二分区(4、5和6)写入到相邻的存储器位置,对整个数据集进行排序,这形成整个排序数据集(1、2、3、4、5和6)。

在一个实施例中,首先将数据集划分成较小数据核或集群,且接着将其发送到节点来执行排序。一旦处理了所有较小数据核并将其发送到对应的节点,就将节点或列表的整个集合合并在一起。在此实例中,合并排序利用了将已经排序的列表合并成新排序列表的易用性。为了执行此排序/合并程序,针对节点或列表中的每个节点或列表执行比较的第一到第二菊花链函数。例如,通过比较每两个元素(即,1与2,接着3与4…)并且在第一列表项应出现在第二列表项之后的情况下调换每个项来对第一和第二列表项进行比较。指示处理器将两个所得列表中的每个合并为四个列表。接着处理器合并四个那些列表,并且重复此处理直到最后两个列表合并到最终排序列表中。此处理在大量列表的情况下能很好地扩展,因为最坏运行时间是o(nlogn)。此外,处理是灵活的且可应用于列表以及阵列。这一优点归因于相较随机访问所述处理需要顺序访问的特征。

参考图1,示出在其上可以实施本发明的实施例的分布式数据库系统。计算机网络101用于载送各个节点102到104之间的电子通信。计算机网络101可以是局域网、无线网络、互联网的一部分等。节点102到104可以是计算机系统,例如服务器、工作站、大型机,或基于云的计算机系统的部分或一些类型的虚拟化计算机系统。节点102到104耦合到专用、共享或虚拟化存储装置105到107。分布式数据库管理器站108用于访问、控制以及以另外的方式运行和维持分布式数据库系统。在一个实施例中,在ddbm108上执行排序处理。ddbm108分配用于节点102到104中的每个节点的值的范围。一个方面是分配范围以在节点之间相等地分布工作量。另一个方面是分配范围以在节点之间实现均衡工作量。接着根据这些范围将数据集分布到各个节点102到104。节点102到104对分布到其上的数据集的部分执行排序程序。接着将来自节点102到104中的每个节点的结果写入到预定存储器位置。由于所述范围有意设计为顺序的,因此来自节点102到104中的每个节点的结果也将是循序排序的,无须执行任何额外处理。

参考图2,示出根据一个实施例的处理流程。在此实施例中,基于对数据集进行排序所需的值来划分数据集。将排序数据发送到与排序数据相关联的每个节点数据。在初始阶段210,有必要找到排序索引。一旦确定排序索引,就在阶段220将数据分布到工作节点。在阶段230中,每个节点对供选择用数据进行排序和写入并将排序结果存储到索引缓存中。在阶段240中基于缓存的存储索引或更新索引执行排序。因此,每个节点具有针对每个值的范围(例如,数据库中的一列)。当完成排序时,可以将排序数据写入到文件系统中的预测位置中。先前提及的范围是排序索引,这些索引以树数据结构缓存用于进一步使用以节省时间。在其它实施例中,可以阵列结构或堆结构存储索引。此外,索引可以在数据集发生改变时(例如,当增添或删除数据时)改变。通过使用索引,将数据分布到节点将变得非常高效、快速且经济。应注意,可以仅通过主节点或通过多个节点进行完成索引的阶段210。假设存在n个需要排序的项和m个处理节点。

此外,在一个实施例中,如果在初始阶段210不存在索引缓存信息,则必需找到第(n/m)个、第(2n/m)个、…、第((m-1)n/m)个值。可以通过一个节点或多个节点来执行此过程,并且复杂度为o(mn)。随后,可以实施以二叉查找树结构存储这些索引的阶段。如果存在复制值,可以将这些副本增添到树节点。增添复制值有两种方式:第一种方式是基于排序索引分布所述值且接着这些节点可以并行地进行排序。

第二种方式是将基于数据的内容划分成单独的部分,并且每个节点处理一个部分。另外,节点基于排序索引交换值。由此,并行地处理排序及合并。

现参考图3,示出排序及合并操作。可以基于排序索引并行地处理排序及合并。例如,节点0(310)与节点1(320)交换数据,且节点1与节点2(330)交换数据,使得每个节点了解数据所属于的最终节点。在一个实施例中,最初基于排序索引分布值。随即,节点可以并行地进行排序。在另一实施例中,将数据划分成数据片,并且每个节点处理其数据片。节点后续基于排序索引交换值,使得并行地处理排序及合并。在这两个实施例中,每个节点了解数据所属于的最终节点。

参考图4,示出排序索引树中的节点的结构。每个节点具有以下信息:当前值401、当前值的数量402、小于当前值的数据的数量403、大于当前值的数据的数量404。另外,除最底部(叶子)节点之外,每个节点具有左侧子节点指针405和右侧子节点指针406。子节点是在节点树数据结构中从其依赖节点进一步向下的节点。当通过增添和/或删除值更新数据时,通过找到下一个更大或更小值来更新索引。此操作的复杂度是o(n)。为了减少此类更新的频率,可以使用“窗口”来延迟索引的更新,因此当执行排序的步骤或日期设置更新的数量超出窗口大小时发生更新。

现在描述实例来说明节点的功能。在此实例中,给出根节点的以下数据为:

未排序数据:1、5、2、5、7、8、4

当前值:5

此值的数量:2

更小值的数量:3(1、2和4)

更大值的数量:2(7和8)

因此,对于此特定节点的索引存储以下信息:5、2、3和2。

整体上,所提出的方法是基于以下观察结果:对于大数据,精确排序之前的粗略排序变得越来越重要,并且粗略排序信息可以重复使用,因为其使用较少存储器并且可以容易地存储。这允许以下两者:减少节点之间的数据移动,因为网络带宽仍是基于集群的应用中的主要瓶颈之一,并且其还减少磁盘和计算单元等慢速存储装置之间的数据移动。

此方法的优势是其加快排序速度,特别是对于重复排序。此外,缓存大小相对极小,使得存储成本非常小。因为排序操作例如在数据库操作中广泛使用,所以排序结果可以用作最终结果或其它操作的中间结果,例如连接两个表。一些其它应用包含但不限于以下。找到前n项函数/对其排序因去除几个步骤而经历性能改进。通过利用本发明的实施例,不需要处理整个数据集。具有硬件排序引擎的应用还因为本发明使频繁的数据传送最小化而经历性能改进。模糊逻辑/计算因范围的重要性而将是实施本发明的理想选择。本发明改进性能的又一应用是关于“连接”表与数据库中的未排序列。相对于两个关系r和s的简单的嵌套循环连接和经典散列连接算法通常不适合于大表,因为连接关系无法适应存储器。因此,通常使用分区散列连接算法,由此连接执行被分成单独部分。使用本发明排序索引,可以容易地分隔r和s,且接着在本地针对每个部分执行散列连接。另外,本发明的实施例可以应用于基于硬件的加速器例如,现代fpga可以在几个时钟周期对128数据进行排序,但是这会花费非常长的时间来合并大数据,从而大大降低高性能硬件的优势。

关于本发明的实施例的另一个优势或应用是不需要基于一个列对整个数据库进行排序。仅需要知道用以加速处理速度的范围。例如,在tpc-hq9中,需要散列连接两个表“partsupp”和“lineitem”,但是它们通常分别通过partkey和orderkey来排序。当数据库软件无法在缓存/存储器中处理或存储一个表时,需要逐数据片地散列连接。复杂度是o(mn),其中m是partsupp中的数据片的数量并且n是lineitem中的数据片的数量。如果在lineitem中存在针对partkey的排序缓存信息,那么排序可以是基于partkey的lineitem。根据本发明的实施例,通过利用散列连接与表partsupp,复杂度变为o(m+n)。

综上所述,因为许多操作需要排序的列,所以排序在数据库操作中极为重要。本发明的实施例提供更容易且更高效的处理来压缩数据并改进缓存命中率以及提高更快的连接操作。例如,c-store数据库是面向列的dbms,并且可以集中于排序。可以按任何标准对排序数据进行排序。然而,这通常需要多个复本。此排序是一些数据库应用中的主要任务。本发明的排序缓存树(sortcachetree,sct)可以加速这些应用。

本发明的另一个优势是关于数据合并。可以容易地将几个排序缓存树(sct)合并在一起。例如,可以在一个节点内合并两个节点,其中每个节点具有4分区sct。还可以在单个节点中使用sct。对于单个节点,由于磁盘i/o操作更少,因此sct方法比现有方法更快。例如,假定节点具有1g存储器和磁盘上的8g未排序数据,典型现有技术排序合并方法对比本发明的比较如下:

排序-合并:

1.排序:(读盘1g+排序1g+写盘1g)×8

2.合并成2g:(读盘2g+合并2g+写盘2g)×4

3.合并成4g:(读盘4g+合并4g+写盘4g)×2

4.合并成8g:读盘8g+合并8g+写盘8g

总计:读盘32g+排序8g+合并24g+写盘32g

在本发明的实施例中:

1.分区:读盘8g+写盘8g

2.排序:(读盘1g+排序1g+写盘1g)×8

总计:读盘16g+排序8g+写盘16g

相比而言,现有技术需要96g,而本发明的实施例仅需要40g。效率上存在超过50%改进。

在一些实施例中,排序索引的数据结构可以是二叉树或与三态内容寻址存储器(ternarycontentaddressablememory,tcam)类似的特定硬件,由此输入键并行地与许多范围形成对比。

根据本发明的实施例如此处所述。虽然本发明已经在特定实施例中进行了描述,但是应理解,本发明不应该被解释为被这些实施例限制,而是根据所附权利要求书进行解释。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1