29 January 2014

QGIS Server ist schnell. Das zeigt die Präsentation an der FOSSGIS 2013. Ich wurde aber das Gefühl nie los, dass sich die Performance verschlechtert, falls Layer kaskadiert werden. Was verstehe ich unter «kaskadiert»?

Häufig benutzte Grundlagen- resp. Hintergrundkarten werden einmalig erstellt und über eine Schnittstelle (WMS) zur Verfügung gestellt. Dies ist vor allem praktisch, falls die Grundlagenkarte aus vielen einzelnen Layern und Datensätzen besteht.

Für insgesamt fünf Hintergrundkarten habe ich mit JMeter Lasttests durchgeführt:

  • AV-WMS

  • Plan für das Grundbuch

  • Basisplan

  • Orthofoto

  • Kombination aus Orthofoto und Basisplan resp. Plan für das Grundbuch

Dabei wurden drei Ansätze (= drei QGIS-Projekte = drei WMS-Dienste) verfolgt:

  1. direkt: Layer werden in QGIS direkt geladen, z.B. VRT-Layer für Orthofotos, Postgis für Vektordaten.

  2. embedded: Layer werden via QGIS-Projekt (Variante 1) geladen («Embed Layers and Groups…​»).

  3. wms: Layer wird von Variante 1 als WMS in QGIS-Projekt geladen (= Kaskadieren).

Die Testbedingungen sind wie folgt:

  • Hetzner-Server:

    • Intel i7-3770 (4 Cores, 8 Threads, 3.4 - 3.9 GHz)

    • 16 GB RAM

    • 2 x 3 TB HDD (7200 rpm, Software-RAID 1)

  • Ubuntu 10.04

  • PostgreSQL 8.4 / Postgis 2.0

  • QGIS enterprise 13.03b

  • JMeter, Datenbank und QGIS auf dem gleichen Server

Exemplarisch das Resultat des AV-WMS:

AVWMS Benchmark

Embedded Layer und Gruppen sind gleichauf mit direkt geladenen Datensätzen. Massiv hingegen ist der Einbruch unter Last bei kaskadierten Layern. Warum der Einbruch so massiv ist, entzieht sich meiner Kenntnis. Zu empfehlen sind daher kaskadierende Layer nur beschränkt. Die bessere Lösung ist das direkte Einbinden der Datensätze oder «eingebettete» Datensätze.

Für alle anderen Hintergrundkarten zeigt sich exakt das gleiche Bild. Sämtliche Resultate und einige Beispielbilder gibts hier.

Posted by Stefan Ziegler. | QGIS , QGIS-Server , WMS , Benchmark