36 votos

Mejor sistema GIS para aplicaciones web de alto rendimiento - PostGIS vs MongoDB

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

En el camino elegí PostGIS, por 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 (sobre todo 70 - 80% de las llamadas db tratar con la ubicación).

Me gusta mongo porque ya es utilizado por aplicaciones web de alto rendimiento como foursquare. Pero he visto que PostGIS se utiliza principalmente en proyectos gubernamentales/empresariales (sobre todo aplicaciones no web/móviles). Así que estoy un poco confundido ahora mismo para elegir la base de datos GIS adecuada para mi aplicación web/móvil. ¿Tienes alguna sugerencia?

36voto

NilObject Puntos 7874

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

Se pueden diseñar buenas soluciones PostGIS/PostgreSQL para cargas de lectura pesadas (replicación maestro/esclavo) y para tamaños de datos enormes (partición de tablas) pero la carga de escritura es difícil. Ya has expuesto el caso contra Mongo y para PostGIS, que es el conjunto de características mucho más grande y la madurez del código de PostGIS, así que equilibra eso contra las otras preocupaciones.

21voto

poundifdef Puntos 6005

He estado usando PostGIS durante unos años y sólo recientemente he empezado 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 como MongoDB no tiene ningún 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 el simple almacenamiento y recuperación de datos puntuales Mongo funciona muy bien. Las consultas geoespaciales de bounding box parecen funcionar bien, y encuentro que el rendimiento general es muy bueno. También es muy fácil de configurar y poner en marcha, aunque he encontrado que la herramienta mongoimport no me permite definir un campo de coordenadas 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 mayor inconveniente por el momento es que casi nada en el ámbito geoespacial puede leer datos de forma nativa. Parece que hay un plugin experimental de fuentes de datos de Mapnik en https://github.com/springmeyer/mapnik-mongo pero eso es todo lo que pude encontrar.

Por otro lado, PostGIS tarda un poco más en configurarse (al menos para mí), pero, como se ha mencionado anteriormente, ofrece muchas más funciones desde el principio. Además de proporcionar una capacidad de análisis espacial mucho más sofisticada, también es compatible de forma nativa con un montón de otras aplicaciones y bibliotecas; Mapserver, Mapnik, QGis, GDAL, etc, etc. Para mí, PostGIS es mucho más un verdadero sistema SIG, que 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 beneficiaba más de la presencia de índices. MongoDB fue ligeramente más rápido a la hora de devolverme todo el conjunto de datos (2 millones de registros) de una vez, y ligeramente más lento a la hora de 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 he notado que el uso de la memoria en mi máquina parece ser mucho mayor con MongoDB corriendo que con PostGIS.

Por lo tanto, mi conclusión es que no voy a deshacerme de PostGIS como mi sistema de almacenamiento y análisis geoespacial por defecto, pero para ciertos tipos de proyectos (a saber, mapas web que muestran mosaicos de imágenes y/o datos de puntos) podría considerar el uso de MongoDB como mi almacén de datos.

Roger

3voto

Shahid Puntos 1

En cuanto al uso de la memoria con Mongo, vale la pena señalar que Mongo se basa por completo en la caché de archivos del sistema operativo para obtener sus índices y datos en la memoria - no existe el concepto de un "búfer de memoria / caché de índice de Mongo", por lo que verá que intenta (o más bien, el sistema operativo utilizará) toda la memoria RAM disponible hasta el punto en que todos sus archivos de datos han sido almacenados en caché.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X