基于希尔伯特曲线的大规模区域目标实时查找方法与流程

文档序号:18796709发布日期:2019-09-29 19:47阅读:379来源:国知局
基于希尔伯特曲线的大规模区域目标实时查找方法与流程

本发明涉及大数据技术领域,尤其涉及基于希尔伯特曲线的大规模区域查找算法。



背景技术:

近年来,在云计算时代,面对海量数据的实时查询,传统的数据库工具显然力不从心,主要是数据量太大,在性能上无法满足海量数据的处理需求。目前已经产生了各种成熟的海量数据处理组件,但是还没有一种较好的方案,来处理海量数据的接收到转换,最后到输出这一整套的流程。

sparkstreaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是spark,也就是把sparkstreaming的输入数据按照batchsize(如1秒)分成一段一段的数据(discretizedstream),然后将sparkstreaming中对dstream的transformation操作变为针对spark中对rdd的transformation操作,将rdd经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行叠加,或者存储到外部设备。

flume是一个从可以收集例如日志,事件等数据资源,并将这些数量庞大的数据从各项数据资源中集中起来存储的工具/服务。flume具有高可用、高可靠、分布式等特点,其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到hdfs,hbase等集中存储器中。

kafka是设计独特的消息队列,具有非常高的吞吐能力,以及强大的扩展性,kafka的设计目的分布式,高吞吐、高扩展。kafka是一个消息发布订阅系统,分为producer、broker、consumer几个模块、producer向某个topic发布信息,发往kafka数据由broker进行存储和转发,consumer订阅某个topic的消息,进而一旦由新的关于某个topic的消息,broker会传递给订阅它的所有consumer。在kafka中,消息是按topic组织的,每个topic又分为多个partition,这样便于管理数据和进行负载均衡,负载均衡通过zookeeper来做的。

空间填充曲线的空间连续性用于描述在空间上连续的地理实体被空间填充曲线转化为一维数值编码后编码的连续性状况。对于同样的地理实体,转化后的编码间隔数越小,该空间填充曲线的空间连续性越好。z曲线的连续性较差,在四叉树索引结构中编码的连续性不强,在一定程度上影响了查询效率。作为另一种空间填充曲线,hilbert曲线同样可应用到四叉树索引中。一些学者在单一尺度的hilbert曲线与z曲线的空间连续性效率的研究中,证明了hilbert曲线的优越性。

目前用于地理搜索查询的主要是基于z曲线的geohash算法,它使用范围较广,但是存在精度不准确等特点,geohash算法使用了z-order空间填充曲线,这种曲线存在突变性,容易导致查询位置不准确,而且在geohash算法中,若选择不合适的网络大小,则判断临近点可能会比较麻烦。

针对现有技术的大规模区域目标实时查找方法中,精度不够准确的缺陷,有必要提供一种新的基于希尔伯特曲线的大规模区域目标实时查找方法来解决上述问题。



技术实现要素:

本发明要解决的技术问题是针对现有技术的大规模区域目标实时查找方法中,精度不够准确的缺陷,本发明提供了一种计算范围更精准,查找效率高的基于希尔伯特曲线的大规模区域目标实时查找方法。

一种基于希尔伯特曲线的大规模区域目标实时查找方法,提供相互连接的数据源服务器、大数据集群及缓存服务器,所述大数据集群包括kafka服务器及sparkstreaming服务器,包括如下步骤:

步骤一,所述数据源服务器接收数据源发送的位置信息;

步骤二,所述数据源服务器向所述kafka服务器传输所述位置信息,所述kafka服务器将所述位置信息存储于所述缓存服务器并生成kafka消息队列;

步骤三,所述sparkstreaming服务器从所述kafka消息队列中拉取所述位置信息,并利用googles2算法实时计算目标单位在所述位置信息周围的数量及距离,并生成查询结果;

步骤四,所述sparkstreaming服务器将所述查询结果储存至所述缓存服务器,并通过ssm技术将所述查询结果渲染。

优选的,所述sparkstreaming服务器包括拉起模块及计算模块,所述拉起模块与所述缓存服务器连接并用于拉取所述位置信息,所述计算模块用于实时计算。

优选的,所述googles2算法包括经纬度转弧度、球面坐标转换、球面变平面、球面矩形投影修正、点与坐标轴点相互转换、坐标轴点与希尔伯特曲线上的cellid相互转换六个步骤。

优选的,所述数据源服务器、所述大数据集群及所述缓存服务器之间采用通讯连接。

优选的,在所述步骤一中,所述数据源为hdfs。

优选的,在所述步骤一中,所述数据源为flume。

优选的,在所述步骤三中,所述目标单位为提前存储于数据库中的餐厅等信息。

优选的,所述缓存服务器为redis或mysql。

与相关技术相比,本发明的基于希尔伯特曲线的大规模区域目标实时查询方法,通过采用googles2算法实时计算生成查询结果,因googles2算法是基于希尔伯特空间填充曲线的特点,使得它可以对多维空间进行有效降维,同时,希尔伯特曲线上的点也被证明比z-order曲线更稳定,不易导致突变,也就是说,实验已经证明希尔伯特曲线比z-order曲线的性能更好,因此,googles2算法相比于现有技术geohash或dbscan,具有计算范围更精准,查找效率更高的优点;同时,通过采用所述sparkstreaming服务器,使其能够对海量空间数据进行高效的查询和计算,并迅速返回相应结果,提高了查找效率。

【附图说明】

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,其中:

图1为本发明提供的基于希尔伯特曲线的大规模区域目标实时查找方法的流程框图;

图2为本发明提供的基于希尔伯特曲线的大规模区域目标实时查找方法的结构框图;

图3为本发明提供的基于希尔伯特曲线的大规模区域目标实时查找方法步骤三中球体套外切正方形的情况图;

图4为图3所示的基于希尔伯特曲线的大规模区域目标实时查找方法步骤三中球心向外切正方体的六个面的投影图;

图5为本发明提供的基于希尔伯特曲线的大规模区域目标实时查找方法步骤三中8*8的希尔伯特曲线格子图;

图6为本发明提供的基于希尔伯特曲线的大规模区域目标实时查找方法步骤三中2阶希尔伯特曲线图。

【具体实施方式】

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

请结合参阅图1及图2,本发明提供了一种基于希尔伯特曲线的大规模区域目标实时查找方法100。提供相互连接的数据源服务器10、大数据集群30及缓存服务器50,其中,所述大数据集群30包括kafka服务器31及sparkstreaming服务器33。

优选的,所述数据源服务器10、所述大数据集群30及所述缓存服务器50之间采用通讯连接。

所述基于希尔伯特曲线的大规模区域目标实时查找方法100具体包括如下步骤:

步骤一s1:所述数据源服务器10接收数据源发送的位置信息;

在本实施方式中,步骤一s1中的所述数据源为hdfs,此时所述数据源为固定的位置信息,如餐馆、商场等。以后若需要新增所述数据源为固定的位置信息,则可直接追加在相应文件后;当然,在本发明其他实施例中,所述数据源也可以是flume,此时所述数据源为移动的位置信息,如共享单车或滴滴汽车等。

需要说明的是,当所述数据源为hdfs时,因餐馆、商场等固定的位置信息是按照省份、市级、县级进行区域划分的,一个区域包含该区域内的所有餐馆、商场等位置信息。所述相应文件表示相应区域的文件,即若新增了餐馆、商场等信息,则在相应区域的文件里追加该位置信息。

同时,在本实施方式中,所述位置信息包括经纬度坐标。

步骤二s2:所述数据源服务器10向所述kafka服务器31传输所述位置信息,所述kafka服务器31将所述位置信息存储于所述缓存服务器50并生成kafka消息队列;

步骤三s3:所述sparkstreaming服务器33从所述kafka消息队列中拉取所述位置信息,并利用googles2算法实时计算目标单位所在位置信息周围的数量及距离,并生成查询结果;

需要说明的是,sparkstreaming服务器33是spark核心api的扩展,可实现对实时数据流的高吞吐量、容错的流处理。sparkstreaming的数据源可以有很多,如kafka、flume、twitter、zeromq或传统的tcpsockets。

所述sparkstreaming服务器33包括拉起模块331及计算模块333。所述拉起模块331与所述缓存服务器50连接并用于拉取所述位置信息,所述计算模块333用于实时计算。

所述目标单位为提前存储于数据库中的餐厅等信息。

请结合参阅图3至图5,所述googles2算法是计算地理空间位置信息的算法,其类似于geohash算法,但是比它更强大、更准确。具体的,所述googles2算法是将经纬度进行一系列变换,最终转为希尔伯特曲线上的cellid,然后通过比较cellid的值是否相同来判断是不是在同一块区域,其中,googles2算法计算的区域最小可为0.48cm^2,可满足绝大部分额应用场景。

所述googles2算法包括如下六个步骤:

第一步:经纬度转弧度;

第二步:球面坐标转换;

第三步:球面变平面;

第四步:球面矩形投影修正;

第五步:点与坐标轴点相互转换;

第六步:坐标轴点与希尔伯特曲线上的cellid相互转换。

也就是说,所述googles2算法是通过将经纬度转为弧度、然后球面坐标与直角坐标转换、再将三维球面转换为二维平面、再将球面矩形投影修正、然后将平面点与希尔伯特坐标轴点相互转换、最后将坐标轴点转为希尔伯特曲线上的cellid。

具体的,在所述第一步中,经纬度可通过公式:角度*π/180转化为弧度;

在所述第二步中,将球面坐标s(lat,lng)转换为直角坐标f(x,y,z),且在googles2中,地球半径设为1,故(x,y,z)的值域为-1到1;

请具体参阅图3和图4,在所述第三步中,将直角坐标f(x,y,z)转换为g(face,u,v),在此步骤中,从球心向外切正方体六个面分别投影,face表示第几个面,(u,v)表示第几个面上的坐标;

在所述第四步中,由于球面上角度的不同,最终会导致即使是投影到同一个面上,每个矩形的面积也不大相同,所以需要将g(face,u,v)进行修正并转换为h(face,u,v),其中修正函数为二次变换,且修正后的(u,v)的值域为0到1;

在所述第五步中,因googles2默认划分cell的等级是30,也就是说把一个正方形划分为2^30*2^30个小的正方形,所以这一步需将h(face,u,v)转换为h(face,u,v),其中,(u,v)的值域为0到2^30-1;

在所述第六步中,将h(face,u,v)映射到希尔伯特曲线上的一个小格子里,即为cellid,标示每个小格子的编号。

需要说明的是,因生成的n阶希尔伯特曲线是固定的,即生成5阶希尔伯特曲线或生成8阶希尔伯特曲线均是固定的。

请具体参阅图6,以2阶希尔伯特曲线为例,从开口的位置标记为0,依次按照方向标记1、2、3。其他n阶希尔伯特曲线也是类似的。

同时,在距离计算中,所述googles2算法实现了haversine公式,在传统的great-circledistance公式中使用了大量的余弦函数,当两点间距很短时,余弦函数会出现0.999……的结果,会导致较大的舍入误差。因此,采用正弦函数的haversine公式可以保证足够的有效数字。

步骤四s4:所述sparkstreaming服务器将所述查询结果存储至所述缓存服务器50,并通过ssm技术将所述查询结果渲染。

所述缓存服务器50为redis或mysql。

因spark中使用的是foreachpartition算子,它可一次将一个分区的数据输出到数据库中,这样可极大地提高性能。

需要说明的是,若所述缓存服务器采用mysql,则提前建立好mysql对应的表,表信息包括经纬度值、cellid值、两地距离等;若要查询位置信息方圆五公里内的共享单车,则可根据cellid是否相等来判断,若相等,则表示该单车在五公里内;反之,亦然;若要查询最近的单车或餐馆,则直接按表中距离这一列排序即可。

与相关技术相比,本发明的基于希尔伯特曲线的大规模区域目标实时查询方法100,通过采用googles2算法实时计算生成查询结果,因googles2算法是基于希尔伯特空间填充曲线的特点,使得它可以对多维空间进行有效降维,同时,希尔伯特曲线上的点也被证明比z-order曲线更稳定,不易导致突变,也就是说,实验已经证明希尔伯特曲线比z-order曲线的性能更好,因此,googles2算法相比于现有技术geohash或dbscan,具有计算范围更精准,查找效率更高的优点;同时,通过采用所述sparkstreaming服务器33,使其能够对海量空间数据进行高效的查询和计算,并迅速返回相应结果,提高了查找效率。

以上所述的仅是本发明的实施方式,在此应当指出,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出改进,但这些均属于本发明的保护范围。

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