Ich frage mich, welche Speichermethode zum schnellsten Lesen der Kartenvektoren für das Rendern führt. SHP? PostGres? SQLite? (Sie ändern sich nicht oft und ich brauche keine räumlichen Funktionen für diese Vektoren).
Ich frage mich, welche Speichermethode zum schnellsten Lesen der Kartenvektoren für das Rendern führt. SHP? PostGres? SQLite? (Sie ändern sich nicht oft und ich brauche keine räumlichen Funktionen für diese Vektoren).
Antworten:
In dieser Präsentation (ab 2007) werden einige sehr schnelle Tests von Shapefiles im Vergleich zur Datenbank (PostGIS) für MapServer vorgestellt .
Zusammenfassend:
Und die Zeiten im Detail, die auch bei der Entscheidung helfen können, ob das Speicherformat ein wichtiger Faktor ist.
PostGIS Shapefile
Start mapserv process 15ms 15ms
Load mapfile 3ms 3ms
Connect to DB 14ms n/a
Query 20ms n/a
Fetch 7ms n/a
Draw 11ms 28ms
Write Image 8ms 8ms
Network Delay 3ms 3ms
Verwenden Sie in MapServer immer FastCGI, wenn Sie eine Datenbank verwenden, da die Datenbankverbindungen wiederverwendet werden können. Andernfalls muss bei jeder Anforderung eine neue Verbindung erstellt werden.
Die Geschwindigkeit des Lesens eines Shapefiles (und von Daten aus einer Datenbank) hängt von der spezifischen Codierungsimplementierung ab.
Der Quellcode für MapServer, der ein Shapefile öffnet, ist hier zu sehen . Nach den Kommentaren können Sie sehen, wie wichtig es ist, einen Index zu haben. Normalerweise können Sie eine Datei nur in eine Richtung lesen, um einen Datensatz zu erhalten, aber mit einem Index können Sie in zwei Richtungen lesen.
345 /* Read the .shx file to get the offsets to each record in */
346 /* the .shp file.
Ein weiteres Beispiel für das Öffnen eines Shapefiles ist in der Python-Quelle für PyShp zu sehen . Wieder können Sie sehen, wie ein Index verwendet wird, um bestimmte Formen direkt zu finden.
Die Einschränkungen des DBF-Formats (Einschränkungen der Feldgröße, keine Nullunterstützung, Einschränkungen der Textspeicherung) sollten ebenfalls berücksichtigt werden, wenn entschieden wird, ob eine Datenbank verwendet werden soll oder nicht.
Eine Datenbank bietet auch Möglichkeiten zum Sichern von Daten, zum einfacheren Zusammenfügen und Erstellen von Ansichten, zum Protokollieren und zu vielen anderen Funktionen, die Sie mit einer eigenständigen Datei nicht erhalten.
Im Gegensatz zu Dariapra zeigt mir meine Erfahrung bei der Entwicklung von Maperitive , dass der größte Engpass beim tatsächlichen Laden der Daten vor dem Rendern besteht. Es hängt sehr stark davon ab, wie groß das insgesamt gespeicherte Dataset ist und wie groß das Dataset ist, das Sie auf einmal rendern möchten. Wenn Sie alles in den Speicher laden können, sind Shapefiles wahrscheinlich besser als die Verwendung eines Datenbankmoduls.
Welches Programm verwenden Sie zum Rendern? Dies kann die Ergebnisse beeinflussen. Auf jeden Fall ist ein Shapefile mit einem räumlichen Index (z. B. http://mapserver.org/utilities/shptree.html ), der verwendet wird, häufig die schnellste Technik. Abgesehen davon: Es hängt von Ihrer Anwendung ab, aber das Zwischenspeichern Ihrer gerenderten Ergebnisse ist oft viel nützlicher, um die Leistung zu verbessern.
Shapefile ist die schnellste und wahrscheinlich beste Wahl. Es gibt Overhead für jede SQL-Datenbank, dann wird die Rückgabe großer Ergebnismengen verwaltet (die Konvertierung von Datenbankdatentypen in native Datentypen verlangsamt ebenfalls die Arbeit).
Versuchen Sie, ein Open Source-Paket von maptools.org zu verwenden, um Ihre Lesevorgänge durchzuführen . Die ArcGIS-Tools sind zwar speziell entwickelt, haben jedoch einen gewissen Aufwand und sind teuer.
Hoffe das hilft