Cómo escalar datos de OpenStreetMap de manera eficiente

9

Desde hace más de un año, estoy ejecutando un servidor interno PostGIS lleno de datos OSM, utilizado tanto para la generación de mosaicos basada en Mapnik como para la geocodificación basada en Nominatim, actualizada con réplicas diarias. Esto funciona bastante bien.

Sin embargo, como el uso está creciendo exponencialmente, me gustaría lograr una mejor confiabilidad y rendimiento al agregar servidores PostgreSQL adicionales. Y estoy un poco perdido.

Dado que PostgreSQL no parece manejar la replicación por sí mismo, pensaría en usar una parte de middleware como PgPool-II para mantener los servidores sincronizados. Pero me temo que no sería más que necesario para este uso: relación lectura-escritura muy alta, donde todas las escrituras se realizan a la misma hora todos los días.

Mis preguntas son simples: ¿Qué harías para mantener estos servidores sincronizados? ¿Y qué se hace para esto en OpenStreetMap Foundation, MapQuest, Mapbox o CloudMade?

Gracias.

Pierre
fuente

Respuestas:

13

En primer lugar, Postgres 9 y posteriores tienen soporte de replicación incorporado y eso es lo que nosotros (el equipo de operaciones de OpenStreetMap) esperamos usar ahora que estamos (hace unos 90 minutos) corriendo en Postgres 9.1 para la base de datos principal.

Para responder a su pregunta sobre qué hace OSM, hasta la fecha no hacemos ningún tipo de replicación: hay una gran base de datos Postgres que actúa como la base de datos maestra detrás del sitio web y contiene los datos sin procesar. Luego hay bases de datos secundarias Postgres + Postgis para renderizar y geocodificar, las cuales se rellenan utilizando los volcados y las diferencias de planeta para actualizar.

TomH
fuente
No sabía sobre la replicación incorporada de Postgres. Esto probablemente hará el trabajo. ¡Gracias!
Pierre
1
También revise REPMGR ( repmgr.org ), que utiliza las capacidades de replicación de transmisión de Postgres y extiende la funcionalidad para permitir recurrir a un esclavo a un maestro automáticamente.
Shyam Sundar CS
4

Puedo ver dos opciones aquí:

  1. Agrupación de bases de datos: replicación http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling , agregaría PG cluster ya que es síncrono y permite el equilibrio de carga. También puede usar la arquitectura maestro-esclavo, pero sin agrupación de conexiones y asíncrona, todo depende de la arquitectura y la velocidad de replicación que desea lograr. Más información sobre pgpoll-2 aquí -pequeñas preguntas frecuentes ( http: //www.dalibo .org / _media / pgpool.pdf )
  2. Optimización web: para Mapquest y OSF, hasta donde yo sé, utilizan el almacenamiento en caché web a nivel de servidor + agrupación de conexiones. Eso significa que no solicitaría de Postgres / Postgis tantas solicitudes como almacenar en caché algunos datos. 3. Optimizaciones de Postgis: predicación de consultas a nivel de base de datos, indexación y normalización de bases de datos. Me gustaría ir a "PostGis en acción" ( http://manning.com/obe/ ) para obtener más información sobre los tipos de datos postgis y adaptar su servidor a ellos
Alex H
fuente
1
Gracias. La primera opción es definitivamente preferida. El segundo se realiza en parte, utilizando un CDN para la entrega y caché local Nginx / Memcached en los servidores frontales.
Pierre