Come ridimensionare i dati OpenStreetMap in modo efficiente


9

Da oltre un anno, gestisco un server PostGIS interno pieno di dati OSM, utilizzato sia per la generazione di tessere basata su Mapnik sia per la geocodifica basata su Nominatim, aggiornata con repliche giornaliere. Funziona abbastanza bene.

Tuttavia, poiché l'utilizzo sta crescendo in modo esponenziale, vorrei ottenere una migliore affidabilità e prestazioni aggiungendo ulteriori server PostgreSQL. E sono un po 'perso.

Dato che PostgreSQL non sembra gestire da solo la replica, penserei di usare un piede di middleware come PgPool-II per mantenere sincronizzati i server. Ma temo che non sarebbe nient'altro che necessario per questo utilizzo: un rapporto lettura-scrittura molto elevato, in cui tutte le scritture vengono eseguite alla stessa ora esatta ogni giorno.

Le mie domande sono semplici: cosa faresti per mantenere sincronizzati questi server? E cosa viene fatto per questo in OpenStreetMap Foundation, MapQuest, Mapbox o CloudMade?

Grazie.

Risposte:


13

In primo luogo, Postgres 9 e versioni successive supportano la replica integrata e questo è ciò che noi (il team operativo di OpenStreetMap) ci aspettiamo di utilizzare ora che siamo (circa 90 minuti fa) in esecuzione su Postgres 9.1 per il database principale.

Per rispondere alla tua domanda su cosa fa OSM, ad oggi non eseguiamo alcun tipo di replica: esiste un grande database Postgres che funge da database master dietro il sito Web e contiene i dati non elaborati. Esistono poi database Postgres + Postgis secondari per il rendering e per la geocodifica, entrambi popolati con i dump del pianeta e le differenze per l'aggiornamento.


Non sapevo della replica integrata di Postgres. Molto probabilmente questo farà il lavoro. Grazie!
Pierre,

1
Controlla anche REPMGR ( repmgr.org ) che utilizza le funzionalità di replica streaming di Postgres ed estende le funzionalità per consentire il fallback automatico di uno slave su un master.
Shyam Sundar CS

4

Posso vedere due opzioni qui:

  1. Pooling di database - replica http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling , vorrei raggruppare PG in quanto è sincrono e consente il bilanciamento del carico. Puoi anche andare con l'architettura master - slave ma senza pool di connessioni e asincrono, tutto dipende dall'architettura e dalla velocità di replica che vuoi raggiungere. Maggiori informazioni su pgpoll-2 qui -piccole FAQ ( http: //www.dalibo .org / _media / pgpool.pdf )
  2. WebOptimisation - per Mapquest e OSF, per quanto ne so, usano la cache web a livello di server + pool di connessioni. Ciò significa che non richiederebbe a Postgres / Postgis così tante richieste mentre memorizzo nella cache alcuni dati. Ottimizzazioni di Postgis: predicazione delle query a livello di DB, indicizzazione e normalizzazione del database. Preferirei "PostGis in action" ( http://manning.com/obe/ ) per saperne di più sui tipi di dati Postgis e adattare il tuo server a questi

1
Grazie. La prima opzione è decisamente preferita. Il secondo è in parte eseguito, utilizzando un CDN per il recapito e la cache locale Nginx / Memcached sui server front.
Pierre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.