Datenquellen für Kartendienste materialisieren

In diesem Forum werden Tipps für den optimalen Umgang mit der BaSYS WEB Lösung gegeben, wie zum Beispiel zu den Themen Rollen/Datenschutz, Anbindung von Liegenschaftsdaten, Performanzsteigerung, Datenabgabe an Dritte etc.
Antworten
Benutzeravatar
j.heilmann
Beiträge: 11
Registriert: 7. Januar 2019, 11:08

Datenquellen für Kartendienste materialisieren

Beitrag von j.heilmann » 25. Januar 2019, 14:24

Kartendienste, die aus BaSYS Plan heraus erstellt werden, also z.B. AGS-Dienste, die auf Grund einer mit BaSYS Plan E erstellten MXD veröffentlicht werden oder QGIS-Server Dienste, die auf einer mit BaSYS Plan Q erstellten QGS|Z-Datei basieren, zeigen üblicherweise in Echtzeit den aktuellen Datenbestand aus der BaSYS-Datenbank an. Geometrie- oder Attributänderungen im Datenbestand werden sofort im Kartendienst sichtbar.
Diese Live-Ansicht beruht darauf, dass die erforderlichen Daten bei jedem Request auf den Kartendienst über mehr oder weniger komplexe SQL-Abfragen aus den Datentabellen der BaSYS-Datenbank geholt werden.
Bei anspruchsvollen Ausgestaltungen oder vielen parallelen Zugriffen auf den Kartendienst kann das zu erheblichen Lasten auf dem Datenbankserver führen, bis hin zu Timeouts. Um den Server zu entlasten, empfiehlt sich daher, dem Kartendienst die Daten auf eine andere Weise zur Verfügung zu stellen. Neben dem "Cache", der darauf beruht, dass auf dem Server fertige Rasterbilder für alle gewünschten Zoomstufen und Layerkombinationen bereitgestellt werden, gibt es die Möglichkeit, die Daten für den Dienst als flache Tabelle zwischenzuspeichern, wodurch die Serverlast für die Abfrageverarbeitung und damit die Antwortzeit u.U. um mehrere Zehnerpotenzen reduziert werden kann.
Wann ist eine Materialsierung sinnvoll?
Eigentlich immer dann, wenn die Weblösung als reine Auskunftsplattform betrieben wird und wenn es keine Probleme verursacht, wenn die Auskunftsdaten einem Bearbeitungsstand entsprechen, der bereits etwas zurückliegt, üblicherweise reden wir hier von max. 24 h.
Wo werden die materialisierten Daten gespeichert?
Hier gibt es verschiedene Möglichkeiten. Prinzipiell ist dafür jede Struktur möglich, die tabellarische Daten vorhalten kann. Wichtig ist aber, dass der Server der den Kartendienst bereitstellt, die materialisierten Datenquellen performant verarbeiten kann, und dass es einen einfachen Weg gibt, die Daten aus der BaSYS-Datenbank in die materialisierte Form zu überführen. Grundsätzlich kann die Materialsierung immer in der BaSYS-Datenbank selbst erfolgen, egal, ob diese auf MSSQL, Oracle oder PostGIS gehostet wird. Andere Optionen sind abhängig von den Fähigkeiten des Kartendienstes. Für AGS kommen z.B. das fgdb-Format in Frage oder auch sde - wobei die automatisierte Übertragung für fgdb wesentlich einfacher ist, als für sde. Für QGIS-Server empfehlen sich z.B. Spatiallite oder Geopackage als dateibasierte Materialisierung und PostGIS als Geodatenbank.
Wie wird die Materialisierung aktualisiert?
a) manuell bei Bedarf
In Umgebungen, in denen der BaSYS Datenbestand nicht kontinuierlich gepflegt wird, oder in dem nur bestimmte qualitätsgesicherte Bearbeitungsstände veröffentlicht werden sollen (z.B. im Bereich des Webhosting), kann es reichen, wenn die Materialisierung manuell von einem Desktop-Arbeitsplatz aus angestoßen wird. Für ArcGIS Server lässt sich dies z.B. einfach dadurch realisieren, dass eine MXD mit der gewünschten Planausgestaltung, die auf den zu veröffentlichenden Datenbestand zugreift, mit ArcMap auf dem AGS veröffentlicht wird, ohne dass die Datenquelle der MXD auf dem Server registriert ist. In diesem Fall bietet ArcMap automatisch an, "die Daten mit dem Dienst zu veröffentlichen", was bedeutet, dass die Daten im Zuge der Veröffentlichung in eine fgdb geschrieben werden, auf die der Kartendienst an Stelle der eigentlichen Quelldatenbank zugreift.
QGIS bietet mit dem Offline-Plugin die Möglichkeit, ein Projekt in ein offline-Projekt zu konvertieren, bei dem die Datenquelle in eine Spatiallite-Datei übertragen wird.
b) regelmäßig automatisch
Um die materialisierten Tabellen automatisch zu aktualisieren, wird die Vorgehensweise zur manuellen Aktualisierung durch ein Skript übernommen, das nach einem festen Zeitplan ausgeführt wird. Die Voraussetzung ist also, dass jeder Schritt der Veröffentlichung programmatisch ausgeführt werden kann. Für Verfahren, die vollständig mit Werkzeugen von ArcGIS respektive QGIS durchführbar sind, stehen Python-APIs zur Verfügung. Ein etwas anderer Weg sieht so aus, dass die Materialisierung direkt im DBMS stattfindet, in dem die BaSYS Datenbank gehostet ist. Hierfür bringt BaSYS mit den sogenannten Objektklassen die Voraussetzungen direkt mit. Objektklassen sind im Wesentlichen von BaSYS verwaltete Definitionen von DBMS-Views, die als Datenquellen für die Featureklassen im Kartendienst dienen, und beim Laden der Karte mit BaSYS Plan aus dem BaSYS-Modell generiert werden. Die Abfrageergebnisse dieser Views lassen sich durch eine stored procedure direkt mit Bordmitteln des DBMS in eine Tabelle übersetzen. Werden nun die Datenquellen der Featureklassen auf diese Tabellen umgeleitet, haben wir eine wirksame Materialisierung direkt im DBMS, da die SQL Abfragen auf diese Tabellen im Allgemeinen deutlich schneller ausgeführt werden, als die verschachtelten Views. Jedes DBMS bringt die Möglichkeit mit, dass eine stored procedure durch einen Job automatisch angestoßen wird, und so ist die regelmäßige Aktualisierung gewährleistet.

Antworten