WFS: postgresql(postgis)和shp文件查询效率对比
对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文件查询效率对比的更多相关文章
- EF 数据查询效率对比
优化的地方: 原地址:https://www.cnblogs.com/yaopengfei/p/9226328.html ①:如果仅是查询数据,并不对数据进行增.删.改操作,查询数据的时候可以取消状态 ...
- Java ftp上传文件方法效率对比
Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...
- PostGIS 导入SHP文件并与ArcGIS连接
运行环境: ArcGIS10.4 PostGreSql9.4 PostGIS2.2(需勾选空间数据库,否则需要重新安装) 实现步骤: 方法一: 1.打开pgAdminIII,数据库节点上右键,新建数据 ...
- postgresql+postgis+pgrouting实现最短路径查询(1)---线数据的处理和建立拓扑
准备一个线shp数据,并将其导入postgres里面,postgres安装postgis和pgrouting两个插件(方法见http://www.cnblogs.com/nidaye/p/455352 ...
- GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
一.软件安装 GeoServer下载地址: http://geoserver.org/download/ PostgreSQL下载地址: https://www.postgresql.org/down ...
- postgresql+postgis+pgrouting实现最短路径查询(3)--流程图
项目结束,做一个项目的总结汇报,就把最短路径查询的实现流程图画了一下,现在补出来:
- postgresql+postgis+pgrouting实现最短路径查询(2)---openlayers+geoserver实现最短路径
自己的最短路径实现基本上是按照参考博文的1.2和3进行的,实现的时候也是问题不断,只能是一个一个解决. 问题1:自己发布的geoserver服务无法和OSM底图叠加到一起. 解决:参考博文2提到发布服 ...
- 解决PostGIS打开shp文件输入输出模块出现"找不到文件libintl-9.dll"的问题
找到shp2pgsql-gui.exe这个程序的目录 复制一份libintl-8.dll副本,改名为libintl-9.dll即可.
- Hibernate查询效率对比
查询已知表名的实体时推荐使用getHibernateTemplate().executeWithNativeSession() + SQLQuery方式. 以下测试使用JUnit进行,仅查询一次,查询 ...
随机推荐
- 面试刷题30:SpringBean的生命周期?
spring是Java软件开发的事实标准. 我是李福春,我在准备面试,今天的问题是:springBean的生命周期是怎样的? 答:spring最基础的能力是IOC(依赖注入),AOP(面向切面编程), ...
- iOS 图片加载和处理
一.图片显示 图片的显示分为三步:加载.解码.渲染.解码和渲染是由 UIKit 进行,通常我们操作的只有加载. 以 UIImageView 为例.当其显示在屏幕上时,需要 UIImage 作为数据源. ...
- 在linux虚拟机上安装docker并安装mysql
步骤 1.检查内核版本,必须是3.10及以上 uname -r 2.安装docker yum install docker 3.输入y确认安装 4.启动docker systemctl start d ...
- Django-利用Form组件和ajax实现的注册
利用Form组件和ajax实现的注册 一.注册相关的知识点 1.Form组件 我们一般写Form的时候都是把它写在views视图里面,那么他和我们的视图函数也不影响,我们可以吧它单另拿出来,在应用下面 ...
- 《Three.js 入门指南》2.3.1- 照相机 - 正交投影demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Flutter 实现虎牙/斗鱼 弹幕效果
老孟导读:用Flutter实现弹幕功能,轻松实现虎牙.斗鱼的弹幕效果. 先来一张效果图: 实现原理 弹幕的实现原理非常简单,即将一条弹幕从左侧平移到右侧,当然我们要计算弹幕垂直方向上的偏移,不然所有的 ...
- openlayers-统计图显示(中国区域高亮)
openlayers版本: v3.19.1-dist 统计图效果: 案例下载地址:https://gitee.com/kawhileonardfans/openlayers-examp ...
- spark本地开发环境搭建及打包配置
在idea中新建工程 删除新项目的src,创建moudle 在父pom中添加spark和scala依赖,我们项目中用scala开发模型,建议scala,开发体验会更好(java.python也可以) ...
- centos7 NAT链接配置(静态ip/修改网卡名为eth0)|1
NAT的静态ip设置并且修改网卡名为eth0 1 cd /etc/sysconfig/network-scripts/ mv eno16777736 ifcfg-eth0 #修改名称 vi eth0 ...
- 数据结构和算法(Golang实现)(13)常见数据结构-可变长数组
可变长数组 因为数组大小是固定的,当数据元素特别多时,固定的数组无法储存这么多的值,所以可变长数组出现了,这也是一种数据结构.在Golang语言中,可变长数组被内置在语言里面:切片slice. sli ...