Eigener Map-Server / mod_tile - tirex

Hallo zusammen,

zuersteinaml möchte ich mich vorstellen.
Mein name ist Patrick und komme aus Erftstadt bei Köln.

Derzeit bin ich dabei einen eigenen Mapserver für ein Projekt zu installieren.
Der Import der germany.osm Datenbank in den PostgreSQL/Postgis hat soweit auch funtioniert.
Mapnik als render läuft soweit auch. Allerdigs ist mir aufgefallen das ich nun für die Zoomstufe 0 - 11 ganze 3Tage gerendert habe.
auf Zoom 11 habe ich 2 kacheln in 1.5min gerendert. Mir kommt diese Zeit sehr hoch vor.
wenn ich nun Deutschland bis Zomm 18 vorrendern würde wäre mein server ( Quad Xeon 3,4Ghz / 8GB Ram / 300GB U320SCSI Raid 10 ) ca. 25 Jahre am rechnen.
Ist das Normal?

Nun habe ich versucht mod_tile nach der Anleitung hier im wiki zu installieren, in der Hoffnung das dieses Modul mir die kacheln onthefly rendert ( was ich mir jedoch nicht vorstellen kann, da eine kachel auf Zoom 12 mit mapnik ca. 5min rendert ).
Leider spuckt der Apache mir aber noch nicht einmal die Kacheln aus die bereits gerendert sind ( 0-11).
folglich daraus funktioniert auch nicht der tirex, da dieser ja auch auf mod_tile zurückgreift.

Welches Verzeichnis ist nun richrtig für die Kacheln ?
/var/lib/mod_tile/$z/$x/$y.png
/var/lib/mod_tile/Default/$z/$x/$y.png
/var/lib/mod_tile/default/$z/$x/$y.png

Ich habe auch festgestellt wenn ich mod_tile zum vorrendern starte ( ./render_list -m default -a -z 0 -Z 10 ) dann greift dieser auch auf den Postgre Server zu und schreibt mir Metatiles ind folgenden ordenr
/var/lib/mod_tile/default/$z/0/0/0/0/0.meta

Wenn ich nun aber meine vorgerenderten kacheln in den default Ordner verschiebe , so dass die Dateistruktur passt, kann der apache nicht die Kacheln über
http://tile-srv.server.de/osm_tiles2/$z/$x/$y.png aufrufen(404)

Ich hoffe mir kann jemand helfen… so langsam bin ich am verzweifeln :frowning:
evtl kommt ja auch jemand aus dem raum köln und könnte mir gegen eine aufwandentschädigung helfen.

Ich bedanke mich schon im Voraus.
Viele Grüße
Patrick

Hi Patrick,

zu dem tirex kann ich nichts sagen, aber dass die niedrigen Zoomstufen lange brauchen, ist normal. Für Zoomstufe 0 muß schließlich die ganze Welt datenmäßig abgefragt werden; bzw bei dir ganz Deutschland für eine einzige Kachel.
Nach meinen Benchmarktest:
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Benchmark
geht zoomstufe 9 am schnellsten. Darunter ist die Datenmenge der Flaschenhals, darüber die Anzahl der Tiles (Plattenzugriff usw). Die Hochrechnung ist also nicht so ganz einfach.
Ich importiere und rendere nur NRW. Für Zoomstufe 0 bis 7 habe ich mir die tiles einmalig von osm.org geholt, die ändern sich ja eher wenig (ist ja auch nur ne grobe Übersicht drauf).

Bei Zoomstufe 18 wirst du viele Tiles haben, die wenig bis nichts enthalten. Die rauschen natürlich schneller durch als die Kölner Altstadt :wink:

Fang doch einfach mal mit nem kleineren gebiet an, dann läuft es schneller durch, und du hast ein Erfolgserlebnis :wink:

EDIT: zu tirex gabs hier kürzlich ne Anfrage:
http://www.mail-archive.com/talk-de@openstreetmap.org/msg86503.html

gruß,
ajoessen

ich habe Europa importiert. Am längsten dauerte bei mir Zoom Level 6/7 mit bis zu 4 Minuten pro Tile. Level 11/12 sind dann -wenn man nicht ungeduldig ist und auch mal 30 Sekunden auf alle Tiles im Bildschirm warten kann- auch On-the-fly machbar.
Wenn Apache nur 404 zurück gibt, müsste doch was im error.log stehen.
Ich hatte mal das Problem, dass ich das Vorab-Rendern nicht mit dem www-data Benutzer gestartet hatte und die Cache-Verzeichnisse dann nicht www-data gehören, also nicht schreib- und/oder lesbar waren

hi patrick,

hier mein Auszug aus /etc/apache2/apache2.conf


<IfModule tile_module>
   ModTileRenderdSocketName /tmp/tirex.sock
#   
#  ModTileTileDir so lassen wegen bug!!!
#  /var/lib/mod_tile auf echte tile-directory linken

   ModTileTileDir    /var/lib/mod_tile        
   
   AddTileConfig    /otm/tiles/base/        base
</IfModule>

UNBEDING ModTileTileDir GENAU so lassen, sonst spielt mod_tile nicht mit.
Ich habe 3 Tage lang nach dem Problem gesucht, bis ich in den Tiefen eines wikis die info las, dass das ein Bug in mod_tile ist und nicht anders geht.

Ich hab dann /var/lib/mod_tile dahin verlinkt, wo ich die tiles von tirex erzeugen lasse.


ls -la /var/lib/mod_tile
lrwxrwxrwx 1 root root 32 2011-07-25 15:54 /var/lib/mod_tile -> /data2/OSM/projekte/mapnik/tiles

und siehe da: “kaum macht man’s richtig, funktioniert’s” :wink:

Gruss
Walter

Ist sie auch. Ich habe auf einem vergleichbaren System Renderzeiten von <1s - 15 Sekunden, je nach Zoomlevel und Datendichte.

Du hast vermutlich irgendwo noch ein schweres Problem mit ineffizienten Renderregln, Datenbankperformance oder ähnlichem.

Nein - aber mehrere Wochen würde das immer dauern. Es ist aber auch nicht sinnvoll, bis 18 vorzurendern, weil die meisten Tiles niemals benötigt werden. Es ist ja grade der Sinn von mod_tile/tirex nur die angeforderten Tiles auf Anfrage zu rendern.

In der default Einstellung verwendet mod_tile “meta tiles” anstelle von normalen tiles. Das sind 8x8 tiles zusammen in eine Datei gepackt. Dies hilft die Anzahl der Dateien im Dateisystem geringer zu halten und hilft auch tiles effizienter zu rendern.

Insofern kann mod_tile in dieser Einstellung nichts mit den einzelnen .png Dateien anfangen.

Theoretisch kann mod_tile auch mit einzelnen tiles umgehen, allerdings muss man das als pre-processor directive vor dem Compilieren in source code einstellen ( http://trac.openstreetmap.org/browser/applications/utils/mod_tile/render_config.h#L62)). Da soweit ich weis alle die mod_tile verwenden metatiles verwenden, ist der nicht-metatile code allerdings nicht so gut getestet. Ich kann also nicht sagen ob das noch bug frei funktioniert.

Insofern wuerde ich empfehlen bei metatiles zu bleiben und die tiles einfach im metatile format neu zu berechnen.

Da das metatile format lediglich eine zusammenreihung von einzel .png tiles ist, koennte man vermutlich relativ leicht ein script schreiben das die vorhandenen einzel tiles in metatiles zusammen fuegt. Ob so ein script in tirex oder mod_tile/renderd bereits vorhanden ist weis ich jedoch nicht.

Bezueglich der Performance: Alle Z18 tiles fuer groessere Flaechen vorauszuberechnen ist selten sinnvoll, da es viel zu viele sind, von denen die meisten nie benoetigt werden. Insofern ist da mod_tile die richtige Wahl.

Die Geschwindigkeit einzelne Tiles neu zu berechnen, schwankt sehr stark von tile zu tile, von style zu style, abhaengig davon wie viele Daten in der Datenbank sind und von der Hardware. Bei lowzoom tiles z.B. z6 - z9 ist es nicht unueblich etliche Minuten zu benoetigen, koennen auch schon mal mehr als 10 Minuten pro tile sein. Bei Z18 tiles sind es hingegen meist nur wenige Sekunden (wodurch das on the fly rendering moeglich wird).

Hi,

Zitat: Nop;" Du hast vermutlich irgendwo noch ein schweres Problem mit ineffizienten Renderregln, Datenbankperformance oder ähnlichem"

Genau das vermute ich nämlich auch!
Ich habe die ganze Postgre und Mapnik sache nach dieser Anleitung installiert und konfiguriert:

http://www.hyperionreactor.net/blog/how-build-your-own-osm-server-part-1-postgis-and-mapnik

Also mit renderregeln denke ich mal, meinst du die osm.xml?
Ich habe mir mal diese osm.xml genauer angeschaut, was mir aufgefallen ist ist, dass die ganzen SQL Statements wohl nicht nach bereichen gefilter werden.
Also nirgends ist ein variabler Filter der die sql statements auf einen lat, lon Bereich eingrenzt!?
Auch habe ich der Tabelle planet-osm_nodes auf die spalten id, lat und lon ein index verpasst leider ohne erfolg

Oder sind etwa sogar aufbereitungsschritte für die sql datenbank in dem oben genannten HowTo fehlerhaft oder sogar garnicht aufgeführt?
Weil als der osm2pgsql fertig war hat der mir noch ne Fehlermedlung zum schluss rausgehauen, das der irgend nen SELCT Statement nicht ausführen konnte.

Meine germany PgSQL Datenbank ist nun 12,8GB Groß kann das hinkommen? Weil der selbe germany.osm import in eine MySQL datenbank ist ca. 60GB Groß.
Bevor ich mich jetzt intensiv an mod_tile / tirex rangebe wäre es natürlich sinnvol zu wissen ob meine DB ordnungsgemäß läuft.

Vielen Dank.
Liebe Grüße
Patrick

Das haengt der Mapnik dann noch automatisch dran, je nachdem, welches Tile er rendert.

Das ist voellig unnoetig und wird sowohl den Platzbedarf auf der Platte als auch die Zeit, die die Maschine fuer das Aktualisieren braucht, erhoehen.

Was unter Umstaenden etwas bringen kann, sind spezielle Indizes fuer einige ganz bestimmte SELECT-Statements im Style-File. Aber nicht blind, sondern nur nach gruendlicher Analyse. Im Postgres-Configfile kann man einstellen, dass er z.B. alle Abfragen loggen soll, die laenger als 3 Sekunden brauchen oder so. Wenn Du das eine Weile genutzt hast, siehst Du am Vergleich Logfile - osm.xml, welche Styles die sind, die besonders lang brauchen. Dann kann man dafuer einen Spezialindex machen (ein raeumlicher Index mit zum Style identischer WHERE-Bedingung beim CREATE INDEX).

Bye
Frederik