El mejor sistema SIG para aplicaciones web de alto rendimiento - PostGIS vs MongoDB

36

Estoy trabajando en una aplicación web / móvil basada en datos de ubicación. Como ya estoy familiarizado con MongoDB, descubrí que la indexación geoespacial de mongo es bastante adecuada para mis necesidades. Como estoy tratando principalmente con puntos de ubicación simples / cortos, la indexación Mongo 2d es buena para mí.

En el camino elegí PostGIS, debido a su forma estable / madura. Y su impresionante conjunto de características. Pero mi principal preocupación es el rendimiento, ya que mis datos dependen en gran medida de la ubicación (en su mayoría, entre el 70 y el 80% de las llamadas a db tratan la ubicación).

Me gusta mongo porque ya lo usan aplicaciones web de alto rendimiento como foursquare. Pero he visto que PostGIS se usa principalmente en proyectos gubernamentales / empresariales (principalmente aplicaciones no web / móviles). Entonces, ¿estoy un poco confundido en este momento para elegir la base de datos GIS correcta para mi aplicación web / móvil? ¿Tienes alguna sugerencia?

RameshVel
fuente
2
cree un índice espacial con postgres / postgis y verá un buen rendimiento. Pero si estás más feliz con MongoDB, continúa con eso.
Mapperz

Respuestas:

36

Si su carga de escritura (flujo de datos entrantes) puede crecer potencialmente sin límite (si el éxito de su proyecto web hará que crezca la cantidad de escrituras crecer), entonces vaya con Mongo, porque será muy difícil diseñar su camino alrededor del escriba un cuello de botella en PostGIS / PostgreSQL una vez que crezca más allá de las capacidades de un solo servidor de alta gama (que, debe notarse, son bastante enormes).

Puede diseñar buenas soluciones PostGIS / PostgreSQL para una gran carga de lectura (replicación maestro / esclavo) y para grandes tamaños de datos (particionamiento de tablas), pero la carga de escritura es difícil. Ya ha presentado el caso contra Mongo y para PostGIS, que es el conjunto de características mucho más grande y la madurez de código de PostGIS, así que equilibre eso con las otras preocupaciones.

Paul Ramsey
fuente
3
Ah, y recuerda, "MongoDB es escala web". xtranormal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey
sí, lo sé ... fue muy divertido (y golpear en la cabeza si solo quieres
imaginarte
1
Bueno, siempre puedes "escala web" apagando fsync = off;)
Ragi Yaser Burhum
1
PostgresXC ahora puede proporcionar un sistema de escritura paralela con garantías transaccionales completas y ejecución de consultas de múltiples nodos. Cinturón y tirantes, OLAP y OLTP, vale la pena mirar. Y es compatible con PostGIS.
Paul Ramsey
Pero si elige PostgresXC / XL, deberá mantener el paquete usted mismo. Oficialmente solo está disponible para Fedora / Redhat, los amantes de Ubuntu tienen que pasar tiempo compilando cosas manualmente.
Ravi Kumar
21

He estado usando PostGIS durante algunos años y solo recientemente comencé a investigar cómo podría usar MongoDB para tratar ciertos casos de uso. Estaba tratando con datos de puntos que tenían campos dispersos, como los datos de OSM con un número variable de etiquetas por registro, y dado que MongoDB no tiene esquema, se presta bien a esto. Cargué una muestra de estos datos en una instancia de cada DB y esto es lo que encontré.

Me parece que para un simple almacenamiento y recuperación de datos de puntos, Mongo funciona bien. Las consultas geoespaciales del cuadro delimitador parecen funcionar bien, y creo que el rendimiento general es muy bueno. También es muy fácil de configurar y poner en marcha, aunque he descubierto que la herramienta mongoimport no me permite definir un campo coord 2D compuesto en un archivo TSV o CSV. Como es bastante fácil escribir un script que genere JSON, esto no ha sido un gran problema. Su principal inconveniente en este momento es que casi nada más en el ámbito geoespacial puede leer datos de forma nativa. Parece que hay un complemento experimental de fuente de datos de Mapnik en https://github.com/springmeyer/mapnik-mongo , pero eso es todo lo que pude encontrar.

PostGIS, por otro lado, tarda un poco más en configurarse (al menos para mí), pero como se mencionó anteriormente, proporciona muchas más funciones desde el primer momento. Además de proporcionar una capacidad analítica espacial mucho más sofisticada, también es compatible de forma nativa con muchas otras aplicaciones y bibliotecas; Mapserver, Mapnik, QGis, GDAL, etc., etc. Para mí, PostGIS es mucho más un verdadero sistema GIS, en lugar de un simple sistema de almacenamiento y recuperación.

En cuanto al rendimiento, descubrí que podía recuperar datos muy rápidamente de ambos sistemas. Sin embargo, parecía que PostGIS se benefició más de la presencia de índices. MongoDB fue un poco más rápido al devolverme todo el conjunto de datos (2 millones de registros) a la vez, y un poco más lento al devolver una consulta que utilizaba un índice, la primera vez. No estoy exactamente seguro del mecanismo que utiliza para el almacenamiento en caché, pero puedo ver que si repito una consulta en MongoDB, los resultados vuelven mucho más rápido la segunda vez. Veo algo similar en PostGIS, pero no en el mismo grado. También noté que el uso de memoria en mi máquina parece ser mucho mayor con MongoDB ejecutándose que con PostGIS.

Entonces, mi conclusión es que no voy a deshacerme de PostGIS como mi sistema de almacenamiento y análisis geoespacial predeterminado, sino que para ciertos tipos de proyectos (es decir, mapas web que muestran mosaicos de imágenes y / o datos de puntos) puedo considerar usar MongoDB como mi almacén de datos

Roger

lagerratrobe
fuente
1
Estoy totalmente de acuerdo con usted. Mongo es una muy buena opción para manejar datos básicos de Geo. actualmente estoy haciendo consultas esféricas y de recuadros delimitadores más simples, y lo está haciendo bien. Una cosa más que quiero agregar es que Solr lucene también proporciona las funciones geográficas básicas como mongo, y también es bastante rápido cuando se usa con consultas facetadas. Actualmente estoy usando la combinación de mongo y Solr ..
RameshVel
@RameshVel, ¿podría decir algo más sobre solr lucene?
rkm
@rashad, puedes instalar Elasticsearch (solo descarga, extrae y listo) y juega con consultas Geo DSL. Es bastante básico, pero si desea buscar / facetas, así como geo, puede usarlo.
Ravi Kumar
3

Con respecto al uso de la memoria con Mongo, vale la pena señalar que Mongo se basa completamente en la memoria caché del archivo del sistema operativo para obtener sus índices y datos en la memoria; no hay un concepto de 'memoria intermedia mongo / caché de índice', por lo que verá que lo intenta (o más bien, el sistema operativo usará) toda la RAM disponible hasta el punto en que se hayan almacenado en caché todos sus archivos de datos.

Patrick Vale
fuente