Comment faire évoluer efficacement les données OpenStreetMap

9

Depuis plus d'un an maintenant, j'exécute un serveur PostGIS interne rempli de données OSM, utilisé à la fois pour la génération de tuiles basée sur Mapnik et le géocodage basé sur Nominatim, mis à jour avec des répliques journalières. Cela fonctionne plutôt bien.

Cependant, comme l'utilisation augmente de façon exponentielle, j'aimerais obtenir une meilleure fiabilité et de meilleures performances en ajoutant des serveurs PostgreSQL supplémentaires. Et je suis un peu perdu.

Puisque PostgreSQL ne semble pas gérer la réplication par lui-même, je penserais à utiliser un pied de middleware comme PgPool-II pour garder les serveurs synchronisés. Mais je crains que cela ne soit que nécessaire pour cet usage: un rapport lecture / écriture très élevé, où toutes les écritures sont effectuées à la même heure exacte chaque jour.

Mes questions sont simples: que feriez-vous pour garder ces serveurs synchronisés? Et que fait-on pour cela à la Fondation OpenStreetMap, MapQuest, Mapbox ou CloudMade?

Merci.

Pierre
la source

Réponses:

13

Premièrement, Postgres 9 et versions ultérieures ont une prise en charge de la réplication intégrée et c'est ce que nous (l'équipe des opérations d'OpenStreetMap) prévoyons d'utiliser maintenant que nous fonctionnons (il y a environ 90 minutes) sur Postgres 9.1 pour la base de données principale.

Pour répondre à votre question sur ce que fait OSM, à ce jour, nous ne faisons aucune sorte de réplication - il existe une grande base de données Postgres agissant comme base de données principale derrière le site Web et contenant les données brutes. Il existe ensuite des bases de données Postgres + Postgis secondaires pour le rendu et le géocodage, qui sont toutes deux remplies à l'aide des vidages de planète et des différences pour la mise à jour.

TomH
la source
Ne connaissait pas la réplication intégrée de Postgres. Cela fera très probablement l'affaire. Merci!
Pierre
1
Consultez également REPMGR ( repmgr.org ) qui utilise les capacités de réplication en continu de Postgres et étend les fonctionnalités pour permettre de replacer automatiquement un esclave sur un maître.
Shyam Sundar CS
4

Je peux voir deux options ici:

  1. Mise en commun de bases de données - réplication http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling , je voudrais PG cluster car il est synchrone et permet l'équilibrage de charge. Vous pouvez aussi aller avec maître - architecture esclaves , mais sans mise en commun de connexion et asynchrone, tout dépend de l'architecture et de la vitesse de réplication que vous souhaitez obtenir .Plus infor sur les pgpoll-2 ici -petit FAQ ( http: //www.dalibo .org / _media / pgpool.pdf )
  2. WebOptimisation - pour Mapquest et OSF pour autant que je sache, ils utilisent la mise en cache Web au niveau du serveur + la mise en commun des connexions. Cela signifie qu'il ne demanderait pas à Postgres / Postgis autant de demandes que je cache certaines données. 3.Optimisations postérieures - prédication de requêtes au niveau de la base de données, indexation et normalisation de la base de données. Je choisirais "PostGis en action" ( http://manning.com/obe/ ) pour en savoir plus sur les types de données postgis et y adapter votre serveur
Alex H
la source
1
Merci. La première option est définitivement préférée. La seconde est en partie effectuée, en utilisant un CDN pour la livraison et un cache Nginx / Memcached local sur les serveurs frontaux.
Pierre