CN102043857B - 最近邻查询方法及系统 - Google Patents
最近邻查询方法及系统 Download PDFInfo
- Publication number
- CN102043857B CN102043857B CN2010106077418A CN201010607741A CN102043857B CN 102043857 B CN102043857 B CN 102043857B CN 2010106077418 A CN2010106077418 A CN 2010106077418A CN 201010607741 A CN201010607741 A CN 201010607741A CN 102043857 B CN102043857 B CN 102043857B
- Authority
- CN
- China
- Prior art keywords
- searched
- data set
- nearest neighbor
- result
- distance
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 76
- 238000004364 calculation method Methods 0.000 claims abstract description 78
- 239000012634 fragment Substances 0.000 claims description 111
- 238000013467 fragmentation Methods 0.000 claims description 6
- 238000006062 fragmentation reaction Methods 0.000 claims description 6
- 238000012163 sequencing technique Methods 0.000 claims description 5
- 238000004891 communication Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 12
- 230000002457 bidirectional effect Effects 0.000 description 10
- 230000011218 segmentation Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 5
- 239000003638 chemical reducing agent Substances 0.000 description 4
- 238000005520 cutting process Methods 0.000 description 3
- 101150064138 MAP1 gene Proteins 0.000 description 2
- 101100075995 Schizosaccharomyces pombe (strain 972 / ATCC 24843) fma2 gene Proteins 0.000 description 2
- 101100456045 Schizosaccharomyces pombe (strain 972 / ATCC 24843) map3 gene Proteins 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种最近邻查询方法,用于为基础数据集中的至少一个待查找对象在参考数据集中查找与所述待查找对象距离最近的对象;该方法包括:对基础数据集进行分割,得到多个分片;对参考数据集进行分割,得到多个分片;在与所述待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象;根据边界判定条件将计算结果分为确定结果或待定结果;计算待定结果中的待查找对象的最近邻;将确定结果与待定结果中的待查找对象的最近邻进行合并,得到所述至少一个待查找对象的最近邻。本发明在实现最近邻查询时考虑到了节点间的通信,避免了一些对象的最近邻在不同分片中时容易发生的误查询现象。
Description
技术领域
本发明涉及并行计算领域,特别涉及一种最近邻查询方法及系统。
背景技术
随着高性能应用和运算需求的迅猛发展,单台高性能计算机已经不能解决一些超大规模应用问题,如空间连接、多个数据集的最近邻查询(简称最近邻查询)等,这就需要将多台计算机资源联合起来,构成计算机集群,共同解决大规模应用问题。并行编码技术是计算机集群应用中的一种关键技术,它可以有效地开发并行计算机尤其是计算机集群的计算能力,是硬件和软件之间的桥梁,是并行计算的底层实现和高层抽象的界面。
最近邻查询(ALL-Nearest-Neighbor Query,简记为ANN)是计算机集群的一种典型应用,它是指对于给定基础数据集R中的所有对象,在参考数据集S中寻找距离最近的对象。全局最近邻查询不满足交换性,即ANN(R,S)≠ANN(S,R)。实现最近邻查询的最简单方式是对集合R中的每个对象,在集合S中执行最近距离查询,即在集合S中查找与集合R中的每一对象距离最近的对象。
现有技术中存在用于执行最近邻查询的相关方法,当前一种较为典型的方法是利用MapReduce来实现最近邻查询,特别是对大规模海量数据的最近邻查询。所述的MapReduce是Google公司提出的一种并行编程模型和分布式计算框架,它主要用于基于大规模集群的数据密集型应用。MapReduce提供了两个用户定义接口:map和reduce,map接口实际上是一个映射函数,它用来把一组键值对映射成一组新的键值对;reduce接口实质是一个化简函数,用来保证所有映射的键值对中的每一个共享相同的键组。
在利用MapReduce来实现大规模海量数据的最近邻查询时,首先将海量数据的计算任务分为K个子任务,然后分配到各个节点(计算机)上进行处理,最后综合各个节点的计算结果得到最终的最近邻查询结果。但在执行过程中会遇到多种问题,主要分为以下几类:
1、MapReduce需要对原始数据进行切割,然后才能将切割得到的多个分片数据分配到各个节点上。在这一切割过程中,容易产生每个分片中的数据不均衡,进而导致各个节点上的负载不均衡。例如,在一种常见的切割方法中,对空间类的原始数据按照坐标值进行切分,使得所得到的各个分片的面积基本相同,但由于切分形成的不同分片中的数据密度大小不一,因此各个分片中的数据不均衡,这就造成了对应节点上的负载的不均衡。虽然在现有技术中也存在先对原始数据做排序,然后再切分的方法来保证切分所得到的各个分片中的数据的均衡性,但如果原始数据是海量数据,这种方法显然又会有执行效率低的问题。
2、将海量数据分成K份并分配给不同的节点后,各个节点之间是相互独立的,节点间缺乏通信。但是在最近邻查询中,发生下列情况的可能性很大:一个点A的最近邻原本是B,但由于之前所提到的切割操作,A、B被切分到不同的分片中。从理论上说,A做最近邻查询的结果应该是B,但由于它们被分配到不同的分片,且用于处理这些分片的节点间缺乏通信,这会使得实际结果与理论上的正确结果存在偏差。这明显会降低最近邻查询的正确率。
3、对各个分片中的数据做最近邻查询时,MapReduce通常会采用全局扫描的方式,即一个分片中的对象会依次计算与该分片中其它数据集的对象间的距离,取与其距离最小的其它数据集的对象作为最近邻,这在性能上有很大劣势。
发明内容
本发明的目的在于克服现有的最近邻查询方法节点负载不均衡,正确率以及执行效率较低的缺陷,从而提供一种高效、准确的最近邻查询方法。
为了实现上述目的,本发明提供了一种最近邻查询方法,用于为基础数据集中的至少一个待查找对象在参考数据集中查找与所述待查找对象距离最近的对象;该方法包括:
步骤101)、对基础数据集进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集的对象;对参考数据集进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集的对象;
步骤102)、在与所述待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象;
步骤103)、根据边界判定条件将步骤102)的计算结果分为确定结果或待定结果;所述边界判定条件为某一待查找对象到分片边界的距离是否小于该待查找对象与步骤102)计算得到的距离最近的对象间的距离,若大于,该待查找对象在步骤102)中的计算结果为确定结果,执行步骤105),否则,该待查找对象在步骤102)中的计算结果为待定结果,执行下一步;
步骤104)、计算所述的待定结果中的待查找对象的最近邻;其中,在待查找对象的可能的最终最近邻所在的参考数据集分片中,计算待查找对象与可能的最终最近邻之间的距离,并将计算结果与待查找对象与步骤102)计算得到的距离最近的对象间的距离进行比较,取最小距离值所对应的参考数据集中的对象作为所述待查找对象的最近邻;
步骤105)、将步骤103)所得到的确定结果与步骤104)所得到的待定结果中的待查找对象的最近邻进行合并,得到所述至少一个待查找对象的最近邻。
上述技术方案中,在所述的步骤101)中,对所述基础数据集或参考数据集进行分割包括:
步骤101-1)、将所述基础数据集或参考数据集划分成均等的小块;所述小块的数目至少多于所要得到的分片的数目;
步骤101-2)、采用空间填充曲线为步骤101-1)所得到的小块编码并排序;
步骤101-3)、采用轮询的方式将步骤101-2)所得到的小块合并成分片。
上述技术方案中,所述的空间填充曲线为Z曲线或者Hilbert曲线中的一种。
上述技术方案中,所述的步骤102)包括:
步骤102-1)、为与待查找对象所在的基础数据集分片相对应的参考数据集分片内的所有对象按照扫描方向排序,并沿着所述扫描方向的垂直方向设立扫描轴;
步骤102-2)、以待查找对象在所述参考数据集分片内的对应位置为中心,将扫描轴向右扫描,计算扫描到的对象与待查找对象间的距离,选取被扫描到的距离最小的对象作为所述待查找对象的右边最近邻;
步骤102-3)、以待查找对象在所述参考数据集分片内的对应位置为中心,将扫描轴向左扫描,计算扫描到的对象与待查找对象间的距离,选取被扫描到的距离最小的对象作为所述待查找对象的左边最近邻;
步骤102-4)、比较步骤102-2)和步骤102-3)的计算结果,选取距离更小的对象作为与所述待查找对象距离最近的对象。
上述技术方案中,在所述的步骤102-2)之前还包括:
在与待查找对象所在的基础数据集分片相对应的参考数据集分片内,沿着与所述扫描方向平行的方向将所述参考数据集分片分成多个条状区域;在所述的步骤102-2)和步骤102-3)中,只在待查找对象在所述参考数据集分片内的对应位置所位于的条状区域内做扫描操作。
本发明还提供了一种最近邻查询系统,包括分片模块、第一计算模块、存储模块、待定模块、第二计算模块以及合并模块;其中,
所述分片模块对基础数据集进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集的对象;对参考数据集进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集的对象;
所述第一计算模块在与待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象,然后根据边界判定条件将该计算结果分为确定结果或待定结果;所述边界判定条件为待查找对象到分片边界的距离是否小于该待查找对象与计算得到的距离最近的对象间的距离,若大于,该计算结果为确定结果,保存到所述存储模块,否则,该计算结果为待定结果,保存到所述的待定模块中;
所述的第二计算模块用于计算所述的待定结果中的待查找对象的最近邻;其中,在待查找对象的可能的最终最近邻所在的参考数据集分片中,计算待查找对象与可能的最终最近邻之间的距离,并将计算结果与待查找对象与第一计算模块计算得到的距离最近的对象间的距离进行比较,取最小距离值所对应的参考数据集中的对象作为所述待查找对象的最近邻;
所述的合并模块将存储模块所保存的确定结果与所述第二计算模块计算出的待定结果中的待查找对象的最近邻进行合并,得到所述至少一个待查找对象的最近邻。
本发明又提供了一种在MapReduce中实现所述的最近邻查询方法的方法,包括:
步骤201)、由第一MapReduce任务中的map对基础数据集进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集的对象;对参考数据集进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集的对象;
步骤202)、由第一个MapReduce任务中的reduce在与待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象,然后根据边界判定条件判定该计算结果为确定结果或待定结果;所述边界判定条件为待查找对象到分片边界的距离是否小于该待查找对象与计算得到的距离最近的对象间的距离,若大于,该计算结果为为确定结果,加以保存,否则为待定结果,执行下一步;
步骤203)、由第二个MapReduce任务中的map在待定结果中的待查找对象的可能的最终最近邻所在的参考数据集分片中,计算待定结果中的待查找对象与可能的最终最近邻之间的距离;
步骤204)、由第二个MapReduce任务中的reduce将前一步骤的计算结果与待定结果中的待查找对象与计算得到的距离最近的对象间的距离进行比较,取最小距离值所对应的参考数据集中的对象作为所述待定结果中的待查找对象的最近邻,最后将所述的确定结果与待定结果中的待查找对象的最近邻进行合并,得到所有待查找对象的最近邻。
本发明又提供了一种在MapReduce中实现所述的最近邻查询方法的方法,包括:
步骤301)、由所述MapReduce任务中的map对基础数据集进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集的对象;对参考数据集进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集的对象;然后在与待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象,然后根据边界判定条件判定该计算结果为确定结果或待定结果;所述边界判定条件为待查找对象到分片边界的距离是否小于该待查找对象与计算得到的距离最近的对象间的距离,若大于,该计算结果为确定结果,加以保存,否则为待定结果,执行下一步;
步骤302)、由所述MapReduce任务中的reduce在待定结果中的待查找对象的可能的最终最近邻所在的参考数据集分片中,计算待定结果中的待查找对象与可能的最终最近邻之间的距离;并将计算结果与待定结果中的待查找对象与计算得到的距离最近的对象间的距离进行比较,取最小距离值所对应的参考数据集中的对象作为所述待定结果中的待查找对象的最近邻;最后将所述的确定结果与待定结果中的待查找对象的最近邻进行合并,得到所有待查找对象的最近邻。
本发明的优点在于:
1、本发明在实现最近邻查询时考虑到了节点间的通信,避免了一些对象的最近邻在不同分片中时容易发生的误查询现象。
2、本发明方法在做数据切分时,利用诸如Z曲线的空间填充曲线对原始数据进行分片,在保证空间局部性的同时,也实现了负载平衡。
3、本发明方法在扫描每个分片时,利用条带双向扫描算法加速了计算过程。
附图说明
图1为一个实施例中的最近邻查询方法的流程图;
图2为在一个实施例中利用Z曲线对原始数据进行分割的示意图;
图3为在一个实施例中利用Z曲线对原始数据进行分割的流程图;
图4为在一个实施例中利用双向扫描法查找可能的最近邻的示意图;
图5为在一个实施例中利用双向扫描法查找可能的最近邻的流程图;
图6为在一个示范性的实例中为基础数据集中的对象r2查找最近邻的示意图;
图7为在一个实施例中利用两个MapReduce任务实现最近邻查询方法的示意图;
图8为在一个实施例中利用两个MapReduce任务实现最近邻查询方法中第一个MapReduce任务的工作流程图;
图9为在一个实施例中利用两个MapReduce任务实现最近邻查询方法中第二个MapReduce任务的工作流程图;
图10为在一个实施例中利用一个MapReduce任务实现最近邻查询方法的示意图;
图11为在一个实施例中利用一个MapReduce任务实现最近邻查询方法的流程图;
图12为一个实施例中最近邻查询系统的示意图。
具体实施方式
下面结合附图和具体实施方式对本发明进行说明。
在最近邻查询的过程中,有两个数据集,分别记为基础数据集R和参考数据集S,集合R和S中各自包括有多个对象。为了便于理解,在本实施例中假设基础数据集R为海淀区的地铁出入口,参考数据集为当前海淀区内可出租的房屋,那么最近邻查询ANN(R,S)所代表的含义就是要找出海淀区内与各个地铁出入口最近的可出租房屋。
下面对最近邻查询方法进行说明。
参考图1,最近邻查询的过程主要包含以下步骤:
步骤1、输入数据集R和S,对基础数据集R进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集R的对象;对参考数据集S进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集S的对象。
步骤2、在与待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象。
步骤3、根据边界判定条件将步骤2得到的计算结果分为确定结果与待定结果,并分别加以保存;所述的边界判定条件为待查找对象到分片边界的距离是否小于该待查找对象与当前计算得到的最近邻之间的距离(即步骤2的计算结果),若小于,则该待查找对象为待定对象,将待定对象、该对象与当前最近邻的距离、可能的最终最近邻所在的分片的信息存入待定结果中,否则该待查找对象的最近邻确定。
步骤4、以已分片的数据集S作为输入数据源,在可能的最终最近邻所在的分片中,计算待定结果中的待定对象与可能的最终最近邻之间的距离;
步骤5、将步骤4计算得到的结果与步骤3计算得到的结果进行比较,取最小值所对应的数据集S中的对象作为数据集R中待定对象的最近邻;
步骤6、将步骤3计算得到的确定结果与步骤5计算得到的结果加以合并,得到数据集R的所有对象的最近邻查询的最终结果。
以上是对本发明的最近邻查询方法的主要实现步骤的描述,下面对这些步骤中的一些具体实现分别予以说明。
在步骤1中,需要将包含数据集R和数据集S的所有对象的原始数据进行分割,得到多个分片。现有的数据分割方法都可应用于此,如在背景技术中已经提到的按照坐标值分割,或者先排序后分割的方法,但正如背景技术中所提到的那样,这些数据分割方法或者会造成节点负载的不平衡,或者计算量太大、效率低,因此作为一种优选实现方式,在本发明的一个实施例中采用空间填充曲线的方法完成分割操作。所述的空间填充曲线有多种形式,如Z曲线或者Hilbert曲线,这些曲线都能应用于本发明。
在本发明的一个实施例中,采用了Z曲线来做分割,如图2所示,最初的时候有一原始数据,需要将该原始数据分成四个分片(分片的具体数目通常与计算机集群中用于并行计算的节点的数目有关),下面结合图3对利用Z曲线做分割的过程进行说明。
步骤11、将原始数据按照空间关系划分成均等的小块。如图2中,原始数据被分成了均等的16个小块。所分小块的个数也可根据需要酌情变化,但至少应该多于所要得到的分片的数目。
步骤12、将每个小块按照对应的Z曲线值编码并排序。在图2中,Z曲线的行进方向是从左下方到右上方,根据Z曲线行进过程中依次通过的小块的顺序为这些小块编码,如0、1、2、3、......、15。
步骤13、用轮询的方式将小块合并成分片。从前一步骤根据Z曲线的编码结果可以看到,编码值相近的小块在地理位置上也较为接近;根据数据空间局部性原理,在一个局部地区内,相邻区域的特征是相似的,因此,将相邻区域分配到不同的分片中,使得最后所生成的分片在数据上基本平衡。仍然以图2为例,轮询的结果是将编号为0,4,8,12的小块划分到第一分片,编号为1,5,9,13的小块划分到第二分片,编号为2,6,10,14划分到第三分片,编号为3,7,11,15划分到第四分片。最终完成了原始数据分配到四个分片中的操作。
在步骤2中,要计算每个分片内R所有对象相对于S的最近邻。显而易见,这一步骤的实现是一个多次重复计算的过程,当集合R、S中的对象的数目是海量时,即使已经做了分片,要实现这一步骤所要花费的时间和资源依然是相当可观的。因此,虽然全局扫描的方式依然可以用于本发明,但作为一种较佳实现方式,在本发明的一个实施例中可以采用双向扫描方法来替代全局扫描方法。下面结合图4和图5,对所采用的双向扫描方法进行说明。
步骤21、为当前分片内的所有对象按照扫描方向排序,然后计算当前待查找对象的右边最近邻。
在图4所示实例中,扫描方向为X轴,当前待查找对象是R2,在R2的左边界设定一条扫描轴(如图4中垂直方向的竖轴),在查找R2的右边最近邻时,首先将所述的扫描轴向右扫描,先会遇到对象S4,计算R2与S4之间的距离,由于当前只有S4一个对象,所以先保存R2与S4之间的距离,并将它们的距离值作为当前的最近邻距离值。接着扫描轴继续向右扫描,由于R3与R2同属于集合R,不是最近邻查询的候选结果,因此可忽略对象R3。扫描轴再向右扫描,此时会遇到对象S5,计算R2与S5之间的距离,将它们的距离与之前计算得到的R2与S4之间的距离进行比较,哪个距离值小,哪个对象就是R2的右边最近邻。
之前提到,R2与S4之间的距离值作为当前的最近邻距离值,因此在扫描到S4以后的后续扫描过程中,也可以将扫描轴向右扫描的扫描距离与这一最近邻距离值做比较,如果扫描距离已经大于该最近邻距离值,那么之前扫描到的对象S4就是R2的右边最近邻,没有必要一定要扫描到集合S中的下一个对象。
步骤22、计算当前待查找对象的左边最近邻。
对当前待查找对象的左边最近邻的扫描与之前提到的右边最近邻的扫描相类似,只是扫描方向做了改变。
步骤23、将待查找对象的左边最近邻的距离值与右边最近邻的距离值进行比较,选取距离小的对象作为待查找对象的最近邻。
在上述的步骤22中,也可以直接利用步骤21获得的右边最近邻的距离值作为裁剪条件,如果在左边有距离值小于该裁剪条件的对象,那么该对象就是待查找对象的最近邻,否则,步骤21得到的右边最近邻就是待查找对象的最近邻。
与全局扫描方法相比,双向扫描方法在扫描过程中以待查找对象为中心,在左右两边分别扫描数量有限的若干个对象即可,能够极大地提高扫描速度。
在上述双向扫描方法的基础上,作为一种更佳的实现方式,还可以添加分条扫描的操作。出于描述方便的考虑,图4所示的例子中,数据集R和S中的对象的个数极为有限,但在实际应用中,扫描轴在一次扫描的过程中所能扫描到的对象的个数很可能会非常多(如沿图4垂直向上、垂直向下两个方向进行扩展,可能会有更多的对象),如果待查找对象与这些被扫描到的对象间的距离都要计算的话,也是个不小的开销。因此,可以在与扫描轴垂直的方向上划分若干个条状区域,每次操作只扫描并计算待查找对象与该对象所在条状区域内的其他不同数据源对象间的距离(其它条状区域内的对象与待查找对象的距离太大,不可能是待查找对象的最近邻),并根据计算结果得到待查找对象的最近邻。由于上述方法将双向扫描与分条扫描做了结合,因此也被称为基于分条的双向扫描方法。需要说明的是,在图4以及后续的图6中,为了便于理解,将数据集R和S中对应分片的对象放置在一个图中,在实际操作中,并不存在这样的图形。
无论是上述的双向扫描方法还是基于分条的双向扫描方法,都能够加快查找最近邻的速度。
在步骤4中,需要重新计算待定结果中的对象与可能的最近邻之间的距离,并将计算结果与之前计算得到的结果进行比较,从而知道待定结果的最近邻。以图6为例,要查找分片t1中的对象r2的最近邻,由之前的步骤2计算出对象r2在分片t1中的最近邻为s1,但由于r2与分片t1与分片t3的边界较近,因此该计算结果属于待定。在步骤4中,需要重新计算r2与其它分片中的不同数据集对象间的距离,如要计算r2与s5、s6、s7之间的距离,将计算结果与原有的结果进行比较,可以认定对象r2的最近邻为s5。
以上是对本发明的最近邻查询方法以及相关步骤的描述,下面以之前提到的MapReduce为例,对该方法如何在MapReduce上实现加以说明。
在之前提到的最近邻查询方法的6个步骤可以分为两个阶段,第一阶段为步骤1-步骤3,该阶段所能得到的结果是最近邻查询的确定结果与待定结果,第二阶段为步骤4-步骤6,该阶段对待定结果重新做了计算,并将第一阶段生成的确定结果与第二阶段的计算结果合并,得到最近邻查询的最后结果。在MapReduce上实现最近邻查询也满足这一流程,但在具体实现时可以有两种实现方式。第一种方式针对原始数据集没有排序的情况,该方式中可以使用两个MapReduce任务来完成最近邻查询计算。第二种方式针对原始数据已经是按照空间位置划分为若干个子数据集的情况,该方式可以只用一个MapReduce任务来完成最近邻查询计算。
下面首先以两个MapReduce任务来描述基于MapReduce的最近邻查询。
总体来说,两个MapReduce任务中的第一个对应第一阶段,第二个对应第二个阶段。具体的说,如图7所示,第一个MapReduce任务中的map接口Map71用于实现对数据集做分割操作的步骤1,第一个MapReduce任务中的reduce接口Reduce22用于实现对分片内的对象计算最近邻的步骤2;第一阶段所得到的确定结果由存储接口Output73存储,第一阶段所得到的待定对象以及该对象当前最近邻和可能的最终最近邻所在的分片保存到Pending File74中。第二个MapReduce任务中的map接口Map75用于实现计算可能的最终最近邻所在分片中的对象到待定对象的距离的步骤4,第二个MapReduce任务中的reduce接口Reduce76用于实现找出待定对象的最近邻以及生成数据集R的所有最近邻的步骤5和步骤6。
在一个具体的实例中,计算机集群上运行两个MapReduce任务,集群上有7个节点,其中4个mapper,3个reducer。为了叙述的方便,这里将mapper分别定义为map1、map2、map3、map4,reducer分别定义为reduce1、reduce2、reduce3。下面对该实例中的最近邻查询过程进行说明。
如图8所示,第一个MapReduce任务所要执行的操作如下。
步骤801、map1、map2、map3、map4读取原始数据集R和S。
步骤802、map任务采用z曲线分片策略,将原始数据按照reduce的个数(在本例中为3)分成3份,并且保证各份的数据量均衡。
步骤803、reduce任务根据map任务划分的结果去取已经分好片的数据。
步骤804、reduce任务计算在本分片内每个R数据集对象与S数据集中的最近邻。
步骤805、根据边界条件判断该对象是否为“待定对象”。
“待定对象”是指与当前最近邻之间的距离大于该对象到分片边界的距离的对象。
步骤806、如果是为“待定对象”,就将“待定对象”,待定对象当前最近邻,待定对象可能最近邻所在的分片编号这一元组放入待定文件,等待第二次MapReduce处理。
本步骤中所提到的待定文件是一个专门的数据结构,待定文件的文件名为待定分片号,保存的格式为<key=空间对象,value=疑似最近邻及最近距离>。待定空间对象将被保存到与其距离比其当前疑似最近邻更近的所有分片的待定文件中。
步骤807、如果不是“待定对象”,就说明找到了当前对象的最近邻,将“当前对象,对象的最近邻”作为结果输出。
此时,第一个MapReduce任务结束,已经得到了一部分输出结果和一部分“待定对象”,此时需要对“待定对象”进行进一步计算,引入了第二个MapReduce。如图9所示,第二个MapReduce任务所要执行的步骤如下。
步骤901、map任务读取在第一个MapReduce任务中已分片的数据集S。
步骤902、map任务会将对应于本分片的“待定对象”以及该对象的待定最近邻读入内存。
步骤903、map任务计算该对象在当前分片内的最近邻。
步骤904、与原有待定最近邻进行比较,将较小者设为待定最近邻。
步骤905、同一个“待定对象”所有可能的待定最近邻传给同一个reduce任务。
步骤906、reduce任务将同一个“待定对象”的所有待定最近邻排序,取距离最小者为该对象的最终最近邻。
步骤907、至此,已经找到该对象的最近邻,输出“该对象,对象的最近邻”为最终结果。
以上是对用两个MapReduce任务实现最近邻查询的说明,下面对用一个MapReduce任务实现最近邻查询进行说明。
一个MapReduce任务针对数据集R和S中已经排好序的数据。其中的Map接口对应第一阶段,Reduce接口对应第二阶段。
第一阶段Map的输入数据源是数据集R和S,数据集已经是预先排好序了的,该阶段将使用范围划分方法对数据集R和S进行分割。Map任务计算各分片中R内所有空间对象的最近邻。然后根据边界判定条件,将空间对象输出为两种类型的文件:一部分最终结果和待定对象。最终结果包含在与本Map任务发现的最近邻的信息。待定对象通过MapReduce的shuffle阶段传递给Reduce任务。也就是说,图10中的Map1002要完成前述的步骤1-3,可以直接计算出最近邻的对象由Map1002直接输出到存储模块Output1003,无法计算出最近邻的对象则通过shuffle传给Reduce任务进行进一步处理。
第二阶段Reduce任务中,以已分片的数据集S作为Reduce任务输入数据源,每个S的分片对应一个Reduce任务。Reduce将会把对应于本任务的待定文件中的待定空间对象及其待定最近邻读入内存,然后计算待定空间对象在本桶内的最近邻,并与原有的待定最近邻进行比较,其结果以待定空间对象的ID作为键,其当前的待定最近邻作为值,从而得到该空间对象的确定最近邻。综合Map任务和Reduce任务的输出结果可以得到最近邻查询(R,S)。也就是说,图10中的Reduce1004要完成前述的步骤4-6,并将计算结果输出到存储模块Output1003。
基于上述用一个MapReduce任务实现最近邻查询的思想,在一个实例中,计算机集群上运行一个MapReduce任务,集群上有7个节点,其中4个mapper,3个reducer。为了叙述的方便,这里将mapper分别定义为map5、map6、map7、map8,reducer分别定义为reduce4、reduce5、reduce6。如图11所示,MapReduce任务的执行步骤如下:
步骤1101、map5,map6,map7,map8读取原始数据集R和S。map任务采用范围划分,将原始数据按照map的个数(在本例中为3)分成3份,并且保证各份的数据量均衡。
步骤1102、map任务计算在本分片内每个R数据集对象与S数据集中的最近邻。
步骤1103、根据边界条件判断该对象是否为“待定对象”。
步骤1105、如果是为“待定对象”,就将“待定对象,待定对象当前最近邻,待定对象可能最近邻所在的分片编号”这一元组通过shuffle阶段传给Reduce,等待Reduce的进一步处理。
步骤1106、如果不是“待定对象”,就说明找到了当前对象的最近邻,将“当前对象,对象的最近邻”作为结果输出。
步骤1107、Reduce任务处理这些待定对象,找出该待定对象的最终最近邻。
需要特别指出的是,本发明的方法并不局限于上述的MapReduce模型,现有技术中的其他可能模型同样适用于本发明的最近邻查询方法。
本发明还提供了一种用于实现最近邻查询的系统,如图12所示,该系统包括分片模块11、第一计算模块12、存储模块13、待定模块14、第二计算模块15以及合并模块16;其中,
分片模块11用于输入数据集R和S,并对数据集R和S进行分割,得到多个分片;
第一计算模块12用于计算每个分片内R所有空间对象相对于S的最近邻,并根据边界判定条件将计算结果分为确定结果与待定结果,将确定结果保存到存储模块13,将待定结果保存到待定模块14中;所述待定结果包括待定对象、该对象与当前最近邻的距离、可能的最终最近邻所在的分片的信息;
第二计算模块15用于计算待定结果中的待定对象与可能的最近邻之间的距离;
合并模块16用于将第二计算模块15计算得到的待定结果中的待定对象与可能的最近邻之间的距离与第一计算模块12计算得到的对象与当前最近邻的距离进行比较,选取距离较小的值所对应的最近邻作为最终结果并存储到存储模块13中。
本发明的优点在于:
1、本发明在实现最近邻查询时考虑到了节点间的通信,避免了一些对象的最近邻在不同分片中时容易发生的误查询现象。
2、本发明方法在做数据切分时,利用诸如Z曲线的空间填充曲线对原始数据进行分片,在保证空间局部性的同时,也实现了负载平衡。
3、本发明方法在扫描每个分片时,利用条带双向扫描算法加速了计算过程。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (8)
1.一种最近邻查询方法,用于为基础数据集中的至少一个待查找对象在参考数据集中查找与所述待查找对象距离最近的对象;该方法包括:
步骤101)、对基础数据集进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集的对象;对参考数据集进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集的对象;
步骤102)、在与所述待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象;
步骤103)、根据边界判定条件将步骤102)的计算结果分为确定结果或待定结果;所述边界判定条件为某一待查找对象到待查找对象所在的基础数据集分片相对应的参考数据集分片的边界的距离是否小于该待查找对象与步骤102)计算得到的距离最近的对象间的距离,若大于,该待查找对象在步骤102)中的计算结果为确定结果,执行步骤105),否则,该待查找对象在步骤102)中的计算结果为待定结果,执行下一步;
步骤104)、计算所述的待定结果中的待查找对象的最近邻;其中,在除待查找对象所在的基础数据集分片相对应的参考数据集分片外的其他参考数据集分片中,计算待查找对象与可能的最终最近邻之间的距离,并将计算结果与待查找对象与步骤102)计算得到的距离最近的对象间的距离进行比较,取最小距离值所对应的参考数据集中的对象作为所述待查找对象的最近邻;
步骤105)、将步骤103)所得到的确定结果与步骤104)所得到的待定结果中的待查找对象的最近邻进行合并,得到所述至少一个待查找对象的最近邻。
2.根据权利要求1所述的最近邻查询方法,其特征在于,在所述的步骤101)中,对所述基础数据集或参考数据集进行分割包括:
步骤101-1)、将所述基础数据集或参考数据集划分成均等的小块;所述小块的数目至少多于所要得到的分片的数目;
步骤101-2)、采用空间填充曲线为步骤101-1)所得到的小块编码并排序;
步骤101-3)、采用轮询的方式将步骤101-2)所得到的小块合并成分片。
3.根据权利要求2所述的最近邻查询方法,其特征在于,所述的空间填充曲线为Z曲线或者Hilbert曲线中的一种。
4.根据权利要求1所述的最近邻查询方法,其特征在于,所述的步骤102)包括:
步骤102-1)、为与待查找对象所在的基础数据集分片相对应的参考数据集分片内的所有对象按照扫描方向排序,并沿着所述扫描方向的垂直方向设立扫描轴;
步骤102-2)、以待查找对象在所述参考数据集分片内的对应位置为中心,将扫描轴向右扫描,计算扫描到的对象与待查找对象间的距离,选取被扫描到的距离最小的对象作为所述待查找对象的右边最近邻;
步骤102-3)、以待查找对象在所述参考数据集分片内的对应位置为中心,将扫描轴向左扫描,计算扫描到的对象与待查找对象间的距离,选取被扫描到的距离最小的对象作为所述待查找对象的左边最近邻;
步骤102-4)、比较步骤102-2)和步骤102-3)的计算结果,选取距离更小的对象作为与所述待查找对象距离最近的对象。
5.根据权利要求4所述的最近邻查询方法,其特征在于,在所述的步骤102-2)之前还包括:
在与待查找对象所在的基础数据集分片相对应的参考数据集分片内,沿着与所述扫描方向平行的方向将所述参考数据集分片分成多个条状区域;在所述的步骤102-2)和步骤102-3)中,只在待查找对象在所述参考数据集分片内的对应位置所位于的条状区域内做扫描操作。
6.一种最近邻查询系统,其特征在于,包括分片模块、第一计算模块、存储模块、待定模块、第二计算模块以及合并模块;其中,
所述分片模块对基础数据集进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集的对象;对参考数据集进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集的对象;
所述第一计算模块在与待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象,然后根据边界判定条件将该计算结果分为确定结果或待定结果;所述边界判定条件为待查找对象到待查找对象所在的基础数据集分片相对应的参考数据集分片的边界的距离是否小于该待查找对象与计算得到的距离最近的对象间的距离,若大于,该计算结果为确定结果,保存到所述存储模块,否则,该计算结果为待定结果,保存到所述的待定模块中;
所述的第二计算模块用于计算所述的待定结果中的待查找对象的最近邻;其中,在除待查找对象所在的基础数据集分片相对应的参考数据集分片外的其他参考数据集分片中,计算待查找对象与可能的最终最近邻之间的距离,并将计算结果与待查找对象与第一计算模块计算得到的距离最近的对象间的距离进行比较,取最小距离值所对应的参考数据集中的对象作为所述待查找对象的最近邻;
所述的合并模块将存储模块所保存的确定结果与所述第二计算模块计算出的待定结果中的待查找对象的最近邻进行合并,得到所述至少一个待查找对象的最近邻。
7.一种在MapReduce中实现权利要求1-5之一的最近邻查询方法的方法,包括:
步骤201)、由第一MapReduce任务中的map对基础数据集进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集的对象;对参考数据集进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集的对象;
步骤202)、由第一个MapReduce任务中的reduce在与待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象,然后根据边界判定条件判定该计算结果为确定结果或待定结果;所述边界判定条件为待查找对象到待查找对象所在的基础数据集分片相对应的参考数据集分片的边界的距离是否小于该待查找对象与计算得到的距离最近的对象间的距离,若大于,该计算结果为为确定结果,加以保存,否则为待定结果,执行下一步;
步骤203)、由第二个MapReduce任务中的map在除待查找对象所在的基础数据集分片相对应的参考数据集分片外的其他参考数据集分片中,计算待定结果中的待查找对象与可能的最终最近邻之间的距离;
步骤204)、由第二个MapReduce任务中的reduce将前一步骤的计算结果与待定结果中的待查找对象与计算得到的距离最近的对象间的距离进行比较,取最小距离值所对应的参考数据集中的对象作为所述待定结果中的待查找对象的最近邻,最后将所述的确定结果与待定结果中的待查找对象的最近邻进行合并,得到所有待查找对象的最近邻。
8.一种在MapReduce中实现权利要求1-5之一的最近邻查询方法的方法,包括:
步骤301)、由所述MapReduce任务中的map对基础数据集进行分割,得到多个分片,每个分片中包含有指定范围内的基础数据集的对象;对参考数据集进行分割,得到多个分片,每个分片中包含有指定范围内的参考数据集的对象;然后在与待查找对象所在的基础数据集分片相对应的参考数据集分片内计算与所述待查找对象距离最近的对象,然后根据边界判定条件判定该计算结果为确定结果或待定结果;所述边界判定条件为待查找对象到待查找对象所在的基础数据集分片相对应的参考数据集分片的边界的距离是否小于该待查找对象与计算得到的距离最近的对象间的距离,若大于,该计算结果为确定结果,加以保存,否则为待定结果,执行下一步;
步骤302)、由所述MapReduce任务中的reduce在除待查找对象所在的基础数据集分片相对应的参考数据集分片外的其他参考数据集分片中,计算待定结果中的待查找对象与可能的最终最近邻之间的距离;并将计算结果与待定结果中的待查找对象与计算得到的距离最近的对象间的距离进行比较,取最小距离值所对应的参考数据集中的对象作为所述待定结果中的待查找对象的最近邻;最后将所述的确定结果与待定结果中的待查找对象的最近邻进行合并,得到所有待查找对象的最近邻。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106077418A CN102043857B (zh) | 2010-12-27 | 2010-12-27 | 最近邻查询方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106077418A CN102043857B (zh) | 2010-12-27 | 2010-12-27 | 最近邻查询方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102043857A CN102043857A (zh) | 2011-05-04 |
CN102043857B true CN102043857B (zh) | 2012-06-20 |
Family
ID=43909994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010106077418A Expired - Fee Related CN102043857B (zh) | 2010-12-27 | 2010-12-27 | 最近邻查询方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102043857B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103139280A (zh) * | 2011-11-24 | 2013-06-05 | 北京千橡网景科技发展有限公司 | 在sns社区中获得好友动态的方法和系统 |
CN103034678A (zh) * | 2012-11-01 | 2013-04-10 | 沈阳建筑大学 | 一种基于Voronoi图的反k最近邻查询方法 |
CN105760465A (zh) * | 2016-02-05 | 2016-07-13 | 大连大学 | 移动环境下基于大规模反近邻查询的医疗呼叫方法 |
CN109117275B (zh) * | 2018-08-31 | 2024-05-28 | 平安科技(深圳)有限公司 | 基于数据分片的对账方法、装置、计算机设备及存储介质 |
CN109740376B (zh) * | 2018-12-21 | 2020-11-13 | 哈尔滨工业大学(深圳) | 基于近邻查询的位置隐私保护方法、系统、设备及介质 |
CN111062267B (zh) * | 2019-11-28 | 2022-07-08 | 内蒙古农业大学 | 一种时间序列遥感影像降维方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1953442A (zh) * | 2006-09-14 | 2007-04-25 | 浙江大学 | 基于数据网格的k近邻查询方法 |
CN101183368A (zh) * | 2007-12-06 | 2008-05-21 | 华南理工大学 | 联机分析处理中分布式计算及查询海量数据的方法和系统 |
CN101799748A (zh) * | 2009-02-06 | 2010-08-11 | 中国移动通信集团公司 | 一种确定数据样本类别的方法及其系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080133474A1 (en) * | 2006-11-30 | 2008-06-05 | Yahoo! Inc. | Bioinformatics computation using a maprreduce-configured computing system |
-
2010
- 2010-12-27 CN CN2010106077418A patent/CN102043857B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1953442A (zh) * | 2006-09-14 | 2007-04-25 | 浙江大学 | 基于数据网格的k近邻查询方法 |
CN101183368A (zh) * | 2007-12-06 | 2008-05-21 | 华南理工大学 | 联机分析处理中分布式计算及查询海量数据的方法和系统 |
CN101799748A (zh) * | 2009-02-06 | 2010-08-11 | 中国移动通信集团公司 | 一种确定数据样本类别的方法及其系统 |
Non-Patent Citations (2)
Title |
---|
刘旭辉,韩冀中,贺劲,韩承德.基于集群系统的空间数据并行处理策略研究.《高技术通讯》.2009,第19卷(第10期),全文. * |
徐红波,郝忠孝.基于Hilbert曲线的高维k-最近对查询算法.《计算机工程》.2008,第34卷(第2期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN102043857A (zh) | 2011-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102043857B (zh) | 最近邻查询方法及系统 | |
US11132388B2 (en) | Efficient spatial queries in large data tables | |
US8364717B2 (en) | Hardware accelerated shortest path computation | |
US9500487B2 (en) | Shortest path determination for large graphs | |
CN110059264B (zh) | 基于知识图谱的地点检索方法、设备及计算机存储介质 | |
Isaac et al. | Low-cost parallel algorithms for 2: 1 octree balance | |
Song et al. | Solutions for processing k nearest neighbor joins for massive data on mapreduce | |
CN109033340A (zh) | 一种基于Spark平台的点云K邻域的搜索方法及装置 | |
CN114420215B (zh) | 基于生成树的大规模生物数据聚类方法及系统 | |
Schlag et al. | Scalable edge partitioning | |
JP2011090351A (ja) | 検索データ管理装置 | |
Flick et al. | A parallel connectivity algorithm for de Bruijn graphs in metagenomic applications | |
CN105975519A (zh) | 一种基于多支撑点索引的离群检测方法及其系统 | |
CN108549696A (zh) | 一种基于内存计算的时间序列数据相似性查询方法 | |
CN104574517A (zh) | 三维模型的边界面网格单元的处理方法和装置 | |
CN115658809A (zh) | 一种基于局部方向中心性的数据分布式聚类方法及装置 | |
CN114860441A (zh) | 一种面向药物虚拟筛选的多线程协作的gpu加速方法 | |
CN114491199A (zh) | 一种数据检索方法、装置及系统 | |
CN101515284A (zh) | 一种基于离散网格的并行空间拓扑分析方法 | |
CN103345509B (zh) | 获取路网上复反向最远邻居的层次分区树方法及系统 | |
CN115809360B (zh) | 一种大规模时空流数据实时空间连接查询方法及相关设备 | |
CN108108251A (zh) | 一种基于MPI并行化的参考点k近邻分类方法 | |
CN111274275B (zh) | 数据处理方法、装置和计算机可读存储介质 | |
CN116578558A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN115344607A (zh) | 一种面向图数据的批量流式边点混合切分方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120620 Termination date: 20201227 |