So skalieren Sie OpenStreetMap-Daten effizient

9

Seit über einem Jahr betreibe ich einen internen PostGIS-Server mit OSM-Daten, der sowohl für die Mapnik-basierte Kachelgenerierung als auch für die Nominatim-basierte Geokodierung verwendet wird und mit Tagesreplikaten aktualisiert wird. Das funktioniert ziemlich gut.

Da die Nutzung jedoch exponentiell zunimmt, möchte ich durch Hinzufügen zusätzlicher PostgreSQL-Server eine bessere Zuverlässigkeit und Leistung erzielen. Und ich bin irgendwie verloren.

Da PostgreSQL die Replikation nicht alleine zu handhaben scheint, würde ich darüber nachdenken, eine Middleware wie PgPool-II zu verwenden, um die Server synchron zu halten. Aber ich fürchte, es wäre nichts anderes als notwendig für diese Verwendung: ein sehr hohes Lese-Schreib-Verhältnis, bei dem alle Schreibvorgänge jeden Tag genau zur gleichen Zeit ausgeführt werden.

Meine Fragen sind einfach: Was würden Sie tun, um diese Server synchron zu halten? Und was wird dafür bei der OpenStreetMap Foundation, MapQuest, Mapbox oder CloudMade getan?

Vielen Dank.

Pierre
quelle

Antworten:

13

Erstens verfügen Postgres 9 und höher über eine integrierte Replikationsunterstützung, und genau das erwarten wir (das OpenStreetMap-Betriebsteam), wenn wir jetzt (seit etwa 90 Minuten) auf Postgres 9.1 für die Hauptdatenbank arbeiten.

Um Ihre Frage zu beantworten, was OSM tut, führen wir bis heute keine Replikation durch. Es gibt eine große Postgres-Datenbank, die als Master-Datenbank hinter der Website fungiert und die Rohdaten enthält. Es gibt dann sekundäre Postgres + Postgis-Datenbanken zum Rendern und zur Geokodierung, die beide mit den Planet Dumps und Diffs zum Aktualisieren gefüllt werden.

TomH
quelle
Ich wusste nichts über die integrierte Replikation von Postgres. Dies wird sehr wahrscheinlich den Job machen. Vielen Dank!
Pierre
1
Überprüfen Sie auch REPMGR ( repmgr.org ), das die Streaming-Replikationsfunktionen von Postgres nutzt und die Funktionen erweitert, damit ein Slave automatisch auf einen Master zurückgesetzt werden kann.
Shyam Sundar CS
4

Ich kann hier zwei Optionen sehen:

  1. Datenbank-Pooling - Replikation http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling , ich würde PG-Cluster verwenden, da es synchron ist und einen Lastausgleich ermöglicht. Sie können auch mit Master-Slaves-Architektur arbeiten, aber ohne Verbindungspooling und asynchron hängt alles von der Architektur und der Replikationsgeschwindigkeit ab, die Sie erreichen möchten. Weitere Informationen zu pgpoll-2 finden Sie hier - kleine FAQ ( http: //www.dalibo) .org / _media / pgpool.pdf )
  2. WebOptimisation - für Mapquest und OSF verwenden sie, soweit ich weiß, Web-Caching auf Serverebene + Verbindungspooling. Das bedeutet, dass es nicht so viele Anfragen von Postgres / Postgis anfordert, wie ich einige Daten zwischenspeichere. 3. Postgis-Optimierungen - Predigen von Abfragen auf DB-Ebene, Indizieren und Datenbanknormalisierung. Ich würde mich für "PostGis in Aktion" ( http://manning.com/obe/ ) entscheiden, um mehr über Postgis-Datentypen zu erfahren und Ihren Server an diese anzupassen
Alex H.
quelle
1
Vielen Dank. Die erste Option wird definitiv bevorzugt. Die zweite ist teilweise erledigt, wobei ein CDN für die Zustellung und der lokale Nginx / Memcached-Cache auf den Frontservern verwendet werden.
Pierre