PGIS海量空间数据加载方法研究

2018-11-26 09:33于晓昀
电脑知识与技术 2018年23期

于晓昀

摘要:随着空间数据的不断膨胀,在PGIS中进行空间分析与图形展示会出现数据读取慢和客户端图形加载时延长的问题。为解决以上两个问题,该文从数据读取的角度提出了使用分布式文件存储数据库MongoDB快速读取数据的方案;从服务器端分析和客户端加载的角度研究了地图-像素映射快速抽稀算法。实验结果表明,在亿级数据量下,数据读取速度较传统关系型数据库可提升10-20倍,抽稀算法在保持数据特征的同时能够加快客户端图形的加载速度,可显著优化PGIS的图形加载性能。

关键词:PGIS;MongoDB;抽稀算法

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)23-0041-02

Abstract: With the continuous expansion of spatial data, problems as slow data reading, lazy loading in client-side and slow responding to users may occur during data analysis and graphical presentations in PGIS. In this paper, the solutions were proposed from three perspectives to solve the two problems. The non-relational database MongoDB was used for faster data access from the perspective of data reading; maps - pixel mapping fast thinning algorithm was proposed from the perspective of both server-side and client-side. Experimental results show that data reading speed can be increased by 10 to 20 times than traditional relational databases when reaching Billion level data. The thinning algorithm can not only maintain data characteristics but avoid rereading and reloading, and graphics loading performance of PGIS can be significantly optimized as well.

Key words: PGIS; MongoDB; thinning algorithm

1 背景

随着网络技术及地理信息技术的快速发展,基于PGIS的应用渗透到各类公安业务中。目前,公安部下发的最新PGIS版本为1.6,支持html5的新特性,采用Oracle存储空间矢量数据和警用业务数据。海量空间数据为公安业务应用提供了丰富的资源,与此同时也提出了挑战,人口规模在千万级的城市,其人口流动、住宿、移动警务等所获取的位置数据达到了亿级,庞大的数据量增加了PGIS中图形加载过程中数据读取、数据处理和客户端加载三个环节的负荷。1)数据读取速度慢。从海量空间数据中再次提取并使用数据的代价十分昂贵,传统的数据存储结构与读取方式无法满足快速读取数据的需求[1]。2)数据大量冗余。空间数据存在节点数据冗余过大问题,需要通过适当的抽稀算法进行去冗余处理,提取有效信息[2]。3)客户端加载超负荷。 客户端的图形负载性能存在瓶颈,无法承受海量空间数据的处理与展示,空间数据的可视化效果不佳[3]。

为了减少PGIS图形加载耗时,该文研究了基于MongoDB的空间数据快速读取方法来提升数据读取速度,通过设计服务器端的地图-像素映射快速抽稀算法去除数据冗余,到达减轻客户端加载负荷的目的。最后,通过实验手段验证该文所研究方法的有效性。

2 MongoDB空间数据读取

Oracle是目前主流的关系型数据库,发展得比较成熟,但是在海量数据读取方面存在瓶颈[4]。MongoDB是分布式文件存储数据库,在数据读取方面有明显优势[5]。

2.1 MongoDB空间数据存储结构

MongoDB是一种面向文档的数据库,存储结构为键–值对结构的松散Bson格式,支持地理空间索引的建立[6]。空间数据的基本类型包括点、线、面数据,具有定位、定性、时间和空间关系等特性。为直观研究MongoDB的性能,该文剥离了时间、属性等附加特性,着重研究无拓扑结构的点空间位置信息的读取效率。

PGIS在Oracle中采用Shape类型来存储空间数据,点数据的Shape结构为Point{Long,lat},将其转换为MongoDB的文档存取结构表示为{shape: {type:"Point",coordinates:[Long, lat]}},其中shape字段存放位置信息,子文档中的type表示空间数据类型,coordinates表示空间位置信息。

2.2 数据读取效率比对

该文分三步搭建比对环境。1)在MongoDB中建立Location_m数据集合,利用PGIS图层建库工具建立Location_o点空间图层。2)分别导入相同数量级、相同结构的空间数据。3)利用PGIS图层建库工具对Location_o图层的Shape字段建立空间索引,对Location_m集合中的shape字段建立地理空间索引,对二者的数据读取性能进行对比。由于Oracle中读取的数据量占数据总量的5%以上,索引效果不明显,为了达到更好的对比效果,該文中读取的数据量均控制在5%以内。图1-图2显示了MongoDB与Oracle 在千万级和亿级数据量下读取数据的性能。

从图中可以看出,同一数量级下,MongoDB和Oracle读取数据的耗时都随着读取数据百分比的增大而增大,但Oracle的耗时增长率大,在千万级数据下为13.57,在亿级数据下为66.9,在相同读取数据百分比下约为MongoDB的10~20倍。由此可见,在大数据读取方面MongoDB的具有显著优势。尽管在亿级数据下MongoDB的读取耗时相较千万级别数据的耗时也有显著增加,但在实际应用中在千万级数据下会进行分片处理[7],达到并行读取数据、优化性能的目的。

3 地图-像素映射快速抽稀算法

处理矢量数据时,某些位置的数据堆叠严重,不但增加了数据处理的耗时,而且降低了PGIS地图展示的流畅性和有效性。因此要通过某种规则,在基本保证能反映原数据特征的前提下,最大限度地去除冗余。常见的空间数据抽稀算法包括道格拉斯抽稀算法、垂直限距抽稀算法等,其中道格拉斯抽稀算法由于计算复杂,不适合进行大数量的计算[8],垂直限距抽稀算法虽然快速简便,但容易遗失特征点[9]。抽稀算法中通常选定某段地图距离作为抽稀阈值,而该文提出的抽稀算法着重考虑客户端图形展示时对两点分辨率的要求,因此选定地图上两点间的像素距离作为抽稀阈值,提出了设置圆形缓冲区对数据进行抽稀的思路,研究了地图-像素映射快速抽稀算法。

定义当前地图范围为Scalemap (MinPmap, MaxPmap, Spanmap,Spanpx),其中,MinPmap (minxmap,minymap)表示地图范围内的最小点,MaxPmap(maxxmap, maxymap)表示地图范围内的最大点,Spanmap(widthmap,heightmap)表示地图空间跨度, Spanpx(widthpx,heightpx)表示地图屏幕像素跨度;定义地图坐标点为Pointmap(xmap,ymap);定义像素坐标点为Pointpx(xpx,ypx)。以下将对图3中展示的算法详细流程进行说明。

1)地图参数初始化:初次运行算法,获取当前地图范围Scalemap;为避免数据的重复读取、处理与加载,再次运行算法时,若地图级别相同,获取与上次范围不重叠部分,否则重新进行地图参数初始化。

3)数据抽稀:

a.选定R个像素点为半径作为阈值,R的取值取决于图形展示时对两点分辨率的要求。

b.初始化抽稀队列,以{Pt}px中第1点置于抽稀队列{Pt}vacuate的首点。

c.以R作为半径设置圆形缓冲区,按序取出{Pt}px中的第i点,判断第i点是否在{Pt}vacuate任意点的缓冲区内,若点不在缓冲区内,则加入{Pt}vacuate中。

d.重复第c步至到达{Pt}screen队列尾部为止。

e.得到抽稀队列{Pt}vacuate。

4 结果与讨论

该文对提出的去冗余加载方法的评判依据包括以下几个方面:1)数据读取耗时;2)数据处理耗时;3)图形加载耗时;4)数据特征完整性。

固定视图像素跨Spanpx为(1360,600),固定阈值R=20像素,空间数据总量为1500万,选择任意区域中的点进行图形加载。表1展示了采用常规图形加载方法的耗时;表2展示了采用该文的去冗余加载方法的耗时,时间单位为秒(s)。

比较各个环节的耗时得到,该文的去冗余加载方法较常规图形加载方法在数据读取环节具有显著优势,两种方式随着读取数据量的增加耗时都有所增加;在数据处理上,常规图形加载方法对全量数据进行了数据转换,该文的去冗余加载方法对全量数据进行了抽稀后再进行转换,两种方法的耗时基本相近;在图形加载环节中,两种方法的耗时对比十分明显,当数据量达到10万以上后,常规图形加载方法的耗时接近2分钟,达到20万以上后,加载负荷过大而导致了客户端加载超时,反观该文的去冗余加载方法,由于在数据处理环节对数据进行了抽稀,大大减少了加载负荷。

纵观图形加载的三个环节,常规图形加载方法的耗时主要表现在数据读取和前端图形加载上,随着数据量的增大,前端图形加载耗时急剧增加,而该文的去冗余加载方法缩减数据读取耗时效果显著,并通过抽稀算法极大程度上去除了数据的冗余,使得前端图形加载耗时极小。由此可知,该文研究的去冗余加载方法能够显著缩短客户端图形加载耗时。

图4-图5所示为R=20像素时55000点的抽稀效果,图4显示了未进行抽稀时的加载效果,可以看出,图形堆叠现象严重,界面操作对象很难区分;图5显示了进行抽稀后的加载效果,相比于图4,很好地保持了点的分布特征,并且保留了特征点(图中标出),表明本抽稀算法在去除冗余的同时能够保持数据的特征。

5 结束语

该文研究了基于MongoDB的海量空间数据快速读取方法及服务器端的地图-像素映射快速抽稀算法,能够为基于PGIS的应用中的海量空间数据的快速加载提供解决思路和方法。

实际应用中可结合这些算法和策略,尽可能减轻客户端加载负荷,从而达到加快图形加载的目的,得到更加流畅的用户体验。

参考文献:

[1] 李清泉, 李德仁. 大数据GIS[J]. 武汉大学学报, 2014, 39(6):641-644, 666.

[2] 罗恩韬, 胡志刚, 林华. 一种大数据时代海量数据抽取的开发模型研究[J]. 计算机应用研究, 2013,30(11):3269-3271, 3275.

[3] 葉娜, 雒伟民, 张峰, 等. 基于WebGIS的图形加载性能优化研究[J]. 福建电脑, 2013(11):9-10, 103.

[4] 张华强. 关系型数据库与NoSQL数据库[J]. 电脑知识与技术, 2011, 7(20):4802-4804.

[5] 尤文辰,徐跃通,高尚. 浅析GIS大数据[J]. 电脑知识与技术, 2013, 9(24):5399-5402.

[6] Kristina Chodorow .MongoDB权威指南[M]. 2版. 北京: 人民邮电出版社, 2014.

[7] 梁海. MongoDB数据库中Sharding技术应用研究[J]. 计算机技术与发展, 2014,24(7):60-62, 67.

[8] 李帅, 方源敏, 喜文飞. 基于无拓扑矢量曲线的快速压缩算法[J]. 工程地质计算机应用, 2011,11(18): 4324-4327.

[9] 陈莉, 乔小艳, 毛建. 等高线抽稀算法研究[J]. 工程地质计算机应用, 2009(4):39-42.

【通联编辑:谢媛媛】