Skip to content
 

GEOS 3.8 Benchmarks


newly minted PostGIS 3 / PostgreSQL 12 / GEOS 3.8 combo

PostgreSQL 12.0 (Ubuntu 12.0-2.pgdg18.04+1) on x86_64-pc-linux-gnu
  Ubuntu linux 4.15 x86_64    i7-2600 CPU @ 3.40GHz
  shared_buffers = 4096MB     work_mem=128MB
  
PostGIS 3.0.0 r17983;   Proj 4.9.3
database  geom  2D POLYGON  valid,simple,4326   3.1million rows
 * all times in milliseconds, lower is better

--  GEOS 3.7.1  postgresql-12-postgis-3_3.0.0+dfsg-2~exp1.pgdg18.04+1_amd64.deb
ST_IsValid(geom)         22023   21968   21976   21952
ST_PointOnSurface(geom)        53880   53668   53918
ST_Centroid(geom)        4610    4383   4384
ST_Buffer( geom,0.001)      98284   98111
ST_Union( geom, ST_Buffer(geom,0.001))      151677   151452

--  GEOS 3.8.1 r93be2e1d;  RelWithDebInfo
ST_IsValid(geom)         13761   13698   13734   13672
ST_PointOnSurface(geom)        4010   3929  3943
ST_Centroid(geom)        4106    4015   4018
ST_Buffer( geom,0.001)      68152   68387
ST_Union( geom, ST_Buffer(geom,0.001))      109546   109829

note: the graphic here shows only relative time between two runs
of the same operators, not absolute time between operators..

Compared to PostgreSQL 10 / PostGIS 2.4 / GEOS 3.6.2 only two years ago;
big evolution forward on several fronts.

Benchmarks v2 — New Data Sets

* sparcels   450,000 rows, including ~1000 invalids by PostGIS definitions, mostly single ring (190MB)

* cpad19a   72,000 rows with a diverse range of area, vertice count and interior ring count (100MB)

* post_osm_bldgs   25,800 rows of recent OpenStreetmap 2D polygons marked as “building” of some kind

postgresql 10+190ubuntu0.1; postgis 2.5.2+dfsg-1~bionic1
 pg_workers enabled;  4GB shared_mem

        sparcels    cpad   osm  
IsValid	
  3.7.1     5274    5518   311
  3.8.0     2768    3669   210
 3.9dev     2551    1200   172

PointOnSurface where IsValid	
  3.7.1    21627   11174  1189
  3.8.0     4134    5526   271
 3.9dev     3659    1476   269

Centroid where IsValid
  3.7.1     6352    6289   311
  3.8.0     3978    5857   279
 3.9dev     3383    1396   256

Buffer where IsValid
  3.7.1    21138   52019  1341
  3.8.0    16711   30226  1097
 3.9dev    15699   27468  1045

Union(Buffer) where IsValid
  3.7.1    36636   57707  2155
  3.8.0    27883   35749  1721
 3.9dev    26818   29314  1653

* all times in milliseconds; lower is better