天天看點

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
本文基于公司保密資料進行測試,就不提供資料了,感興趣的朋友可以用全國縣級資料進行模拟。

資料預覽:

WFS: postgresql(postgis)和shp檔案查詢效率對比
WFS: postgresql(postgis)和shp檔案查詢效率對比

資料入庫要求:

  • 均建立索引

wfs模糊查詢效率對比(本機)

資料名稱 資料源 體積 查詢用時(6次随機)
postgresql 55.65MB [73, 86, 65, 66, 64, 64] / 6 = 69.7ms
geopackage 71.70MB [580, 640, 635, 610, 603, 653] / 6 = 620.2ms
shapefiles [412, 344, 359, 396, 339, 369] / 6 = 369.8ms
13.21MB [52, 68, 29, 26, 70, 60] / 6 = 50.8ms
16.82MB [195, 243, 254, 232, 207, 168] / 6 = 216.5ms
[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模糊查詢效率對比(伺服器)

[419, 354, 411, 425, 360, 362] / 6 = 388.5ms
[3.60, 3.37, 3.42, 3.31, 3.36, 3.17] / 6 = 3.37s
[1.94, 1.84, 1.87, 1.48, 1.93, 1.83] / 6 = 1.81s
[320, 316, 314, 316, 316, 312] / 6 = 315.7ms
[1.17, 1.01, 1.00, 1.01, 1.01, 1.01] / 6 = 1.04s
[656, 640, 636, 639, 637, 637] / 6 = 640.8ms

在伺服器環境shp檔案釋出的WFS查詢時間極其不穩定,有時候會劇增到十幾秒,有的時候一秒多,有的時候幾秒鐘。估計是磁盤IO占用。

總的來說,shp檔案的查詢效率在資料量越大的時候,無論是伺服器環境,還是本地環境,都是不如pg的。

至于geopackage,這個僅适合做交換格式,以覆寫shp檔案中文不相容的情況。

版權所有。B站/小專欄/知乎/csdn/部落格園 @秋意正寒

繼續閱讀