一种提升空间查询分析性能的并行计算优化方法

2021-09-22 06:13田冬迪
电子技术与软件工程 2021年15期
关键词:空间数据线程开源

田冬迪

(上海师庆科技发展有限公司 上海市 201103)

“互联网+”时代背景下,伴随着物联网、大数据、区块链等技术概念的发展和衍变,空间数据呈现海量、异构、数据源众多[1]、多样化的趋势,将其空间位置属性应用于非实时数据支撑亦或是实时数据应用探索[2]以及隐藏空间信息挖掘,商业价值和社会价值有无限的可能性。基于地理信息和空间位置的业务系统应用随着各行业的发展日益增多,由此形成的空间数据需要通过建立空间数据库进行高效的存储、管理、运维。空间数据库是以空间数据作为存储对象的专业数据库[3],其发展经历了从平面文件(Flat-file)、关系数据库(RDBMS)、对象关系数据库(Object Relational Database)的演变过程[4]。空间数据库将空间数据与对象关系数据库的集成,真正实现了以GIS为中心向以数据库为中心的转变,同时也为通过SQL语言操作空间数据奠定了基础。PostgreSQL开源数据库以其开源特性和成本优势及可扩展的结构,并支持PostGIS空间数据引擎和空间数据模型理论[5],为实现空间数据的分析、建模、空间信息挖掘提供了新的技术路线及方法,在成本、质量、可拓展性上优于大型商用数据库[6]。在空间查询分析方面,相较于分布式解决方案,加载PostGIS的PostgreSQL可以通过支持单台计算机多线程并行计算的形式优化运行效率,为空间数据查询分析以及地理信息系统平台开发应用提供了新的解决方案,同时也拓展了开源生态链并丰富了开源生态系统。

本文研究探索以点、线、面多元空间要素数据为研究对象,借助PostgreSQL加载PostGIS开源数据库引擎建立了不同数据量级的空间数据库,通过Python构建多线程并行计算的方法,实现对PostgresSQL/PostGIS的空间查询运行效率的优化。

1 PostgreSQl/PostGIS开源空间数据库数据组织管理

1.1 空间数据类型的构成

PostgreSQL对空间数据的存储、管理及服务支持是通过PostGIS来实现的,遵循OpenGIS联盟(OGC)的规范,支持的GIS对象是OGC定义的“SimpleFeatures(简单要素)”标准的超集;同时支持OGC“SimpleFeaturesfor SQL”规范(SFS)中指定的所有对象和函数,同时也支持"SQL/MM"规范的几何对象。PostGIS扩展了该标准,支持嵌入式SRID信息[7]。在Geometry对空间数据的存储使用了OGC推荐的WKT(Well-Known Text)和WKB(Well-Known Binary)格式表达集合对象,大幅增加了易用性。PosGIS支持WKT的7个基本空间数据类型:Point(点)、Linestring(线)、Polygon(多边形)、MultiPoint(多点)、MultiLinestring(多线)、MultiPolygon(多多边形)和Geometry Collection(几何集合)等。空间数据组织结构图如图1所示。

图1:空间数据类型组织结构图

1.2 空间索引的构建与应用

空间索引的建立为空间数据库对海量空间数据集的查询分析应用奠定了基础。PostgreSQL数据库支持B-Treeindexes、R-Treeindexes和GiST indexes 3种索引。GiST用于广泛的数据结构,可加快各种不规则数据结构(整形数组,光谱数据等)的查询速度,包括空间数据。PostGIS是在GiST的基础上实现R-Tree去索引地理数据,将数据切分为矩形,子矩形,子子矩形等,通过自动处理可变的数据密度和对象大小的自协调的索引结构,极大提高了了构建空间连接时表比较的效率。

在构造空间查询优化并行计算方法时,需要根据空间索引对预选的分析记录数进行等分,将输入查询数据分成若干子组,由不同的处理器核进行处理,通过并行计算对数据集的不同部分调用相同的SQL查询来执行。由于SQL查询的并行执行,该方法在PostgreSQL/PostGIS数据库空间索引限制的基础上,计算过程中不需要磁盘写入操作的情况下选择数据集的特定部分,将SQL查询结果以变量的形式返回到不同的数据集中,最终组合成一个完整的数据集,并保存到单独文件中的磁盘或参与分析的数据库中。

1.3 空间关系判定函数

维数扩展的9交集模型(DE-9IM,The Dimensionally Extended nine-Intersection Model)是用于描述两个空间对象在空间位置上相互交互的框架,其定义空间对象的内部、边界、外部形成相交、相等、相离的空间位置关系。PostGIS依据OGCSFS扩展了DE-9IM作为空间拓扑关系表达的基础,同时,根据OGCSFS定义的空间关系谓词,PostGIS提供了以下空间关系判定的函数(如表1所示)。

表1:PostGIS空间关系判定函数

2 空间查询并行计算优化方法

2.1 并行计算SQL空间查询方法构建

本文所采用的空间查询优化方法是通过Python编程语言,通过Python multiprocessing package以支持SQL查询的并行操作,并加载PostgreSQL数据库适配模块Psycopg2实现的。在空间查询优化并行计算方法实践中,采用对图层间DE-9IM拓扑结构分析为例,返回结果记录数量基于空间索引构建空间连接的表比较来估计。首先,计算空间查询分析所涉及的所有对象记录条数,平均分配至各参与计算线程数,以此确定单个分析线程处理的数据量。然后,通过空间索引建立表与表之间的逻辑测试,获取参与查询分析的记录数量,将其平均分配至参与计算的所有进程中执行空间关系判定函数运算。计算结果以数据列表形式存储于变量中用以输出。并行计算方法流程图如图2所示。

图2:并行计算方法流程图

2.2 实例空间数据及其结构

为完整的测试PostgreSQL/PostGIS空间查询分析性能,选取不同空间尺度的点、线、面数据:上海市闵行区、上海市、长三角地区、中国行政区划全域,数据来源于全国地理信息资源目录服务系统(https://www.webmap.cn/)、地理空间数据云(http://www.gscloud.cn/)以及OpenStreetMap(https://www.openstreetmap.org/),以此构建了四个量级的数据库,数据库结构如表2所示。

表2:空间查询优化实例数据库结构

2.3 测试环境配置参数

搭建的空间查询优化并行计算方法测试环境是装载Microsoft Windows 10(64位)操作系统的台式计算机上实现的。硬件配置信息如表3所示。

表3:测试环境硬件配置信息

3 并行计算空间数据查询实例分析

3.1 优化性能测试

本文构建的基于并行计算的空间查询优化方法是对存储在四个不同量级开源空间数据库中的三种类型空间数据进行空间拓扑关系判定查询作为实例进行分析的。在实际运行过程中,对选取的空间数据类型进行组合,组合关系如表4所示。

表4:空间数据查询类型组合

通过并行计算执行优化查询方法,单线程与多线程的执行时间记录从查询开始到以满足特定空间关系的对象数(即统计计数)获得返回结果为止。在执行过程中没有考虑在数据库中记录分析结果可能花费的时间,但分析结果必须记录在一个线程中。表5所示基于单线程和多线程空间查询返回结果时间,在多线程处理的情况下,构建空间索引与向各线程平均分配执行查询任务的时间也记录在内。

表5:并行计算空间数据查询实例分析结果

3.2 运行效率对比分析

将使用4个线程与单线程执行的空间关系判定查询的性能分析结果的比率作为执行查询效率分析评价的依据,若该比率趋近于0则表明采用多线程的方法执行查询的效率比单线程高;反之,若该比率趋近于1则表明采用多线程的方法执行查询的效率比单线程低。图3以柱状图的形式说明了各空间数据类型组合由并行计算空间数据查询实例效率的结果,总体趋势上来说,与单线程处理相比使用多线程时空间查询的性能增加。

图3:并行计算空间数据查询比率分析结果

图3中所反映出的空间查询执行效率可以得出,空间查询性能的增长于数据库量级大小并非完全呈线性关系,这种非线性增长是由于在触发并行计算执行查询任务时,每个线程直接所分配的任务不均造成的。另外,执行空间查询分析的空间数据类型不是同质的也造成这一现象的原因;空间数据结构复杂,作为对象的簇被分配给某个计算线程时,导致该线程承受较大的负载。实现该并行计算的限制是可用于在Python变量中存储结果的RAM容量,如果SQL查询得到的结果大于可用RAM容量,则查询分析效率会因内存与磁盘的交换而明显降低。

4 结语

本文提出了一种使用Python编程语言实现PostgreSQL/PostGIS开源数据库进行空间关系分析的多线程显著提升空间查询分析性能的优化方法。实例测试结果表明,与单线程处理相比并行计算的空间查询分析性能明显提升,且空间查询分析性能与参与并行计算的线程数并非呈完全线性相关关系;另一层面,随着分析中使用空间数据量级的增加,空间查询性能也相应的提高。在空间查询并行计算优化方法执行中,如何更精准的分配每个线程承载计算的数据量是进一步提升空间查询性能的关键因素。

对于空间数据Shapefile文件格式是空间数据的存储和交互的标准方式,但Shapefile作为平面文件需要专业的应用应用程序才能读写且不支持并发操作。而空间数据库系统采用SQL语句对空间数据进行查询、分析、修改等操作,同时支持并发操作以满足提升空间数据处理效率及异步访问的问题,在进行复杂的空间查询和对大型数据集数据处理时,更凸显了空间数据库比平面文件的优越之处。在此基础上,PostgreSQL/PostGIS空间数据库平台以开源的特性极大满足了用户在空间数据分析处理中的需求,并行计算的优化将进一步提升其空间查询性能,使其在空间数据管理、空间位置服务、GIS应用系统开发等落地实践中得以广泛应用。

猜你喜欢
空间数据线程开源
五毛钱能买多少头牛
浅谈linux多线程协作
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
元数据驱动的多中心空间数据同步方法研究
开源计算机辅助翻译工具研究
基于文件系统的分布式海量空间数据高效存储与组织研究
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
客户端空间数据缓存策略
多源空间数据同名实体几何匹配方法研究