CN110147377B - 大规模空间数据环境下基于二级索引的通用查询方法 - Google Patents
大规模空间数据环境下基于二级索引的通用查询方法 Download PDFInfo
- Publication number
- CN110147377B CN110147377B CN201910456427.5A CN201910456427A CN110147377B CN 110147377 B CN110147377 B CN 110147377B CN 201910456427 A CN201910456427 A CN 201910456427A CN 110147377 B CN110147377 B CN 110147377B
- Authority
- CN
- China
- Prior art keywords
- query
- data
- index
- spatial
- spark
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2264—Multidimensional index structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24539—Query rewriting; Transformation using cached or materialised query results
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
大规模空间数据环境下基于二级索引的通用查询算法,属于数据查询领域,为了解决非行键属性实时范围查询的问题,框架由以下几部分组成:客户端、Spark计算模块、HBase数据处理模块;算法执行如下:在HBase数据处理模块和Spark计算模块的Schema基础上调用SparkContext提供的API建立HBase的原始数据的RDD,RDD经过不断转化形成二级索引存放在Spark Memory中,效果是提高了大规模空间数据范围查询的效率。
Description
技术领域
本发明属于数据查询领域,涉及一种大规模空间数据环境下基于二级索引的通用查询方法。
背景技术
空间索引可以解决空间数据近邻查询问题,但是不能解决非行键属性实时范围查询的问题。而现有的二级索引的设计灵感来源于倒排的思想,将主数据表的键值对倒置。Solr是一个高性能的基于Lucene的企业级全文搜索服务器,Solr+HBase的二级索引方案是基于Solr集群搭建的搜索引擎来查找结构化数据,基于HBase搭建的数据存储云来存储海量数据。
发明内容
为了解决非行键属性实时范围查询的问题,本发明提出如下技术方案:一种大规模空间数据环境下基于二级索引的通用查询方法,框架由以下几部分组成:客户端、Spark计算模块、HBase数据处理模块;算法执行如下:在HBase数据处理模块和Spark计算模块的Schema基础上调用SparkContext提供的API建立HBase的原始数据的RDD,RDD经过不断转化形成二级索引存放在SparkMemory中;根据客户端的查询请求并行筛选二级索引模块,筛选出满足查询条件的Rowkey后从HBase中查询数据并返回结果给客户端。
进一步的,将倒排索引和GeoHash算法结合形成Inverted GeoHash索引,其模型为IG索引的模型,该模型的倒排GeoHash索引包含两部分:第一部分,是空间数据对象与其所在的GeoHash网格的映射;第二部分,是网格编码与存储在其中的所有数据对象的映射;利用GeoHash算法将地球划分成多个网格,对每个网格中的空间数据对象构建空间二级索引,通过每个网格的GeoHash编码反向索引其包含的空间对象的Rowkey,使用GeoHash算法和Base32编码对空间数据地理信息降维得到的一维字符串作为二级索引的key,每个空间数据在HBase表中的行键信息作为二级索引的value,GeoHash划分的矩形区域中,每一个区域都有固定的编码,同一个区域内的点编码都相同,通过改变GeoHash编码的长度改变矩形区域的覆盖范围。
进一步的,由Spark编程模型构建二级索引:
(1)使用read.parquet加载数据信息并创建parquetRDD;
(2)使用该算子并行在每个分区调用geoHash算法的API,将parquetRdd转换成mapPartitionRDD(Rowkey,GeoHashCode),数据类型是key-value对形式的(String,String);
(3)partitionBy算子。给partitionBy算子传入RangePartitioner,来给RDD重新分区,该过程数据类型不变;
(4)通过该算子访问各自分区的所有空间对象,然后并行创建索引。
进一步的,在Spark框架下,利用二级索引对HBase非行键空间数据的范围查询算法:
给定一个空间对象集合S,再给定一查询点P=(Lng,Lat)和查询半径d,在集合S中存在集合R={R1,R2...Ri}与查询点P距离小于d,记为RQ(P,S):
范围查询算法使用两阶段处理策略,第一阶段是索引的筛选,首先需要计算出查询目标大致所在的GeoHash单元网格,称作MBR,通过查找RDD中的索引表单元筛选出所有MBR作为候选集,第二阶段是遍历求精,通过二次计算与查询点的距离从候选集中求得满足查询要求的最终结果;将构建的索引转为RDD的形式被存储到内存中,在进行范围查询的时候,利用Spark的转化操作算子mapPartitions并行执行查询任务。
进一步的,在空间二级索引的支持下,基于Spark的范围查询的详细过程如算法如下:已知查询点p的空间位置信息和查询范围d;首先,调用geo对象的getGeoCode方法,此方法封装了以给p为圆心,d为半径画圆,返回落在圆内和与圆相交的编码区域,得到结果集所在的GeoHash编码区域集合Kn;然后,子节点收到task任务后对空间索引RDD的分片进行检索,将检索结果并入结果集;最后,通过再次扫描筛掉结果集中实际距离大于查询范围d的数据,并返回最终结果。
有益效果:本发明提出了融合Spark查询框架和空间索引技术的实时查询方案,来提高大规模空间数据范围查询的效率。在该查询框架内的Spark担任实时计算的角色,二级索引以RDD的形式供查询实时调用。Spark强大的分布式内存计算优势能极大地提高大规模数据处理的速度。
HBase通过行键比不通过行键的全表扫描方式查找数据所需的时间差很多,前者在毫秒级可实现,后者则需要几秒甚至更多。因此,对于非行键的查询,还是要先通过计算得到行键,再去查询,更方便和省时。本发明把为非行键的值和行键建立映射作为突破口,也就是建立二级索引。在大规模空间数据的查询中,索引结构的选择对查询性能举重若轻。常见的索引结构有B树、Hash、倒排索引等结构。B树这一类的树结构不适合并行化,并且拆子树的过程比较复杂。Hash结构在数据量多的情况下,为了解冲突需要花费比较多的代价。因此,为了提高查询效率,我们选用在分布式环境下全文搜索最受欢迎的索引结构:倒排索引。除此之外,为了进一步简化查询过程,本发明尽可能地利用空间对象的形状与位置或是各空间要素间的拓扑关系过滤掉大量和查询区域不相关的数据。基于分形理论且具有一维特性的空间编码技术可以达到这一目。GeoHash是空间范围查询中常用的空间编码技术,它是将地球划分为多个大小相同的网格,每个网格可以包含多个数据对象,并且这些对象拥有相同的GeoHash编码。如此一来,地理位置上相邻近的空间对象的GeoHash编码也大都相似或相同,锁定一个编码就等同于锁定多个空间对象。针对资源浪费的问题,GeoHash技术可以在保持空间对象地理信息的拓扑关系的基础之上,将针对二维空间数据的范围查询问题转换为针对一维数据的查询。这样在查询多维信息时,省去了Solr方案中对各个维度进行布尔运算所耗费的时间。本发明的二级索引选用分布式倒排索引结构结合GeoHash技术,使用GeoHash编码作为key,每个空间数据在HBase表中的行键信息作为二级索引的value。查询二级索引的key,即可快速得到该区域内所有数据对象在HBase中存储的行键。
在技术实现上面,本发明采用Spark分布式处理技术来实现二级索引的构建以及范围查询算法的优化。Spark的核心数据架构是RDD(弹性分布式数据集),整个Spark程序是通过对RDD的操作来完成的。利用Spark一反面可以将索引文件以及Job作业的中间结果以RDD的形式放在内存中,避免了大量磁盘I/O,可以节省大量时间。另一方面,Spark是基于MapReduce算法模型实现的分布式并行计算框架,使用Spark编程模型并行化处理范围查询算法,可以将一个作业方便地被拆分成多个子任务同时进行处理。利用内存计算结合分布式处理的方案可以提升整体的查询性能。
基于上述技术方案,本发明总体上解决了在对大规模空间数据执行查询操作时,由于HBase非行键查询效率较低而导致整体性能受到影响的问题。HBase通过行键比不通过行键的全表扫描方式查找数据所需的时间差很多,前者在毫秒级可实现,后者则需要几秒甚至更多。因此,对于非行键的查询,还是要先通过计算得到行键,再去查询,更方便和省时。本发明的二级索引的构建过程和空间范围查询算法的执行过程是基于Spark分布式计算框架来实现的,Spark的优势就是快速的计算能力。它将索引以RDD的形式存放在内存中,查询索引文件时不需要频繁的进行磁盘I/O。另外,本发明提出的二级索引模型采用分布式倒排索引结构结合空间编码技术,具有扁平式、松耦合的结构特性,天然支持分布式。在该索引的支持下,使用Spark编程模型并行化处理范围查询算法,将一个查询作业拆分为多个子任务同时进行查询。上述这种分布式处理结合内存计算的方式使得查询效率得到极大的提升。
附图说明
图1二级索引示意图;
图2基于二级索引的查询框架示意图;
图3基于Spark二级索引的查询框架示意图;
图4空间二级索引结构示意图;
图5二级索引构建模型示意图;
图6基于行键和过滤器查询的效率示意图;
图7基于二级索引的查询性能示意图;
图8 GeoHash编码精度对范围查询性能的影响示意图;
具体实施方式
空间索引可以解决空间数据近邻查询问题,但是不能解决非行键属性实时范围查询的问题。为了解决这一问题,本发明基于HBase提出了一种新的二级索引方案,并基于Spark构建此索引和优化空间范围查询算法。内容安排如下:首先,介绍基于二级索引方案的查询框架,并提出空间索引结构的模型。然后,基于Spark实现该索引结构,并优化范围查询算法。最后,通过实验证明了在大规模空间数据的环境下,本发明提出的二级索引的可扩展性较好且基于该索引的范围查询算法在查询时间上快于基于Solr方案的范围查询算法。
现有的二级索引方案
HBase是基于key-value存储模型来存储表中数据。HBase自身为Rowkey列建立了类B+树结构的索引树来加快数据访问的效率,对非Rowkey列并没有提供任何索引功能的支持。为了达到高效访问非Rowkey列的目的,我们为待查询的非Rowkey列建立索引,该索引被称为二级索引。
现有的二级索引的设计灵感来源于倒排的思想,将主数据表的键值对倒置。如图1所示,基于HBase的key-value存储模型为待查询的非Rowkey列的属性值和其所在行的Rowkey值建立映射关系,应用这一映射信息找到每一行的Rowkey后再从主数据表中查找其他信息。
Solr是一个高性能的基于Lucene的企业级全文搜索服务器,Solr+HBase的二级索引方案是基于Solr集群搭建的搜索引擎来查找结构化数据,基于HBase搭建的数据存储云来存储海量数据。其搜索引擎底层采用倒排索引结构将HBase唯一标识Rowkey和索引列关联。基于Solr二级索引查询的原理如图2,在Solr中为HBase表中的查询条件和Rowkey建立映射,Solr强大的文本检索能力支持Rowkey值的快速筛选,拿到筛选后的Rowkey值后再到HBase中快速扫描到Rowkey及其他列族。
借鉴Solr数据索引和基础存储分离的思想,本发明提出了融合Spark查询框架和空间索引技术的实时查询方案,来提高大规模空间数据范围查询的效率。在以下实施例中,将详细介绍基于Spark的查询框架以及此查询框架的优势。
基于Spark的查询框架
如图3,基于二级索引的通用查询框架由以下几部分组成:客户端、Spark计算模块、HBase数据处理模块。
在HBase和Spark的Schema基础上调用SparkContext提供的API建立HBase的原始数据的RDD,RDD经过不断转化形成二级索引存放在SparkMemory中。根据客户端的查询请求并行筛选二级索引模块,筛选出满足查询条件的Rowkey后从HBase中查询数据并返回结果给客户端。在该查询框架内的Spark担任实时计算的角色,二级索引以RDD的形式供查询实时调用。Spark强大的分布式内存计算优势能极大地提高大规模数据处理的速度。
二级索引结构
空间索引:前面对Spark的计算模型进行了介绍。空间二级索引和Spark分布式内存计算框架的融合是本发明关注的重点。因此,本发明的空间索引结构应选用适合使用Spark并行计算框架构建的索引结构,再尽可能地利用空间对象的形状与位置或是各空间要素间的拓扑关系过滤掉大量和查询区域不相关的数据来提高范围查询的速率。
本发明的前文介绍了倒排索引相比于树结构在分布式化方面具有优势,因而能够融合Spark并行计算框架。另外,其在文本检索方面的优势可以加速云环境下的数据检索的效率。因此,本实施例的二级索引也采用此种索引结构。
传统的R树、四叉树、k-d树等空间数据索引结构在处理小规模数据时能表现出很好的性能,而在NoSQL平台上应用的发展速度较慢。而基于分形理论且具有一维特性的空间编码技术被NoSQL平台广泛选用。图1中展示了多维数据建立索引的模型,如果要对多个列的值查询,比如要查询关于name1和birthday2的数据,需分别在name和birthday的索引中查询,然后对索引的值做布尔运算,求取交集或并集。显然,此种索引方式必然会带来空间资源和计算资源的浪费。我们在前文介绍的空间编码GeoHash技术,刚好可以解决这个问题。GeoHash是空间范围查询中常用的空间索引技术[44],它是将地球划分为多个大小相同的网格。地理位置上相邻近的空间对象的GeoHash编码也大都相似或相同,锁定一个编码就等同于锁定多个空间对象。相比于其他空间数据编码技术,GeoHash计算简便也较容易实现。因此,针对资源浪费的问题,本发明在保持空间对象地理信息的拓扑关系的基础之上,选用GeoHash将针对二维空间数据的范围查询问题转换为针对一维数据的查询。
综合上述索引的优势,本发明将倒排索引和GeoHash算法结合形成InvertedGeoHash(IG)索引,下一实施例将详细介绍IG索引的模型。
二级索引
地球上的空间可以划分成多个矩形网格,每个空间数据对象可以归属在一个网格内,按照划分精度的高低,每个网格可能会包含n(n∈[0,+∞])个空间数据对象。本发明利用GeoHash算法将地球划分成多个网格,对每个网格中的空间数据对象构建如图4所示的空间二级索引,通过每个网格的GeoHash编码反向索引其包含的空间对象的Rowkey。使用GeoHash算法和Base32编码对空间数据地理信息降维得到的一维字符串作为二级索引的key,每个空间数据在HBase表中的行键信息作为二级索引的value。GeoHash划分的矩形区域中,每一个区域都有固定的编码,同一个区域内的点编码都相同,有利于高效地检索区域内的点。图4中下灰色区域内的两个点拥有同一串编码,这一串编码既可以代表这两点,也可以代表这个矩形网格。查询这一串编码,即可得到该区域内所有数据对象。
通过改变GeoHash编码的长度可改变矩形区域的覆盖范围,想要查询较大的范围,GeoHash编码可以较短,每个矩形区域覆盖的面积更大;想要查询较小的范围,GeoHash编码可以较长,每个矩形区域覆盖的面积更小。因此,不同的GeoHash编码的精度会覆盖不同面积的矩形区域,最后直接影响矩形区域内空间对象的数量和矩形区域的总量。在空间数据范围查询中,当半径d固定时,查询较大矩形区域能够减少读取的时间,而较小的矩形区域能够避免冗余数据的扫描。可见,能平衡各影响因素的GeoHash编码精度具有较好的性能优化能力。
倒排GeoHash索引包含两部分:第一部分,是空间数据对象与其所在的GeoHash网格的映射;第二部分,是网格编码与存储在其中的所有数据对象的映射。倒排索引的结构是为了高效地利用数据对象间的几何关系索引其本身。在空间范围查询的应用中,可以粗略计算出大致的范围,将value中存储的队列元素作为候选结果列举出来,进而筛选出该范围内和范围外的空间对象。综上,本发明的索引有以下优点:
(1)支持海量数据和分布式:从几何结构上来看,该索引具有扁平式、松耦合的结构特性,天然支持分布式。
(2)资源利用率:与以单维空间信息作为独立索引单元的索引模型不同,新型的索引模型选用网格及其覆盖的所有空间对象组成基本的索引单元,大大降低了计算成本和空间成本。
下一实施例将介绍Spark分布式内存计算框架和空间索引技术结合的方法,包括如何并行构建二级空间索引和优化范围查询算法,解决海量HBase非行键的空间数据的查询问题。
空间查询算法
Spark与MapReduce框架相类似,二者都面向大规模数据的批处理操作。但也存在很大的差异,Spark的核心是RDD,可以将其理解为一种特殊的数据结构。整个Spark作业是通过对RDD的操作来完成的。Spark将Job作业的中间结果放在内存中,以此来减少磁盘的I/O,达到性能的提升。因此,基于该模型可以实现高效的交互式查询和迭代型作业。本节将详细介绍如何融合Spark的RDD数据结构来实现分布式索引和分布式范围查询算法。
基于Spark的二级索引
通过前文的分析,本发明提出的二级索引结构适合并行化构建。Spark分布式计算框架基于内存计算的优势,适合批量构建二级索引。本实施例提出一种云数据管理模式下的基于Spark编程模型构建二级索引的方式,如图5和算法1所示,构建过程分为以下4步。
(5)parquet算子。使用read.parquet加载数据信息并创建parquetRDD(算法1第1-2行)。有了RDD后,可以调用各种API来实现所需的业务功能。parquet是一种列式存储格式的文件类型,Spark天然支持parquet文件格式。将要读取的数据以parquet类型存取,直接跳过部分数据来获取所需要的数据,得到更好的扫描性能。
(6)mapPartitions算子。使用该算子并行在每个分区调用geoHash算法的API,将parquetRdd转换成mapPartitionRDD(Rowkey,GeoHashCode),数据类型是key-value对形式的(String,String)(算法1第3行)。Rowkey为该空间数据对象在HBase中的主键,作为key,GeoHashCode为该空间对象经过降维转码后的编码,作为value。mapPartitions函数获取了每个分区的迭代器并通过该分区整体的迭代器来对整个分区执行map操作。mapPartitions类似于map算子,它是将调用的函数应用于每个分区中,相比于map算子将输入函数作用于每一个元素,mapPartitions在大数据下初始化资源的开销要少很多。
(7)partitionBy算子。给partitionBy算子传入RangePartitioner,来给RDD重新分区,该过程数据类型不变(算法1第4行)。该算子是Shuffle过程,根据key的范围进行分区,将小于最大值的多个key归到同一个分区内。RangePartitioner是Partitioner的实现类,保证了每个分区内的数据量均匀,分区数目根据数据量大小来定,另外,RangePartitioner中的rangeBounds函数记录了每个分区内key的范围。
(8)mapPartitionWithIndex算子,通过该算子访问各自分区的所有空间对象,然后并行创建索引(算法1第5-8行)。该算子将当前RDD转化为indexRDD(GeoHashCode,Rowkey),数据类型是(String,String)的键值对。该过程调用index对象的createIndex方法,创建该空间对象的倒排索引。
基于Spark的范围查询算法
本实施例在Spark框架下利用二级索引解决HBase非行键空间数据的范围查询问题。本实施例首先来介绍范围查询算法的相关定义,然后介绍算法的实现过程。
定义6:空间范围查询
给定一个空间对象集合S,再给定一查询点P=(Lng,Lat)和查询半径d,在集合S中存在集合R={R1,R2...Ri}与查询点P距离小于d,记为RQ(P,S):
本发明的范围查询算法使用两阶段处理策略,第一阶段是索引的筛选,首先需要计算出查询目标大致所在的GeoHash单元网格,称作MBR(最小边界矩形),通过查找RDD中的索引表单元筛选出所有MBR作为候选集,第二阶段是遍历求精,通过二次计算与查询点的距离从候选集中求得满足查询要求的最终结果。上一节构建的索引转为RDD的形式被存储到内存中。在进行范围查询的时候,利用Spark的转化操作算子mapPartitions并行执行查询任务。
在空间二级索引的支持下,基于Spark的范围查询的详细过程如算法2所示。已知查询点p的空间位置信息和查询范围d。首先,调用geo对象的getGeoCode方法,此方法封装了以给p为圆心,d为半径画圆,返回落在圆内和与圆相交的编码区域,得到结果集所在的GeoHash编码区域集合Kn(算法2第1行)。然后,子节点收到task任务后对空间索引RDD的分片进行检索,将检索结果并入结果集(算法2第2-5行),最后,通过再次扫描筛掉结果集中实际距离大于查询范围d的数据,并返回最终结果(算法2第6-7行)。
实验结果与分析
本实施例将通过具体实验来验证基于二级索引的范围查询算法的性能,并分析影响算法性能的因素。首先介绍实验的数据集、默认的参数以及实验环境的相关设置。然后给出性能评估的结果和实验结果的分析。
1实验环境
本节的实验使用6台虚拟机搭建的集群作为实验环境。集群使用主从模式管理,1个master节点与6个slave节点。每台虚拟机上安装Spark2.2.1、HBase1.3.1和Hadoop2.7,操作系统使用CentOS7,8核CPU,32G内存,600G硬盘。使用Solr集群,来完成对比实验。
实验数据来源于OpenStreetMap[56]公开数据集,从GPS数据中选取16*106个数据对象。每个数据对象包含纬度坐标、经度坐标、数据对象ID、时间戳等70个属性。数据集大小约为10GB。
2性能评估
在面向实际空间数据查询中,往往面临多种影响因素,比如数据量大、高维度、查询范围不确定性等,这些因素将直接或者间接的影响查询的性能。本节从二级索引的必要性、范围查询算法的查询效率以及影响查询性能的因素等方面分析方案的整体性能。
(1)二级索引的必要性
本实验通过查找Rowkey=370437256,内容包含46.528183654,15.496752146,2018-11-24T06:30:33Z的这条记录,来评估随着集群节点变化,使用行键和不使用行键两种方式查找非行键记录的效率。
如图6,通过行键查询数据在毫秒级时间内可实现。而不使用行键的查询,实际上是基于HBase自带过滤器进行全表扫描,查询时间是秒级的。因此,在查询前建立二级索引得到行键是十分必要的。另外,随着集群节点数由小到大改变,两种方式的查询时间几乎呈线性趋势减少。这主要是因为系统自动地将一个任务拆解成了更多的任务,分给多个集群计算节点同时进行并行处理的效果。
(2)数据量对范围查询效率的影响
本实验主要评估基于Spark平台的IG索引的范围查询和基于Solr索引的范围查询的效率。如图7,本实验通过改变数据点的个数,对比两种方案查找Rowkey的时间。图中纵轴表示查询Rowkey的时间T,单位是ms,横轴表示数据点个数,数据点个数是横轴的值*106。实验输入查询点位置和查询半径d=500,执行算法返回以查询点为圆心,以查询半径d=500米内所有符合条件的Rowkey。
实验的结果证明,本发明的方法比基于Solr索引的范围查询花费更少的时间。当数据点为16*106个时,基于Spark的IG索引的查询性能较基于Solr的二级索引的查询提高了约32%。这主要是因为本发明的索引以SparkRDD的形式保存,保证查询任务在内存中无缝地集成和计算。随着数据量增多,本发明的方法查询时间增加的不明显,性能稳定,Solr的性能越来越差。这是因为Spark要经过任务提交、stage划分以及生成最优逻辑结构,最后才分配到excuter执行任务,这部分时间比较固定,不会随着数据量增多而变化,Spark在面向大规模数据处理具有较好的性能。而Solr存储索引数据占用空间越来越大,并且索引更新速度非常慢,查询性能急剧下降。
(3)影响查询性能的因素
GeoHash编码精度是影响查询算法的性能的重要因素。查询半径d一定,编码精度决定每个编码区域覆盖面积的大小、覆盖数据点的个数、索引筛选的代价、遍历求精的代价。本组实验通过编码精度的变化来分析它对查询性能产生的影响,从而寻找最佳的编码精度。
本组实验编码精度选取5到9之间的整数,查询半径d分别为100,500,1000米。由图8可得,当查询半径一定时,编码精度为6或7时,查询算法的性能最好。这是因为,此时影响查询性能的各方面因素综合起来处于一个代价最平均的状态。当查询半径固定时,编码精度越低,每个编码区域面积越大,导致查询较多的冗余数据,虽然索引筛选阶段的代价降低,但遍历求精阶段的代价升高,最终并不能有效的提升查询性能;反之,编码精度越高,每个编码区域面积越小,索引筛选阶段的代价升高,但遍历求精阶段的代价降低。当编码长度达到9时,实际距离可精确到2米。但如果编码精度过高,会导致编码区域的数量急剧增加,此时增加精度实际上对于减少筛选区域的作用已经不大,持续增加反而会影响查询性能。
由上述,本发明对基于Spark二级索引的范围查询算法的设计与实现进行了详细介绍,首先分别介绍了整体方案的架构、二级索引的结构;然后给出了基于Spark构建IG索引的方法,并将之应用在范围查询算法上;最后验证了本发明构建的索引方案比基于Solr的方案执行查询算法消耗的时间少,因此该索引是值得构建的。
以上所述,仅为本发明创造较佳的具体实施方式,但本发明创造的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明创造披露的技术范围内,根据本发明创造的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明创造的保护范围之内。
Claims (3)
1.一种大规模空间数据环境下基于二级索引的通用查询方法,其特征在于,框架由以下几部分组成:客户端、Spark计算模块、HBase数据处理模块;该方法执行步骤如下:在HBase数据处理模块和Spark计算模块的Schema基础上调用SparkContext提供的API建立HBase的原始数据的RDD,RDD经过不断转化形成分布式二级索引存放在Spark Memory中;根据客户端的查询请求并行筛选二级索引模块,筛选出满足查询条件的Rowkey后从HBase中查询数据并返回结果给客户端;其中Rowkey为空间数据对象在HBase中的主键;
将倒排索引和GeoHash算法结合形成Inverted GeoHash索引,其模型为IG索引的模型,该模型的倒排GeoHash索引包含两部分:第一部分,是空间数据对象与其所在的GeoHash网格的映射;第二部分,是网格编码与存储在其中的所有数据对象的映射;利用GeoHash算法将地球划分成多个网格,对每个网格中的空间数据对象构建空间二级索引,通过每个网格的GeoHash编码反向索引其包含的空间对象的Rowkey,使用GeoHash算法和Base32编码对空间数据地理信息降维得到的一维字符串作为二级索引的key,每个空间数据在HBase表中的行键信息作为二级索引的value,GeoHash划分的矩形区域中,每一个区域都有固定的编码,同一个区域内的点编码都相同,通过改变GeoHash编码的长度改变矩形区域的覆盖范围;
由Spark编程模型构建二级索引:
(1)使用read.parquet加载数据信息并创建parquetRDD;
(2)使用parquetRDD并行在每个分区调用geoHash算法的API,将parquetRDD转换成mapPartitionRDD(Rowkey,GeoHashCode),数据类型是key-value对形式的(String,String);
(3)给partitionBy算子传入RangePartitioner,来给RDD重新分区,该过程数据类型不变;其中RangePartitioner是Partitioner的实现类;
(4)通过该算子访问各自分区的所有空间对象,然后并行创建索引。
2.如权利要求1所述的大规模空间数据环境下基于二级索引的通用查询方法,其特征在于,在Spark框架下,利用二级索引对HBase非行键空间数据的范围查询算法:
给定一个空间对象集合S,再给定一查询点P=(Lng,Lat)和查询半径d,在集合S中存在集合R={R1,R2...Ri}与查询点P距离小于d,记为RQ(P,S):
范围查询算法使用两阶段处理策略,第一阶段是索引的筛选,首先需要计算出查询目标大致所在的GeoHash单元网格,称作MBR,通过查找RDD中的索引表单元筛选出所有MBR 作为候选集,第二阶段是遍历求精,通过二次计算与查询点的距离从候选集中求得满足查询要求的最终结果;将构建的索引转为RDD的形式被存储到内存中,在进行范围查询的时候,利用Spark的转化操作算子mapPartitions并行执行查询任务。
3.如权利要求2所述的大规模空间数据环境下基于二级索引的通用查询方法,其特征在于,在空间二级索引的支持下,基于Spark的范围查询的详细过程如下:已知查询点p的空间位置信息和查询范围d;首先,调用geo对象的getGeoCode方法,此方法封装了以给p为圆心,d为半径画圆,返回落在圆内和与圆相交的编码区域,得到结果集所在的GeoHash编码区域集合Kn;然后,子节点收到task任务后对空间索引RDD的分片进行检索,将检索结果并入结果集;最后,通过再次扫描筛掉结果集中实际距离大于查询范围d的数据,并返回最终结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910456427.5A CN110147377B (zh) | 2019-05-29 | 2019-05-29 | 大规模空间数据环境下基于二级索引的通用查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910456427.5A CN110147377B (zh) | 2019-05-29 | 2019-05-29 | 大规模空间数据环境下基于二级索引的通用查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110147377A CN110147377A (zh) | 2019-08-20 |
CN110147377B true CN110147377B (zh) | 2022-12-27 |
Family
ID=67593742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910456427.5A Active CN110147377B (zh) | 2019-05-29 | 2019-05-29 | 大规模空间数据环境下基于二级索引的通用查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110147377B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113377883A (zh) * | 2020-06-15 | 2021-09-10 | 浙江大学 | 一种基于学习索引模型的多维数据查询方法 |
CN111723096B (zh) * | 2020-06-23 | 2022-08-05 | 重庆市计量质量检测研究院 | 一种集成GeoHash和Quadtree的空间数据索引方法 |
CN112052253B (zh) * | 2020-08-12 | 2023-12-01 | 网宿科技股份有限公司 | 数据处理方法、电子设备及存储介质 |
CN113761017A (zh) * | 2021-01-28 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 相似性搜索方法和装置 |
CN112966036B (zh) * | 2021-03-10 | 2023-02-21 | 浪潮云信息技术股份公司 | 一种基于逻辑模型构建主数据服务的方法 |
CN114048204A (zh) * | 2021-09-28 | 2022-02-15 | 中科星图股份有限公司 | 基于数据库倒排索引的北斗网格空间索引方法和装置 |
CN116028500B (zh) * | 2023-01-17 | 2023-07-14 | 黑龙江大学 | 一种基于高维数据的范围查询索引方法 |
CN117076726B (zh) * | 2023-09-14 | 2024-06-07 | 上海交通大学 | 基于光线追踪相交的近似近邻搜索方法、系统、介质及设备 |
CN117992562B (zh) * | 2024-03-28 | 2024-08-02 | 阿里云计算有限公司 | 数据处理方法、数据查询方法、计算设备、存储介质及程序产品 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107066511A (zh) * | 2017-01-20 | 2017-08-18 | 龚杰 | 一种分布式时间序列地理信息服务系统及方法 |
CN109299102A (zh) * | 2018-10-23 | 2019-02-01 | 中国电子科技集团公司第二十八研究所 | 一种基于Elastcisearch的HBase二级索引系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8892569B2 (en) * | 2010-12-23 | 2014-11-18 | Ianywhere Solutions, Inc. | Indexing spatial data with a quadtree index having cost-based query decomposition |
-
2019
- 2019-05-29 CN CN201910456427.5A patent/CN110147377B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107066511A (zh) * | 2017-01-20 | 2017-08-18 | 龚杰 | 一种分布式时间序列地理信息服务系统及方法 |
CN109299102A (zh) * | 2018-10-23 | 2019-02-01 | 中国电子科技集团公司第二十八研究所 | 一种基于Elastcisearch的HBase二级索引系统及方法 |
Non-Patent Citations (1)
Title |
---|
云计算环境下的大规模空间近邻查询算法研究;季长清;《中国博士学位论文全文数据库》;20151115(第11期);第1-80页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110147377A (zh) | 2019-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147377B (zh) | 大规模空间数据环境下基于二级索引的通用查询方法 | |
CN110175175B (zh) | 一种基于spark的分布式空间二级索引与范围查询算法 | |
Yu et al. | Spatial data management in apache spark: the geospark perspective and beyond | |
Xie et al. | Simba: Efficient in-memory spatial analytics | |
CN105589951B (zh) | 一种海量遥感影像元数据分布式存储方法及并行查询方法 | |
Pandey et al. | The case for learned spatial indexes | |
Lu et al. | Scalagist: Scalable generalized search trees for mapreduce systems [innovative systems paper] | |
CN106528773A (zh) | 一种基于Spark平台支持空间数据管理的图计算系统及方法 | |
Hubail et al. | Couchbase analytics: NoETL for scalable NoSQL data analysis | |
CN102063486A (zh) | 一种面向多维数据管理的云计算平台查询处理方法 | |
Hsu et al. | Key formulation schemes for spatial index in cloud data managements | |
Ji et al. | Inverted grid-based knn query processing with mapreduce | |
Song et al. | Solutions for processing k nearest neighbor joins for massive data on mapreduce | |
Singh et al. | A survey of traditional and mapreducebased spatial query processing approaches | |
Zhang et al. | Dart: A geographic information system on hadoop | |
Moutafis et al. | Efficient processing of all-k-nearest-neighbor queries in the MapReduce programming framework | |
Su et al. | Indexing and parallel query processing support for visualizing climate datasets | |
Shanoda et al. | JOMR: Multi-join optimizer technique to enhance map-reduce job | |
Zheng et al. | Repose: distributed top-k trajectory similarity search with local reference point tries | |
Brahem et al. | Astroide: a unified astronomical big data processing engine over spark | |
Sahal et al. | Comparative study of multi-query optimization techniques using shared predicate-based for big data | |
Tian et al. | A survey of spatio-temporal big data indexing methods in distributed environment | |
CN102831225A (zh) | 云环境下的多维索引结构、其构建方法及相似性查询方法 | |
Liu et al. | Parallel bulk-loading of spatial data with MapReduce: An R-tree case | |
Wang et al. | HCIndex: a Hilbert-Curve-based clustering index for efficient multi-dimensional queries for cloud storage systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |