Ich bediene Vektorkacheln mit TileStache . Ich habe alles so eingerichtet, wie ich es möchte. Meine Daten werden in Postgres gespeichert und ich verwende den VecTiles- Anbieter, um GeoJSON- Kacheln zu liefern .
Ich möchte alle meine Kacheln zwischenspeichern, damit sie schneller geliefert werden. Ich benutze tilestache-seed.py, um meinen Cache zu säen. Ich lasse auf mehreren Maschinen Tilestache-Seed laufen . Tilestache-Seed hat bis Zoomstufe 13 sehr gut funktioniert, aber danach dauert es viel zu lange, um die Kacheln zwischenzuspeichern. Nur für Zoomstufe 16 muss ich 5023772 Kacheln zwischenspeichern, und ich erhalte nur 100.000 bis 200.000 Kacheln pro Tag auf jeder Maschine.
Wie kann ich meine Kacheln schneller zwischenspeichern ? Gibt es eine Möglichkeit, tilestache-seed.py zu verfeinern und den Samen schneller zu machen?
Update: Ich habe versucht, räumliche Indizes für meine Tabellen zu erstellen (für die Geometriespalte und die Spalten, die zum Filtern von Daten durch die where-Klausel verwendet werden), und ich habe immer noch keine signifikante Steigerung der Kachelgeschwindigkeit festgestellt. Bei dieser Geschwindigkeit brauche ich nur für Zoom 17 einen Monat, und diese Zeit nimmt nur exponentiell zu, wenn ich auf Zoom 21 zugehe
Update 2: Ich habe versucht, auch materialisierte Ansichten zu erstellen, und es ist keine Änderung der Leistung festzustellen, sodass die Optimierung der Datenbank nicht funktioniert. Ich denke, ich muss die Datei tilestache-seed.py selbst optimieren oder einen neuen Weg finden, um die Kacheln zwischenzuspeichern.
Hardware-Informationen Ich führe die Caching-Prozesse auf 8 verschiedenen PCs aus, von denen einer ein i7 mit 32 GB RAM und einer ein i3 mit 4 GB RAM ist, aber beide geben mir fast die gleiche Caching-Geschwindigkeit (ca. 100.000 Kacheln pro Tag).
quelle
Standardmäßig erstellt shp2pgsql KEINE Indizes. Sie müssen übergeben
-I
, um einen räumlichen Index zu generieren. http://postgis.net/docs/manual-1.3/ch04.html#id435762Überprüfen Sie, ob Ihre Tabelle einen Index hat, indem Sie
\d tablename
in psql ausführen. In der Liste der Indizes sollte eine Zeile mit "gist" (sofern Sie keinen anderen Index ausgewählt haben) und dem Namen Ihrer Geometriespalte stehen.Sie können auch eine nachträglich hinzufügen, siehe http://postgis.net/docs/manual-1.3/ch03.html#id434676 (lassen Sie sich von der Notiz über Verlust nicht abschrecken):
Da Sie wahrscheinlich auch nicht-räumliche Spalten in Ihren Abfragen verwenden, möchten Sie normalerweise Indizes für jede Spalte erstellen, die für die Suche verwendet wird. Wenn zum Beispiel haben Sie eine Abfrage wie
SELECT * FROM roads WHERE priority = 3;
dannpriority
verwendet wird , und das Hinzufügen eines Index für es wird deutlich Beschleunigungs-Dinge:CREATE INDEX idx_roads_priority ON roads(priority);
.quelle
Wenn Sie eine Standardabfrage verwenden, sollten Sie auch eine materialisierte Ansicht aus der Abfrage erstellen und Ihre Kacheln daraus erstellen: http://www.postgresql.org/docs/9.3/static/sql-creatematerializedview.html
Damit erstellen Sie eine Tabelle, in der die Abfrage gespeichert ist (sodass Sie sie möglicherweise in Zukunft aktualisieren können). Stellen Sie sicher, dass Sie räumliche Indizes für die untergeordneten MVs haben, und Sie sind dann so schnell wie möglich.
Möglicherweise haben Sie einen räumlichen Index, aber Sie wählen nur einen Teil der Daten aus, was bedeutet, dass Sie den räumlichen Index nicht mehr verwenden ...
quelle