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?
Antworten:
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.
quelle
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
quelle
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.
quelle