Il miglior sistema GIS per applicazioni Web ad alte prestazioni - PostGIS vs MongoDB


36

Sto lavorando su un'applicazione web / mobile in base ai dati sulla posizione. Dato che ho già familiarità con MongoDB, ho scoperto che l'indicizzazione geospaziale di mongo è abbastanza adatta alle mie esigenze. Dato che mi occupo principalmente di punti di localizzazione semplici / brevi, l'indicizzazione Mongo 2d fa per me.

Lungo la strada ho scelto PostGIS, per via del suo modo stabile / maturo. E le sue fantastiche funzionalità. Ma la mia principale preoccupazione è la prestazione poiché i miei dati dipendono fortemente dalla posizione (principalmente il 70 - 80% delle chiamate db si occupa della posizione).

Mi piace mongo perché è già utilizzato da app Web ad alte prestazioni come foursquare. Ma ho visto PostGIS essere utilizzato principalmente in progetti governativi / aziendali (principalmente app non web / mobili). Quindi sono un po 'confuso in questo momento per scegliere il giusto db GIS per la mia app web / mobile? Hai qualche suggerimento?


2
crea un indice spaziale con postgres / postgis e vedrai buone prestazioni. Ma se sei più felice con MongoDB, continua con quello.
Mapperz

Risposte:


36

Se il tuo carico di scrittura (flusso di dati in entrata) può potenzialmente crescere senza limiti (se il successo del tuo progetto web farà crescere la quantità di scritture), vai con Mongo, perché sarà molto difficile progettare scrivere colli di bottiglia in PostGIS / PostgreSQL una volta cresciute oltre le capacità di un singolo server di fascia alta (che, come si può notare, sono dannatamente enormi).

Puoi progettare buone soluzioni PostGIS / PostgreSQL per carichi di lettura pesanti (replica master / slave) e per enormi dimensioni di dati (partizionamento di tabelle), ma il carico di scrittura è difficile. Hai già presentato il caso contro Mongo e per PostGIS, che è il set di funzionalità e la maturità del codice di PostGIS molto più ampi, quindi bilanciati rispetto agli altri problemi.


3
Oh, e ricorda, "MongoDB è scala web". xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey

sì, lo so .. è stato davvero divertente (e colpito alla testa se volevi solo immaginarti con le ultime tecnologie) :)
RameshVel

1
Bene, puoi sempre "webscale" disattivando fsync = off;)
Ragi Yaser Burhum,

1
PostgresXC ora può fornire un sistema di scrittura parallela con garanzie transazionali complete ed esecuzione di query multi-nodo. Cintura e bretelle, OLAP e OLTP, da vedere. E supporta PostGIS.
Paul Ramsey,

Ma se scegli PostgresXC / XL, dovrai conservare tu stesso il pacchetto. È ufficialmente disponibile solo per Fedora / Redhat, gli amanti di Ubuntu devono passare il tempo a compilare manualmente le cose.
Ravi Kumar,

21

Uso PostGIS da alcuni anni e solo di recente ho iniziato a studiare come avrei potuto usare MongoDB per gestire alcuni casi d'uso. Avevo a che fare con dati puntuali con campi sparsi, come i dati OSM con un numero variabile di tag per record, e poiché MongoDB non ha uno schema, si presta bene a questo. Ho caricato un campione di questi dati in un'istanza di ciascun DB e questo è quello che ho trovato.

Mi sembra che per la semplice memorizzazione e il recupero dei dati dei punti Mongo funzioni perfettamente. Le query geospaziali del bounding box sembrano funzionare bene e trovo che le prestazioni complessive siano molto buone. È anche molto facile da configurare e iniziare, anche se ho scoperto che lo strumento mongoimport non mi consente di definire un campo coord 2D composto in un file TSV o CSV. Dal momento che è abbastanza facile scrivere uno script che genera JSON, questo non è stato un grosso problema. Il suo principale svantaggio al momento è che quasi nient'altro nel regno geospaziale può leggere nativamente i dati da esso. Sembra che ci sia un plug-in di origine dati Mapnik sperimentale su https://github.com/springmeyer/mapnik-mongo , ma è tutto ciò che sono riuscito a trovare.

D'altra parte PostGIS richiede un po 'più di tempo per essere configurato (almeno per me), ma come è stato menzionato sopra, offre molte più funzioni immediatamente. Oltre a fornire capacità analitiche spaziali molto più sofisticate, è anche nativamente supportato da moltissime altre applicazioni e librerie; Mapserver, Mapnik, QGis, GDAL, ecc. Per me PostGIS è molto più un vero sistema GIS, piuttosto che un semplice sistema di archiviazione e recupero.

Per quanto riguarda le prestazioni, ho scoperto che avrei potuto recuperare i dati molto rapidamente da entrambi i sistemi. Tuttavia, sembra che PostGIS abbia beneficiato maggiormente della presenza di indici. MongoDB è stato leggermente più veloce nel restituirmi l'intero set di dati (2 milioni di record) in una volta, e leggermente più lento nel restituire una query che utilizzava un indice - la prima volta. Non sono esattamente sicuro del meccanismo che utilizza per la memorizzazione nella cache, ma posso vedere che se ripeto una query in MongoDB, i risultati tornano molto più rapidamente la seconda volta. Vedo qualcosa di simile in PostGIS, ma non nella stessa misura. Ho anche notato che l'utilizzo della memoria sulla mia macchina sembra essere molto più alto con MongoDB in esecuzione rispetto a PostGIS.

Quindi, la mia conclusione è che non mi sbarazzerò di PostGIS come sistema di archiviazione e analisi geospaziale predefinito, ma per alcuni tipi di progetti (vale a dire mappe web che visualizzano riquadri di immagini e / o dati puntuali), potrei prendere in considerazione l'uso di MongoDB come il mio archivio dati.

Roger


1
sono assolutamente d'accordo con te .. mongo è un'ottima opzione per gestire i dati geografici di base. attualmente sto eseguendo query sferiche e limitanti più semplici, e sta andando bene. Un'altra cosa che voglio aggiungere è Solr lucene che fornisce anche le funzioni geografiche di base come mongo, ed è anche abbastanza veloce quando si usano query sfaccettate. attualmente sto usando la combinazione di mongo e Solr ..
RameshVel

@RameshVel potresti dire qualcosa di più su solr lucene?
km

@rashad, puoi installare elasticsearch (basta scaricare, estrarre ed eseguire) e giocare con le query Geo DSL. È piuttosto semplice, ma se vuoi ricerca / sfaccettature e geo, puoi usarlo.
Ravi Kumar,

3

Per quanto riguarda l'utilizzo della memoria con Mongo, vale la pena sottolineare che Mongo si affida interamente alla cache dei file del sistema operativo per ottenere i suoi indici e dati in memoria - non esiste un concetto di "buffer di memoria mongo / cache dell'indice", quindi lo vedrai provare (o piuttosto, il sistema operativo utilizzerà) tutta la RAM disponibile fino al punto in cui tutti i file di dati sono stati memorizzati nella cache.

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.