CartoCSS OSM deutscher Stil und ein paar Fragen zu Performance

Hallo zusammen,

ich bin ein Neuling in dem Thema OSM.

Ich habe mich eine wenig durch die spärlichen Windowsanleitungen { warum Windows (7)… ich habe 0 Ahnung von Linux :slight_smile: } durch gehangelt und bin auf folgendem Stand:

Postgresql Db 9.3 32 Bit mit Postgis
osm2pgsql zum Daten Import
Python 2.7
openstreetmap-carto für TileMill zum (Um)gestalten des Kartendesigns
Mapnik 2.2.0 zum Rendern der Tiles

Es läuft alles soweit ganz gut :slight_smile:
Ich rendere mit ca. 70 Tiles die Sekunde auf folgendem Rechner

AMD Phenom II X4 3.0 Ghz
8 GB RAM
256 SSD

Nun meine Fragen :slight_smile:

Ich suche, da ich doch ein sehr schlechte Designer bin, eine TileMill Projekt im deutschen OSM Stil damit ich die dann bissi anpassen kann.

Kann mir die jemand zur Verfügung stellen?

Dann noch eine Frage zu den Performance.
Ich habe
=> alle Shape Files in die DB gepackt
=> das Python Script mal so angepasst, dass es nicht jeden Tiles in die cmd printen
=> dem Postgres Server mehr Speicher über die postgresql.conf verschafft

Was könnte ich denn noch alles machen um etwas mehr Tile pro Sekunde zu bekommen?

Lieben Gruß

Andreas

Hallo Andreas

Folgende Maßnahmen erhöhen allgemein die Perfomance

  • Mehr Hauptspeicher (der ist immer am schnellsten).
  • Swap-Device (Auslagerungsdatei) auf die SSD packen (möglichst groß).
  • Datenbank auf ein Raid legen (höhere Leseperformance).
  • Indizes der Datenbank auf das SSD legen (sehr geringe Latency).
  • Flatfile für die Knoten der Datenbank verwenden (schnellerer zugriff).
  • Metatiles (z.B. 4x4 Tiles) statt einzelne Tiles rechnen.

In deiner obigen Aufzählung hast du die Postgis-Erweiterung vergessen.
Um dir gezieltere Hinweise geben zu können, müsste man mehr über deine Ziele wissen und wie groß der Bereich ist den du rendern willst.

PS-1: Herzlich willkommen im Forum und bei OSM.
PS-2: Eine Leerzeile reicht in der Regel aus.

Edbert (EvanE)

Hi Evan,

Danke für die rasche Antwort :slight_smile: Eine Zeile wird gemacht :wink:

Genau Postgis habe ich vergessen… es ist schon ein Haufen Tools, die man installieren und verwerden muss :slight_smile:

Meine Ziele sind:
Die ganze Welt zu rendern
Anschließend “vorerst” nur Deutschland aktuell zu halten.
Meine Firma möchte eine Android App mit eigenem Tile Server entwickeln.
In der App können dann Gebiete wie z.B. Hessen Offline per MBTiles verwendet werden
Der Style der Tile soll den deutschen OSM Style entsprechen.
Es soll OSM mit Informationen der Müllentsorgung gefüttert werden. (Lagerplätze, Müllkippen usw.)

Wir haben nun eine Root Server bestellt.
Es wird ein Intel® Xeon® E5-1650 v2 Hexa-Core Ivy Bridge-E mit 32 GB DDR3 RAM und 2 x 2 TB SATA 6 Gb/s 7200 rpm
Leider keine SSD

Ich habe beim mir auf dem System irgendwie nicht gesehen, dass viel RAM verwendet wurde…
Ich muss doch nur in der Config des Postgres Server die folgenden Punkten ändern oder ?
=> maintenance_work_mem => 512MB
=> shared_buffers => 768MB
=> work_mem => 512

Wie groß sollte ich die Swap-Device machen?

Ich denke die Platten sind dann im Raid, dass werde ich aber nochmal checken.

Wie kann man die Indizes der Datenbank auf einen anderen Pfad legen? Ich hab da irgendwie nichts gefunden…
Ich verwende im Moment die Beispiel-Datenbank von Postgis.

Nach den Flatfiles hab ich jetzt auch schon mal gesurft, finde da aber nicht wirklich etwas dazu.
Hast du vielleicht eine Link für mich bzw. kannst du mir sagen wie es geht?

Metatiles habe ich jetzt schon paar mal gelesen und gehört. Mir ist auch klar, dass einfach 1 größes Tile gerendert wird und das dann in 4 gesplittet wird.
Ich verwende im Moment einfach die Generate_Tiles.py http://svn.openstreetmap.org/applications/rendering/mapnik/ mit paar kleine Anpassungen… hab leider auch erst letzte Woche mit Python angefangen :slight_smile:
Hättest du da vielleicht ebenfalls eine Link für mich :slight_smile:

Dann noch 2 Fragen die ich hätte:

  1. autovacuum = off oder autovacuum = on… wenn ich das autovacuum = off schalte dann meckert Postgres immer von wegen Dateninkonsistenz :slight_smile: Oder magst du mir mal dein Conifg zur Verfügung stellen :slight_smile:
  2. Sollte ich Postgres bzw. osm2pgsql 64bit verwenden und Python + mapnik 32bit? das würde die DB doch ebenfalls etwas performanter machen oder ?!?

Danke für die Zeit die du dir nimmst.

CREATE TABLESPACE …
http://www.postgresql.org/docs/9.1/static/sql-createtablespace.html

und ALTER INDEX … SET TABLESPACE …
http://www.postgresql.org/docs/9.1/static/sql-alterindex.html

Bringt aber wahrscheinlich nur was, wenn Du die Indizes auf eine andere Platte als die DB legst.

oh, und schaue Dir mal das an
http://www.geofabrik.de/media/2012-09-08-osm2pgsql-performance.pdf

Genial… ich bin da schon mal an ein anders PDf dran gekommen. Daher auch meine momentanen Postres Conifg.

Hast du einen Pfad zu den Media Files :slight_smile:

-snip-

/home/thomas/mp3/ :wink: oder was meinst Du mit Media Files?

Evtl hilft Dir das weiter. Es sagt, wo welche Pfade festgelegt werden
http://switch2osm.org/serving-tiles/manually-building-a-tile-server-12-04/

Ich meinte /home/thomas/xxx/ wink :wink: Spaß bei Seite :slight_smile:

Die Geofabrik hat unter dem Ordner http://www.geofabrik.de/media/ wohl mehrere sehr interessante PDFs rum liegen. Deswegen die Frage, wie du an das PDF gekommen bist. Ich hatte da eins, dass auf einer älteren PostGres Version aufgesetzt hat.

Super :wink: da hab ich noch paar Sachen entdeckt, die ich mal antesten werde :slight_smile:

Sorry, falls der falsche Eindruck entstanden ist, ich würde mich mit Postgres / Postgis auskennen.
Mein ‘Wissen’ kommt vor allem von Diskussionen im Forum oder auf talk-de.
Der Rest ist allgemeines Computer-Wissen.

Konkret kann man bei Postgis jede Tabelle auf ein Device seiner Wahl anlegen resp. dorthin verschieben.

Gefühlsmäßig würde ich mit dem Vierfachen des Hauptspeichers anfangen.

Raid muss nicht immer die beste Alternative sein.
Im konkreten Fall ist es wahrscheinlich wegen der Zugriffzeiten günstiger die Daten über zwei getrennte Platten aufzuteilen. Beispielsweiße die Index-Tabellen auf die eine Platte und die Daten-Tabellen auf die andere Platte. Auf die weniger belastete Platte dann noch den Swap, wobei dafür eine eigene (kleinere) Platte immer am günstigsten ist.

Es geht einfach darum den Overhead zu reduzieren.

Bei OSM sind die Node-IDs bereits größer als 2^31. Wer also heute sicher für die Zukunft sein will, nimmt von vorne herein 64Bit System und Software. Es sei nicht verschwiegen, dass auch 32Bit Programme mit 64Bit Daten umgehen können. Aber da steckt immer zusätzlicher Aufwand drin und es kann versteckte Abhängigkeiten geben, die im Zweifelsfall nicht leicht zu finden sind. Welche Auswirkung eine Kombination von 64- und 32-Bit Versionen auf die Performance hat, vermag ich nicht einzuschätzen.

In Summe kann ich dir bei speziellen Fragen z.B. zur Konfiguration nicht wirklich helfen. Mit den zusätzlichen Angaben und Fragen in deinem zweiten Post, sind jetzt auch die Spezialisten aktiv geworden.

Edbert (EvanE)

Weiß nicht mehr woher ich den Link habe…aber fand es so interessant, dass ich mit den gemerkt habe. Mehr interessante PDFs gibts da nicht für Deinen Zweck…ingesamt 30 pdf, teilweise von 2007 habe ich gefunden. Da Directory Browsing nicht erlaubt ist, würde ich ungern posten wie man das rausfindet.

Es gibt von Mapnik leider noch keine 64bit Version des wegen muss man wohl ein wenige mixen :slight_smile:

Ich werde das mal Testen mit der 64Bit DB und dem 32 Bit Renderer.