路网中移动对象查询方法与流程

文档序号:12906124阅读:320来源:国知局
路网中移动对象查询方法与流程

本发明涉及高性能计算领域和数据库领域,具体地涉及一种路网中移动对象查询方法。



背景技术:

随着移动设备的广泛普及和位置服务的不断发展,针对移动对象的查询处理成为研究的热点。典型的查询,例如:查找距离用户最近的超市或加油站;距离用户最近的出租车等。在人们的日常生活中,所有的对象都是基于路网进行运动。对于路网中任意对象x和y,对象间的路网距离d(x,y)比欧式距离||x–y||能更好的反映出对象间的实际距离。例如,在双向车道中,车辆q到位于另一侧加油站p的路网距离d(q,p)远远大于两者之间的欧式距离||q–p||。因此,两个对象间的路网距离d(q,p)比欧氏距离||q–p||更有意义。

但是,本申请发明人在实现本发明的过程中发现,已有的路网中移动对象查询算法具有如下缺陷:随着用户数量的不断增加,应用场景的不断丰富,常规的knn算法不能很好的应对新出现的应用。

例如,对于典型的打车应用,车辆在运行过程中会产生一个车辆位置更新数据流。同时,大量用户发起的打车请求会形成一个查询数据流。系统首先要对车辆位置信息进行实时更新,以确保查询结果的有效性,同时又需要实时响应所有用户的查询请求,以确保服务质量。对于这类应用场景,当knn算法采用每次处理一个查询(onebyone)的方式时,大量用户需要排队以等待查询响应,用户的排队等待时间将严重影响服务质量。

因此,已有的路网中移动对象查询算法不能很好地应对新出现的需求,需要找到新的移动对象查询方案,以满足大数据下位置服务的查询需求。



技术实现要素:

本发明实施例的目的是提供一种路网中移动对象查询方法,该移动对象查询方法用于实现满足大数据下位置服务的查询需求的移动对象查询方案。

为了实现上述目的,本发明实施例提供一种路网中移动对象查询方法,用于服务器端,且所述路网中移动对象查询方法包括:获取移动对象更新数据和用户输入的查询数据;采用多核cpu,基于移动对象在路网中所在的节点对所获取的移动对象更新数据进行聚集索引以及基于查询数据在路网中所在的边来对所获取的查询数据进行聚集索引;以及将聚集索引后的数据放入gpu中进行基于最近邻knn算法的计算,以获得查询结果。

可选地,所述获取移动对象更新数据和用户输入的查询数据包括:周期性采集移动对象更新数据,该移动对象更新数据包括移动对象识别号及移动对象坐标;实时接收用户输入的查询数据;以及采用缓存器缓存所述移动对象更新数据及所述查询数据,并按照需要使用的线程数划分所述缓存器中的数据,其中每个线程处理一块移动对象更新数据或查询数据。

可选地,采用快照的方式将所述移动对象更新数据和所述查询数据存储到所述缓存器中。

可选地,基于移动对象在路网中所在的节点对所获取的移动对象更新数据进行聚集索引包括:计算移动对象与其所在路径中的两个端点处的节点的距离;将与端点处的节点距离不超过其路径长度一半的移动对象的移动对象更新数据聚集在该节点;以及将聚集完成的移动对象更新数据放入一个对象表结构中。

可选地,基于查询数据在路网中所在的边来对所获取的查询数据进行聚集索引包括:将所有查询数据按照所在路径进行聚集,并将同一条路径上的查询数据放入一个查询表结构的相邻存储位置。

可选地,将聚集索引后的数据放入gpu中进行基于knn算法的计算包括:基于聚集索引后的数据,计算路径中的任意一个节点所在路径的两个端点的knn结果集;基于聚集索引后的数据,计算路径中的移动对象集合;以及从所述knn结果集和所述移动对象集合的合集中查询出所选定的节点的knn结果集。

可选地,采用多核cpu进行的聚集索引是格网索引,且所述格网索引包括:将各移动对象更新数据索引至格网中与该移动对象更新数据的二维欧式空间坐标相对应的单元格中;以及将各查询数据索引至格网中与该查询数据相匹配的移动对象更新数据所在的单元格中。

可选地,所述格网索引还包括:当格网中的单元格中所聚集的数据的量超出设定阈值时,在gpu端将该单元格划分为至少两个子单元格,并将各数据相应存储至对应的子单元格。

可选地,所述路网中移动对象查询方法还包括:将所述查询结果分发给用户,并删除进行计算的过程中所产生的中间结果。

另一方面,本发明提供一种计算可读存储介质,该计算机可读存储介质上存储有计算机指令,该计算机指令用于使得所述计算机执行本申请上述的方法。

通过上述技术方案,本发明实施例所具有的有益效果是:本发明实施例提出了一种基于新硬件环境下的高吞吐量路网中移动对象查询方法,其充分发挥了大内存、多核cpu、gpu的特点,从而提高了移动对象的查询处理效率,更能满足大数据下基于位置服务的用户查询需求。

本发明实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:

图1是根据本发明实施例的路网中移动对象查询方法的流程示意图;

图2是根据本发明实施例的获取移动对象更新数据和查询数据的流程示意图;

图3是根据本发明实施例的对移动对象更新数据进行聚集索引的流程示意图;

图4是对移动对象进行聚集索引的示例的示意图;

图5是通过gpu对聚集索引后的数据进行计算的流程示意图;

图6是根据本发明实施例的gpgpu模型的架构示意图;以及

图7是根据本发明实施例的基于大内存和gpgpu模型进行移动对象knn查询的示意图。

具体实施方式

以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明实施例,并不用于限制本发明实施例。

本申请发明人在实现本发明目的的过程中发现对于大部分应用而言,单个查询的响应时间只要达到秒级就可以满足需求,不需要刻意追求单个查询的响应时间,例如对于典型的打车应用,大部分用户只要能在几秒钟内得到响应就能满足要求,对于更快的查询响应时间,用户的服务体验没有明显变化。因此,为了确保服务质量,需要在单位时间内尽可能多的响应用户的查询,即系统的吞吐量成为了满足大数据下位置服务查询需求的关键因素。

基于这一思路,本发明实施例提出了一种路网中移动对象查询方法。在具体介绍这一方法之前,先对本发明实施例中所涉及的路网进行说明。

本发明实施例中,路网用一个无相加权图g=(v,e)来表示,其中v为节点的集合,代表路网中的连接处,e为无相边的集合,代表路网中两个节点之间的线段,同时对于任意路网g(e,v),每条边可以表示为e(v1,v2),其中v1,v2为两个联通的节点,v1为起始节点,v2为最终节点,每条边的权重为非负值。需说明的是,上述参数用于体现路网的概念,而在实际中,可根据需要,采用不同的字符来表示参数的含义,例如也可以用n1、n2表示节点。

图1示出了本发明实施例的路网中移动对象查询方法的流程示意图,该移动对象查询方法应用在服务器端,可以包括以下步骤:

步骤s100,获取移动对象更新数据和用户输入的查询数据。

其中,移动对象更新数据包括移动对象识别号(id)及移动对象坐标等信息,例如体现典型打车应用中涉及的车辆的实时位置的变化的信息;查询数据例如是典型打车应用中涉及的用户对附近两公里内的出租车的查询。

优选地,如图2所示,该步骤s100可以包括以下步骤:

步骤s101,周期性采集移动对象更新数据。

步骤s102,实时接收用户输入的查询数据。

步骤s103,采用缓存器(以下称为buffer)缓存所述移动对象更新数据及所述查询数据,并按照需要使用的线程数划分buffer中的数据。

其中,可设置每个线程处理一块移动对象更新数据或一块查询数据。

更为优选地,本发明实施例采用快照的方式将所述移动对象更新数据和所述查询数据存储到buffer中,后续的计算也可以基于快照进行,例如用户在t1时刻提交的查询基于在t0时刻形成的位置快照进行计算,其中t0≤t1,t1-t0<δt,δt为一个固定的时间间隔,查询结果在t0+δt时间段内有效。

其中,关于快照的原理及具体方法,可参考现有相关文献,本发明实施例在此不再赘述。

步骤s200,采用多核cpu,基于移动对象在路网中所在的节点对所获取的移动对象更新数据进行聚集索引以及基于查询数据在路网中所在的边来对所获取的查询数据进行聚集索引。

优选地,如图3所示,基于移动对象在路网中所在的节点对所获取的移动对象更新数据进行聚集索引可以包括以下步骤:

步骤s201,计算移动对象与其所在路径中的两个端点处的节点的距离。

步骤s202,将与端点处的节点距离不超过其路径长度一半的移动对象的移动对象更新数据聚集在该节点。

步骤s203,将聚集完成的移动对象更新数据放入一个对象表结构中。

对于步骤s201-步骤s203,下面通过示例来说明。图4示出了对移动对象进行聚集索引的示例,其中,n1-n8表示节点,p1-p5表示移动对象,从图中可知p2和p3至节点n4的距离不超过对应的路径n3n4和n5n4的长度的一半,从而将p2和p3聚集在对象表结构的相邻位置。同样地,p4和p5在对象表结构中的位置也是采用类似方法确定。

优选地,基于查询数据在路网中所在的边来对所获取的查询数据进行聚集索引可以包括:将所有查询数据按照所在路径进行聚集,并将同一条路径上的查询数据放入一个查询表结构的相邻存储位置。如此,可知与移动对象更新数据处理的方式不同,所有查询数据是按路径进行聚集,同一条路径上的查询数据在查询表结构中的存储位置相近。

通过上面的操作,将移动对象更新数据和查询数据按照所在节点和所在的边进行聚集索引,分别存储在对象表和查询表中,从而可利用多核cpu的多核特性,通过批处理的方式,一次处理多个查询。

另外,采用多核cpu还涉及对大容量内存技术的利用,即将工作负载(即buffer缓存的查询数据和移动对象更新数据)全部放在多核cpu中进行处理,从而充分利用了数据的空间局部性,增加了高速缓存的命中率,从而有利于后续提高相关算法的执行效率。

更进一步地,本发明实施例采用多核cpu进行的聚集索引是格网(grid)索引,具体步骤为:将各移动对象更新数据索引至格网中与该移动对象更新数据的二维欧式空间坐标相对应的单元格中;以及将各查询数据索引至格网中与该查询数据相匹配的移动对象更新数据所在的单元格中。

另外,在步骤200中,多核cpu将构建完成的grid索引的数据以单元格为单位输送至gpu端,以执行步骤s300。

步骤s300,将聚集索引后的数据放入gpu中进行基于knn算法的计算,以获得查询结果。

这里,需说明的是,在步骤s200中,将移动对象更新数据和查询数据聚集在单元格中时,可能会出现数据扭曲现象,即过多的数据集中在一个或几个单元格中造成了数据扭曲。对此,可设定当grid中的单元格中所聚集的数据的量超出设定阈值时,在gpu端将该单元格划分为至少两个子单元格,并将各数据相应存储至对应的子单元格。如此,对单元格进行二次划分,得到了更小粒度的子单元格,其中二次划分优选为可按照单元格首次划分的相同方式进行,例如,第一次划分后形成3*3的单元格,其中两个单元格中的数据量超过设定阈值,则单独将这两个单元格继续划分为3*3的单元格。

另外,knn算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。本发明实施例的方法在实质上给出了一种利用多核cpu、gpu和特征的改进型knn算法,该改进算法原理为:对于在路径中的knn查询q,其查询结果其中rq为查询q的knn结果,o(ni,nj)为路径ni,nj中的移动对象,rni为节点ni的knn结果,rnj为节点nj的knn结果,从而可知路径中某个节点的knn结果集为该节点所在两个端点knn结果集和路径中对象集合的子集。

据此,如图5所示,将聚集索引后的数据放入gpu中进行基于knn算法的计算的步骤可以如下:

步骤s301,基于聚集索引后的数据,计算路径中的任意一个节点所在路径的两个端点的knn((k-nearestneighbor,k近邻)结果集。

其中,关于knn结果集的计算可参考现有相关文献进行,在此则不再赘述。

步骤s302,基于聚集索引后的数据,计算路径中的移动对象集合。

步骤s303,从所述knn结果集和所述移动对象集合的合集中查询出所选定的节点的knn结果集。

通过上述操作,通过gpu执行grid的对应单元格,以使移动对象与查询关联,得到相应的查询结果。另外,在优选的实施方式中,还需要将查询结果分发给用户,该查询结果即是gpu的计算结果,从而还可以在分发查询结果的同时,删除进行计算的过程中所产生的中间结果,以保证gpu的执行效率。

如此,步骤s200和步骤s300相结合,实现了基于多核cpu和gpu进行移动对象knn查询的方案,并充分运用了多核cpu和gpu的特性,对于buffer中到来的移动对象更新knn查询,通过重新构建索引的方式,充分发挥了多核cpu的特性;对于构建好的索引结构,利用gpu精于高效数据运算的特征,提高了算法查询的性能,且将多个查询并执行,充分利用查询内和查询间的并行,提高了算法的效率。

因此,可知本发明实施例的移动对象knn查询方案中配置了基于大容量内存、多核cpu和gpu的新硬件环境的查询框架,该查询框架的具体配置可以例如:配置每台可以提供12tb内存的若干台8路服务器,配置cpu内核数最大可达18个的服务器,以及配置用来做大规模的并行运算的gpu。其中,由buffer缓存数据,由cpu负责执行复杂逻辑处理和事务管理等不适合数据并行的计算,由gpu负责计算密集型的大规模并行计算。

这里,多核cpu和gpu的配合构成了gpgpu(generalpurposegpu,通用目的gpu)模型。如图6所示,在gpgpu模型中,cpu作为主机(host),gpu作为协处理器或者设备(device)。在一个系统中可以存在一个主机和若干个设备,即可理解为:通过一个多核cpu对所述移动对象更新数据和所述查询数据重新构建索引,以及通过若干个gpu对构建好的索引结构进行计算。

另外,多核cpu是以单元格为单位将构建完成的grid索引的数据输送至gpu端,如图6所示,gpu端保留了多核cpu端的基于grid索引的单元格的数据存储方案,gpu对相同单元格中的移动对象更新数据和查询数据进行计算,且各个单元格之间相互独立,可以并行执行。其中,例如图6中的单元格(2,0)是指二维欧式空间坐标为(2,0)的单元格,gpu对该单元格中的数据进行计算可获得相关查询结果。

在这个gpgpu模型中,cpu与gpu协同工作,各司其职,cpu负责进行逻辑性强的事物处理和串行计算,gpu则专注于执行高度线程化的并行处理任务。因此一旦确定了程序的并行部分,就可以考虑把这部分计算工作交给gpu。

需说明的是,cpu、gpu各自拥有相互独立的存储器地址空间,即:主机端的内存和设备端的显存。

另外,上述步骤s100-步骤s300均由服务器执行,即本发明实施例中可通过仅一个服务器来管理移动对象,从而有利于简化系统。

下面通过示例来具体介绍本实施例中基于大内存和gpgpu模型进行移动对象knn查询的实施细节。

如图7所示,在两个线程执行时,首先线程1处理路径中的查询q1、q2,线程2处理路径上的查询q3。在执行的过程中,对于线程1需要查询节点n1、n2的knn结果集,线程2需要查询路径n3、n4上的knn结果集。当查询继续执行时,线程1处理路径上的查询q5,线程2处理路径上的查询q6。对于线程1,因为节点n3的knn结果集已经得到,索引只需要查询节点n5的结果集。对于线程2需要查询节点n5和n6的knn结果集,对于节点n5在两个查询中共用,所以只需要一个线程查询就可以。在查询节点n5的knn结果集时,当搜索到节点n3后就不需要再向节点n2和n4搜索。因为n3的knn结果集已经得到,所以减少了搜索的范围。通过图2的例子可以看到在查询执行过程中,只需要搜索很少的节点就能完成knn的查询,同时在多线程执行过程中,很多节点的knn结果集已经得到,不需要重复的计算,提高了算法的查询效率。

综上所述,本发明实施例提出了一种基于新硬件环境下的高吞吐量路网中移动对象查询方法,其充分发挥了大内存、多核cpu、gpu的特点,从而提高了移动对象的查询处理效率,更能满足大数据下基于位置服务的用户查询需求。

以上结合附图详细描述了本发明例的可选实施方式,但是,本发明实施例并不限于上述实施方式中的具体细节,在本发明实施例的技术构思范围内,可以对本发明实施例的技术方案进行多种简单变型,这些简单变型均属于本发明实施例的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施例对各种可能的组合方式不再另行说明。

本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

此外,本发明实施例的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施例的思想,其同样应当视为本发明实施例所公开的内容。

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