Schnellstes räumliches Speicherformat?

8

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).

Nate
quelle
1
Wie viele Funktionen sprechen Sie?
Roger D.
2
Ihre Frage scheint zu implizieren, dass der Engpass das Lesen von Daten ist. Ich habe die Erfahrung gemacht, dass die eigentliche Last zumindest mit MapServer im Rendering-Prozess selbst liegt. Das heißt, ich sehe nicht, dass die Verwendung von Shapefiles oder einer räumlichen Datenbank einen großen Unterschied macht.
Dariapra
@ Roger - Ich bin nicht sicher. Es ist eine Karte der USA mit der höchsten Auflösung (Bundesstaaten, Landkreise, Straßen, Flüsse). Ich habe die Daten von naturalearthdata.com erhalten
Nate
@Nate, das ist der Fall, warum in OSM oder Google für Ihre Karte lesen? Dann darüber legen? Es ist ein großer Prozess, die gesamten USA jedes Mal live zu bringen. Dann müssen Sie die Netzwerkleistung, die Festplattenleistung und die CPU berücksichtigen. Es gibt viele Dinge, die die Leistung beeinflussen können und werden.
DEWright

Antworten:

12

Geschwindigkeitstests

In dieser Präsentation (ab 2007) werden einige sehr schnelle Tests von Shapefiles im Vergleich zur Datenbank (PostGIS) für MapServer vorgestellt .

Zusammenfassend:

  • Bei einem Datensatz von 3 Millionen Features war das Ausführen von Anforderungen für 30 Features nacheinander PostGIS schneller als Shapefile (obwohl sich dies seitdem möglicherweise durch eine Korrektur zum Lesen des Shapefile-Index geändert hat).
  • Bei einem Datensatz mit 10.000 Features war das Shapefile etwas schneller.
  • Bei gleichzeitigen Anfragen war Shapfile schneller

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.

Implementierungen für Shapefile-Reader

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.

Weitere Faktoren für Condsider

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.

geographika
quelle
10

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.

Igor Brejc
quelle
4
+1 für den Hinweis, dass die Form des Engpasses von Bedeutung ist, und für die Bereitstellung von Informationen aus der tatsächlichen Erfahrung. Gutes Zeug.
whuber
Wo der Engpass liegt, scheint eine interessante und offene Frage zu sein, die von einer Reihe von Variablen abhängt. Vielleicht ist die Art der Arbeitsbelastung eine wichtige. Ich erinnere mich, dass ich einmal einige Shapefiles mit Shapetree indiziert habe, um mit MapServer ein schnelleres Rendern einiger Vektorebenen zu erzielen, und keinen signifikanten Leistungsgewinn erzielt habe.
Dariapra
2
@dariapra Stimmt, es hängt sehr stark vom Anwendungsfall ab. Wenn er alle Daten auf einmal laden kann, ist der räumliche Index nicht wirklich erforderlich, aber das Laden von Daten aus einem Shapefile sollte viel schneller sein als das Ausführen von SQL-Abfragen. Wenn andererseits eine große Datenmenge gefiltert werden muss, würde ich meine Wette auf eine Datenbank und nicht auf Shapefiles setzen.
Igor Brejc
4

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.

johanvdw
quelle
Vielen Dank. Ich verwende derzeit MapGuide (erkunde immer noch unsere Optionen) und habe mir Mapserver angesehen.
Nate
2

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

OptimizePrime
quelle