Ich versuche derzeit, Wasser (3.198.333 Datensätze) und detaillierte Weltgrenzen (process_p) für die Welt zu rendern. Ich kann beide Ebenen erfolgreich rendern, bin aber mit der Leistung nicht zufrieden.
Mein aktuelles Setup ist wie folgt:
- Amazon EC2-Instanz (m2.2xlarge)
- 34,2 GB Speicher
- 13 EC2-Recheneinheiten (4 virtuelle Kerne mit jeweils 3,25 EC2-Recheneinheiten)
- 850 GB Instanzspeicher
- 64-Bit-Plattform
- E / A-Leistung: Hoch
- Mapnik, 4 Fäden
- Postgresql-Einstellungen basierend auf diesen Benchmarks
- GiST-Index für alle meine Ebenen vorhanden
Einige meiner Ideen zur Leistungssteigerung :
- Vereinfachung meiner Funktionen
- Keine Wasserfliesen rendern - beim Laden mit offenen Schichten kann der Ladefehler auf die blaue Farbe gesetzt werden
- Teilen Sie die Wasserspiele der Welt in verschiedene Abschnitte auf und teilen Sie Mapnik explizit seine Grenzen mit. Wenn ich beispielsweise Wasserspiele aus Nordamerika trenne und Mapnik Kacheln für Australien generiert, sollte Nordamerika nicht abgefragt werden, ob sich eines der Merkmale in den Kacheln befindet.
- Meine zweite Idee ist etwas verrückter. Da Mapnik für jede Kachel eine räumliche Abfrage durchführt, um zu verarbeitende Features zu finden, kann ich diese Abfrage zuvor für alle meine Ebenen durchführen. Ich würde davon ausgehen, dass dies etwas Rechenleistung einsparen würde.
Meine Frage: Was kann ich noch tun, um das Rendern von Kacheln zu optimieren?
Antworten:
Hier einige Links: http://www.geofabrik.de/media/2010-07-10-rendering-toolchain-performance.pdf
http://www.geofabrik.de/media/2012-09-08-osm2pgsql-performance.pdf
Ein weiterer Punkt: Daten in mehr Tabellen aufteilen: Je weniger Objekte gefiltert werden müssen, desto schneller wird gerendert
quelle