GeoServer WFS Performance Vergleich

Das WFS-Protokoll ermöglicht den Zugriff auf geografische Features über das Internet. Für die Kodierung der Geodaten wird standardmäßig die Geography Markup Language (GML) verwendet, ein von der OGC spezifiziertes XML-Schema. Je nach Version des WFS-Protokolls werden auch unterschiedliche Versionen von GML verwendet. Zusätzlich stellt der GeoServer das GeoJSON -Format als kompaktes, alternatives Format mit JSON-Notation zur Verfügung. Für uns stellte sich die Frage, welche der beiden Formate die bessere Gesamtgeschwindigkeit liefert und wie groß der Unterschied ist. Uns interessierte auch, wie groß der Unterschied zwischen den beiden GML-Versionen 2.0 und 3.2 ist. Als Ergebnis erwarteten wir aufgrund der kleineren Dateigröße einen kleinen Vorteil für GeoJSON im Vergleich zu GML und einen Vorteil von GML 2.0 im Vergleich zu GML 3.2

Testablauf

Der Vergleich der Geschwindigkeit fand anhand der Parameter durchschnittliche Anzahl Antworten pro Sekunde (avg requests/s) und durchschnittliche Antwortzeit in Milisekunden (avg response time/req) statt.

Als Datengrundlage kommen die OpenStreetMap Daten der Schweiz zum Einsatz. Diese wurden in eine PostgreSQL (Version 9.1) / PostGIS (Version 2.0)  Datenbank importiert. Die Datenbank wurde als Datenquelle zu einer Installation von GeoServer (Version 2.3.3 / Tomcat6 / OpenJDK) hinzugefügt. Es wurden zwei exemplarische Layer mit unterschiedlichen Geometrietypen angelegt, auf deren Basis die Tests durchgeführt werden. Der erste Layer ist osm_mainroads, der primär Linien enthält. Als zweiter Layer kommt osm_places zum Einsatz, der hauptsächlich Punktgeometrien enthält. PostgreSQL und GeoServer wurden gemeinsam auf einem Server (Debian Squeeze) mit 4GB RAM und 8 CPU-Kernen installiert.

Auf einem physisch getrennten Server (Ethernet Gigabit Link) wurde ein Belastungstest mit Apache JMeter ausgeführt. Es wurden pro Durchlauf nacheinander 4, 8, 16 und 32 parallele Zugriffe gestartet. In jedem Durchlauf wurde eine Kombination aus Ausgabeformat mit einem WFS-Layer verglichen. Um zufällige Testergebnisse und Ausreißer zu entdecken, wurde jeder Durchlauf dreimal ausgeführt. Als Endergebnis wurde der Mittelwert aus den drei Tests gebildet. Jeder Zugriff wurde mit folgenden Parametern durchgeführt:

ows?service=WFS&version=2.0.0&request=GetFeature&typeName={typename}&count=200&srsName=EPSG:4326&outputFormat={formatname}

Resultate für osm_mainroads

Format4 Zugriffe8 Zugriffe16 Zugriffe32 ZugriffeDateigröße
GML3.224,2 req/s
140 ms
40 req/s
160 ms
43 req/s
337 ms
43 req/s
700 ms
230 KB
GML283 req/s
30 ms
124 req/s
30 ms
197 req/s
45 ms
230 req/s
100 ms
150 KB
GeoJSON81,5 req/s
33 ms
110 req/s
37 ms
160 req/s
62 ms
180 req/s
142 ms
150 KB

Resultate für osm_places

Format4 Zugriffe8 Zugriffe16 Zugriffe32 ZugriffeDateigröße
GML3.230 req/s
110 ms
51 req/s
112 ms
53 req/s
260 ms
55 req/s
510 ms
100 KB
GML2120 req/s
17 ms
140 req/s
17 ms
200 req/s
44 ms
240 req/s
75 ms
70 KB
GeoJSON117 req/s
17 ms
153 req/s
18 ms
265 req/s
25 ms
310 req/s
66 ms
40 KB

Die Ergebnisse zeigen deutlich, dass GML 3.2 im Vergleich zu GML 2.0 und GeoJSON massiv langsamer ist. Geschwindigkeitsunterschiede zwischen GML 2 und GML 3.2 waren aufgrund der besseren Effizienz des XML-Encodings in GeoServer zu erwarten, allerdings ist die Differenz dennoch überraschend groß. Besonders die durchschnittliche Antwortzeit pro Anfrage wird bei mehr als acht parallelen Zugriffen inakzeptabel langsam. Der Vergleich zwischen GML 2.0 und GeoJSON zeigt den großen Einfluss der auszulieferenden Daten und der Dateigröße auf die Gesamtgeschwindigkeit. Für den komplexeren Datensatz osm_mainroads ergibt sich für GML 2.0 und GeoJSON die gleiche Dateigröße und ein Geschwindigkeitsvorteil für GML 2.0. Für den Datensatz osm_places hat GeoJSON eine kleinere Dateigröße als GML 2.0 und kann dies zu einem Geschwindigkeitsvorteil nutzen. Es zeigt sich, dass keines von beiden Formaten immer besser ist, jedoch die Differenz zwischen GeoJSON und GML 2.0 nicht sehr groß ist.

Wenn die Geschwindigkeit ein wichtiges Thema ist, dann sollte die Verwendung von GML 3.2 nach Möglichkeit zur Zeit vermieden werden. Mit dem Einsatz von GML 2.0 und GeoJSON kann man wenig falsch machen. Wenn man die Wahl zwischen GML 2.0 und GeoJSON hat, kann es sich also lohnen einen Vergleich durchzuführen.

PS: Falls Sie bei uns mit GeoServer und weiterer Open Source Software arbeiten wollen, lesen Sie bitte unsere aktuellen Stellenausschreibungen.. Wir suchen Verstärkung!

20.2.2013
Mehr zum Thema
3 min Lesezeit | Blog

React 18 Unterstützung für create-react-web-component

Wir wollen fünf Jahre alte Abhängigkeiten des Projekts trafimage-maps aktualisieren. Aber es scheint, dass eine Projektabhängigkeit veraltet ist. Was sollen wir tun? Das Projekt reparieren oder etwas anderes verwenden? Wir haben uns entschieden, das Projekt zu reparieren und der Gemeinschaft etwas zurückzugeben.

weiterlesen
3 min Lesezeit | Blog

Swiss Python Summit 2023

Am 21. September 2023 machte sich unser Backendentwickler Tobias auf den Weg nach Rapperswil um am Swiss Python Summit 2023 teilzunehmen.

weiterlesen
3 min Lesezeit | Blog

performance.now()

Zwei Frontend-Entwickler von geOps machten sich nach Amsterdam auf, um an der performance.now() teilzunehmen, einer zweitägigen Konferenz mit vierzehn erstklassigen Sessions, die die wichtigsten Erkenntnisse zur Web-Performance von heute behandeln.

weiterlesen
6 min Lesezeit | Blog

Webkarten als PDF exportieren und drucken

Schon seit einiger Zeit bieten einige unserer Apps den Export unserer Karten im PDF-Format. Dieser Artikel stellt unsere Lösungen für diverse Neuerungen dieser Funktion vor.

weiterlesen
9 min Lesezeit | Blog

Snapping stops to vehicle trajectories

How to snap points to a line string in a given order and what it has to do with quality assurance when importing public transport schedules.

weiterlesen
7 min Lesezeit | Blog

Using Redis Subscriptions efficiently in Python

Inspired by the websockets broadcast feature we built a subscription multiplexer for redis subscriptions to subscribe to Redis channels and patterns once for all relevant clients.

weiterlesen

Kontakt

geOps AG
Solothurnerstrasse 235
CH-4600 Olten

fon: +41 61 588 05 05
mail: info@geops.ch
geOps GmbH
Bismarckallee 10
D-79098 Freiburg im Breisgau

fon: +49 761 458 925 0
mail: info@geops.de
Impressum | Datenschutz | Bedingungen