对GeoServer上的WFS的各种数据源查询效率感兴趣,做个测试。本次测试了Postgresql、geopackage、shp文件三种数据源的查询效率,无论是本机还是服务器环境,pg存储查询效率都比shp要好。

环境

  • 操作系统 本机=Windows 10 专业版 1903 服务器=Windows Server 2016

  • CPU 本机=i7 9700 服务器=L5xxx

  • 内存 本机&服务器 = 32GB

  • 硬盘 本机=512SSD 服务器=1TB机械

  • geoserver版本:2.16

  • pg版本:10.x

  • 网络环境:公司局域网

  • 代码测试环境:Cesium 1.68 原生自带的请求方法 Cesium.Resource.fetchJson()

  • 测试环境:Microsoft Edge 84.0.488.1 Dev

预备知识

  • WFS
  • WFS的cql_filter过滤条件

shapefiles数据信息

数据名 数据体积 数据量 EPSG 非OBJECTID属性个数
boundary_vill_sparse 67.9MB 31383 4490 12
village_mz_sparse 17.0MB 6246 4490 12

本文基于公司保密数据进行测试,就不提供数据了,感兴趣的朋友可以用全国县级数据进行模拟。

数据预览:

数据入库要求:

  • 均建立索引

wfs模糊查询效率对比(本机)

数据名称 数据源 体积 查询用时(6次随机)
boundary_vill_sparse postgresql 55.65MB [73, 86, 65, 66, 64, 64] / 6 = 69.7ms
boundary_vill_sparse geopackage 71.70MB [580, 640, 635, 610, 603, 653] / 6 = 620.2ms
boundary_vill_sparse shapefiles 67.9MB [412, 344, 359, 396, 339, 369] / 6 = 369.8ms
village_mz_sparse postgresql 13.21MB [52, 68, 29, 26, 70, 60] / 6 = 50.8ms
village_mz_sparse geopackage 16.82MB [195, 243, 254, 232, 207, 168] / 6 = 216.5ms
village_mz_sparse shapefiles 17.0MB [124, 162, 154, 162, 161, 119] / 6 = 147ms

对于shp文件,在geoserver上勾选“若缺少空间索引,则构建空间索引”选项加速索引。

分析

纵向对比,同一份文件,pg的WFS查询效率远高于shp文件。geopackage作为sqlite的一种实现,适合用来做数据交换以替代shp文件的编辑功能,不适用于查询。

横向对比,数据量越大,pg的优势越明显。数据量大的全省村落行政区数据,比数据量小的梅州局部数据有明显优势(约3倍vs约6倍)。

除此之外,pg还有数据压缩方面的优势,约能节约相对于shp文件20%~30%的文件体积。

对于geopackage,文件体积没有太大变化,可以牺牲稍微多出来的一点空间解决二维数据编辑交换的各种中文不兼容问题。spatiallite未测试。

wfs模糊查询效率对比(服务器)

数据名称 数据源 查询用时(6次随机)
boundary_vill_sparse postgresql [419, 354, 411, 425, 360, 362] / 6 = 388.5ms
boundary_vill_sparse geopackage [3.60, 3.37, 3.42, 3.31, 3.36, 3.17] / 6 = 3.37s
boundary_vill_sparse shapefiles [1.94, 1.84, 1.87, 1.48, 1.93, 1.83] / 6 = 1.81s
village_mz_sparse postgresql [320, 316, 314, 316, 316, 312] / 6 = 315.7ms
village_mz_sparse geopackage [1.17, 1.01, 1.00, 1.01, 1.01, 1.01] / 6 = 1.04s
village_mz_sparse shapefiles [656, 640, 636, 639, 637, 637] / 6 = 640.8ms

分析

在服务器环境shp文件发布的WFS查询时间极其不稳定,有时候会剧增到十几秒,有的时候一秒多,有的时候几秒钟。估计是磁盘IO占用。

总的来说,shp文件的查询效率在数据量越大的时候,无论是服务器环境,还是本地环境,都是不如pg的。

至于geopackage,这个仅适合做交换格式,以覆盖shp文件中文不兼容的情况。

WFS: postgresql(postgis)和shp文件查询效率对比的更多相关文章

  1. EF 数据查询效率对比

    优化的地方: 原地址:https://www.cnblogs.com/yaopengfei/p/9226328.html ①:如果仅是查询数据,并不对数据进行增.删.改操作,查询数据的时候可以取消状态 ...

  2. Java ftp上传文件方法效率对比

    Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...

  3. PostGIS 导入SHP文件并与ArcGIS连接

    运行环境: ArcGIS10.4 PostGreSql9.4 PostGIS2.2(需勾选空间数据库,否则需要重新安装) 实现步骤: 方法一: 1.打开pgAdminIII,数据库节点上右键,新建数据 ...

  4. postgresql+postgis+pgrouting实现最短路径查询(1)---线数据的处理和建立拓扑

    准备一个线shp数据,并将其导入postgres里面,postgres安装postgis和pgrouting两个插件(方法见http://www.cnblogs.com/nidaye/p/455352 ...

  5. GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询

    一.软件安装 GeoServer下载地址: http://geoserver.org/download/ PostgreSQL下载地址: https://www.postgresql.org/down ...

  6. postgresql+postgis+pgrouting实现最短路径查询(3)--流程图

    项目结束,做一个项目的总结汇报,就把最短路径查询的实现流程图画了一下,现在补出来:

  7. postgresql+postgis+pgrouting实现最短路径查询(2)---openlayers+geoserver实现最短路径

    自己的最短路径实现基本上是按照参考博文的1.2和3进行的,实现的时候也是问题不断,只能是一个一个解决. 问题1:自己发布的geoserver服务无法和OSM底图叠加到一起. 解决:参考博文2提到发布服 ...

  8. 解决PostGIS打开shp文件输入输出模块出现"找不到文件libintl-9.dll"的问题

    找到shp2pgsql-gui.exe这个程序的目录 复制一份libintl-8.dll副本,改名为libintl-9.dll即可.

  9. Hibernate查询效率对比

    查询已知表名的实体时推荐使用getHibernateTemplate().executeWithNativeSession() + SQLQuery方式. 以下测试使用JUnit进行,仅查询一次,查询 ...

随机推荐

  1. 前端之jQuery基础篇02-事件

    什么是事件: 在元素上移动鼠标. 选取单选按钮 点击元素 常见的DOM事件: 鼠标事件:click() 当鼠标单击发生click事件 : <!DOCTYPE html> <html& ...

  2. 001_Chrome 76支持原生HTML 图片懒加载Lazy loading

    Table Of Content 什么是懒加载? 语法参数及使用方式? 有哪些特点? 与js有关的实践 什么是懒加载? 技术背景 Web应用需要经常向后台服务器请求资源(通过查询数据库,是非常耗时耗资 ...

  3. 1029 Median (25分)

    Given an increasing sequence S of N integers, the median is the number at the middle position. For e ...

  4. 构建LNMP

                                                                             构建LNMP 案例1:部署LNMP环境 案例2:构建L ...

  5. css进阶选择器

    后代选择器 用空格隔开 选择div标签下的p标签下的a标签 div p a 选择class为parent标签下的p标签下的a标签 .parent p a 后代选择器可以是标签.类.id的混合体 后代选 ...

  6. uni_app商城项目(完成)

    总结: 1.uni-app的跨段适配性,真的特别强,完成相关代码的书写,HbuilderX编辑器提供的打包十分方便. 2.开发小程序,H5等移动端开发, 比开发电脑端简单不少,但有时候坑也挺多的. 3 ...

  7. java第九天,接口是什么?如何实现接口

    接口 很多人纳闷Java为什么会有接口这个知识点呢?其实很大程度上是为了间接实现多继承.但是因为C++的多继承实在是一个难点,Java为了吸取C++的教训,就推出了接口这个概念.接口是一种公共规范标准 ...

  8. matplotlib Bbox类

    Bbox 类是一个可变的(相对于BboxBase)限位框, 继承自BboxBase 2020-04-07 22:54:57  --Edit by yangray 方法: __init__(points ...

  9. 2、使用断言(json assertion)

    1.假设现在有一个服务端的返回数据(需要测试的)为:HTTP/1.1 200 OK,要测试的响应字段勾选Response Headers,模式匹配规则选择Substring,把该响应断言命名为Http ...

  10. Git应用详解第七讲:Git refspec与远程分支的重要操作

    前言 前情提要:Git应用详解第六讲:Git协作与Git pull常见问题 这一节来介绍本地仓库与远程仓库的分支映射关系:git refspec.彻底弄清楚本地仓库到底是如何与远程仓库进行联系的. 一 ...