Bestes GIS-System für leistungsstarke Webanwendungen - PostGIS vs MongoDB

36

Ich arbeite an einer Web- / Mobilanwendung, die auf Standortdaten basiert. Da ich mit MongoDB bereits vertraut bin, habe ich festgestellt, dass die geografische Indizierung von Mongo für meine Bedürfnisse gut geeignet ist. Da ich mich hauptsächlich mit einfachen / kurzen Positionspunkten befasse, ist die Mongo 2d-Indizierung gut für mich.

Unterwegs habe ich mich für PostGIS entschieden, weil es stabil und ausgereift ist. Und seine fantastischen Funktionen. Mein Hauptanliegen ist jedoch die Leistung, da meine Daten stark vom Standort abhängen (meistens befassen sich 70 - 80% der db-Anrufe mit dem Standort).

Ich mag Mongo, weil es bereits von leistungsstarken Web-Apps wie foursquare verwendet wird. Aber ich habe gesehen, dass PostGIS hauptsächlich in Regierungs- / Unternehmensprojekten verwendet wird (meist nicht für Web- / Mobilanwendungen). Ich bin also im Moment ein bisschen verwirrt, die richtige GIS-Datenbank für meine Web- / Mobile-App auszuwählen. Hast du irgendwelche Vorschläge?

RameshVel
quelle
2
Erstellen Sie einen räumlichen Index mit Postgres / Postgis und Sie werden eine gute Leistung sehen. Aber wenn Sie mit MongoDB zufriedener sind, fahren Sie damit fort.
Mapperz

Antworten:

36

Wenn Ihre Schreiblast (eingehender Datenstrom) möglicherweise unbegrenzt zunehmen kann (wenn der Erfolg Ihres Webprojekts dazu führt, dass die Anzahl der Schreibvorgänge zunimmt), dann entscheiden Sie sich für Mongo, da es sehr schwierig sein wird, Ihren Weg in der Datenbank zu planen Schreiben Sie einen Engpass in PostGIS / PostgreSQL, sobald Sie über die Fähigkeiten eines einzelnen High-End-Servers hinauswachsen (was, wie Sie wissen, verdammt groß ist).

Sie können gute PostGIS / PostgreSQL-Lösungen für hohe Leselasten (Master / Slave-Replikation) und große Datenmengen (Tabellenpartitionierung) entwickeln, aber die Schreiblast ist schwierig. Sie haben bereits die Argumente gegen Mongo und für PostGIS dargelegt, das viel umfangreichere Feature-Set und die Code-Reife von PostGIS. Vergleichen Sie dies also mit den anderen Bedenken.

Paul Ramsey
quelle
3
Oh, und denk dran, "MongoDB ist eine Web-Waage". xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey
Ja, ich weiß, dass ... es war wirklich lustig (und traf direkt in den Kopf, wenn Sie sich nur mit der neuesten Technologie
einbilden
1
Nun, Sie können immer "webscale", indem Sie fsync = off;)
Ragi Yaser Burhum
1
PostgresXC bietet jetzt ein schreibparalleles System mit umfassenden Transaktionsgarantien und der Ausführung von Abfragen mit mehreren Knoten. Gürtel und Hosenträger, OLAP und OLTP, sehenswert. Und es unterstützt PostGIS.
Paul Ramsey
Wenn Sie sich jedoch für PostgresXC / XL entscheiden, müssen Sie das Paket selbst warten. Es ist offiziell nur für Fedora / Redhat verfügbar. Ubuntu-Liebhaber müssen Zeit damit verbringen, Dinge manuell zu kompilieren.
Ravi Kumar
21

Ich benutze PostGIS seit einigen Jahren und habe erst kürzlich damit begonnen zu untersuchen, wie ich MongoDB für bestimmte Anwendungsfälle verwenden kann. Ich hatte es mit Punktdaten zu tun, die spärliche Felder hatten - wie OSM-Daten mit einer unterschiedlichen Anzahl von Tags pro Datensatz, und da MongoDB kein Schema hat, bietet es sich gut dafür an. Ich habe ein Beispiel dieser Daten in eine Instanz jeder Datenbank geladen, und das habe ich gefunden.

Mir scheint, dass Mongo für das einfache Speichern und Abrufen von Punktdaten gut funktioniert. Die geografischen Abfragen für die Bounding Box scheinen gut zu funktionieren, und ich finde, dass die Gesamtleistung sehr gut ist. Es ist auch sehr einfach einzurichten und loszulegen, obwohl ich festgestellt habe, dass mit dem Mongoimport-Tool kein zusammengesetztes 2D-Koordinatenfeld in einer TSV- oder CSV-Datei definiert werden kann. Da es ziemlich einfach ist, ein Skript zu schreiben, das JSON generiert, war dies kein großes Problem. Der größte Nachteil besteht derzeit darin, dass fast nichts anderes im Bereich der Geodaten Daten von sich aus lesen kann. Es scheint ein experimentelles Mapnik-Datenquellen-Plugin unter https://github.com/springmeyer/mapnik-mongo zu geben , aber das ist alles, was ich finden konnte.

Das Einrichten von PostGIS hingegen dauert (zumindest für mich) etwas länger, bietet jedoch, wie oben erwähnt, sofort mehr Funktionen. Es bietet nicht nur eine viel ausgefeiltere räumliche Analyse, sondern wird auch von einer Vielzahl anderer Anwendungen und Bibliotheken unterstützt. Mapserver, Mapnik, QGis, GDAL usw. Für mich ist PostGIS viel mehr ein echtes GIS-System als ein einfaches Speicher- und Abrufsystem.

In Bezug auf die Leistung stellte ich fest, dass ich Daten von beiden Systemen sehr schnell abrufen konnte. Es schien jedoch, dass PostGIS mehr von der Präsenz von Indizes profitierte. MongoDB hat mir den gesamten Datensatz (2 Millionen Datensätze) auf einmal etwas schneller und eine Abfrage, die einen Index verwendet hat, beim ersten Mal etwas langsamer zurückgegeben. Ich bin mir nicht ganz sicher, welchen Mechanismus es für das Caching verwendet, aber wenn ich eine Abfrage in MongoDB wiederhole, werden die Ergebnisse beim zweiten Mal viel schneller wiedergegeben. Ich sehe etwas Ähnliches in PostGIS, aber nicht in gleichem Maße. Ich habe auch bemerkt, dass die Speichernutzung auf meinem Computer bei MongoDB deutlich höher zu sein scheint als bei PostGIS.

Mein Fazit ist also, dass ich PostGIS nicht als mein standardmäßiges Geospeicher- und Analysesystem loswerden werde, sondern für bestimmte Projekttypen (nämlich Webkarten, die Bildkacheln und / oder Punktdaten anzeigen) die Verwendung von MongoDB in Betracht ziehen kann als mein Datenspeicher.

Roger

Lagerratrobe
quelle
1
Ich stimme dir absolut zu. Mongo ist eine sehr gute Option für den Umgang mit grundlegenden Geodaten. Derzeit werden einfachere sphärische und begrenzende Box-Abfragen ausgeführt, und das funktioniert auch. Eine weitere Sache, die ich hinzufügen möchte, ist Solr Lucene, das auch die grundlegenden Geofunktionen als Mongo bereitstellt, und es ist auch recht schnell, wenn es mit facettierten Abfragen verwendet wird. Aktuell benutze ich die Kombination aus Mongo und Solr ..
RameshVel
@RameshVel könntest du etwas mehr über Solr Lucene erzählen?
km
@rashad, Sie können elasticsearch installieren (einfach herunterladen, extrahieren und fertig) und mit Geo DSL-Abfragen spielen. Es ist ziemlich einfach, aber wenn Sie sowohl Suche / Facetten als auch Geo wollen, können Sie es verwenden.
Ravi Kumar
3

In Bezug auf die Speichernutzung in Mongo ist darauf hinzuweisen, dass Mongo sich vollständig auf den Dateicache des Betriebssystems verlässt, um seine Indizes und Daten in den Speicher zu laden. Es gibt kein Konzept für einen 'Mongo-Speicherpuffer / Indexcache', Sie werden es also versuchen (oder Stattdessen verwendet das Betriebssystem den gesamten verfügbaren RAM bis zu dem Punkt, an dem alle Datendateien zwischengespeichert wurden.

Patrick Vale
quelle