2010-09-18 39 views
59

EDIT: he estado utilizando Postgres con PostGIS durante unos meses, y estoy satisfecho.GIS: PostGIS/PostgreSQL vs. MySql vs. SQL Server?

Necesito analizar unos pocos millones de registros geocodificados, cada uno de los cuales tendrá latitud y longitud. Estos registros incluyen datos de al menos tres tipos diferentes, y trataré de ver si cada conjunto influye en el otro.

¿Qué base de datos es la mejor para el almacén de datos subyacente para todos estos datos? Aquí está mis deseos:

  • Estoy familiarizado con el DBMS. Soy más flojo con PostgreSQL, pero estoy dispuesto a saber si todo lo demás se confirma.
  • Funciona bien con las consultas GIS. Las búsquedas en Google sugieren que PostgreSQL + PostGIS puede ser el más fuerte? Al menos muchos productos parecen usarlo. Las extensiones espaciales de MySQL parecen comparativamente mínimas.
  • Bajo costo. A pesar del límite de 10 GB de DB en SQL Server Express 2008 R2, no estoy seguro de querer vivir con esta y otras limitaciones de la versión gratuita.
  • No es antagónico con Microsoft .NET Framework. Gracias a Connector/Net 6.3.4, MySql funciona bien con los programas C# y .NET Framework 4. Es totalmente compatible con .NET 4 Entity Framework. No puedo encontrar ningún equivalente PostgreSQL no comercial, aunque no me opongo a pagar $ 180 por el dotConnect de Devart para PostgreSQL Professional Edition.
  • Compatible con R. Parece que los 3 de estos pueden hablar con R usando ODBC, por lo que puede no ser un problema.

Ya he hecho algo de desarrollo usando MySql, pero puedo cambiarlo si es necesario.

+1

PostGIS sería la opción más madura. –

+2

PostGIS es, con mucho, la solución GIS más madura. Y si está usando R, incluso puede usar PL/R para escribir procedimientos almacenados en R. Las extensiones espaciales de MySQL son bastante escasas y no merezco probarlas, las posibilidades de SQL Server GIS son bastante nuevas y parecen algo limitadas, pero tengo ninguna experiencia con eso todavía. – Wolph

+7

Pregunta excelente e importante. Las opiniones basadas en hechos son valiosas. No debería haber sido cerrado. – ErichBSchulz

Respuesta

47

Si está interesado en una comparación exhaustiva, le recomiendo "Cross Compare SQL Server 2008 Spatial, PostgreSQL/PostGIS 1.3-1.4, MySQL 5-6" y/o "Compare SQL Server 2008 R2, Oracle 11G R2, PostgreSQL/PostGIS 1.5 Spatial Features" por Boston GIS.

Teniendo en cuenta sus puntos:

  • Estoy familiarizado con el DBMS: la creación de una base de datos PostGIS en Windows es fácil, utilizando la gestión pgadmin3 es directa demasiado
  • Se le va bien con Consultas GIS: PostGIS es definitivamente el más fuerte de los tres, solo Oracle Spatial sería comparable pero está descalificado si considera que es costos
  • Bajo costo: +1 para PostGIS f o seguro
  • No es antagónico con Microsoft.NET Framework: Al menos debe ser capaz de conectarse a través de ODBC (see Postgres wiki)
  • Compatible con R: no debería ser un problema con cualquiera de los tres
+2

Heh - Oracle Spatial fue una licencia de $ 1 millón de dólares, la última vez que escuché –

+0

Gracias. El segundo enlace comparo es útil. Solo encontré el primero antes porque tenía MySql en mis términos de búsqueda. ¡Así que parece que es PostgreSQL para mí! –

+30

Solo quiero decir, casi 1.5 años después, que Postgres + PostGIS fue absolutamente la respuesta correcta. –

16

PostGis definitivamente. Este es el por qué.

  1. Postgres es muy superior a MySQL en rendimiento. El servidor es más tolerante a fallas, tiene herramientas listas para usar para balanceo de carga, almacenamiento en caché y optimización.
  2. PostGIS se está convirtiendo en un estándar en aplicaciones GIS.
  3. Es gratis.
+0

# 2 es definitivamente cierto para el software de código abierto GIS y las pilas de código abierto, pero no estoy tan seguro si es cierto para las aplicaciones comerciales de GIS. – winwaed

0

Sólo una nota que MySQL tiene por fin agregado en la lógica apropiada de GIS.

http://dev.mysql.com/doc/refman/5.6/en/functions-for-testing-spatial-relations-between-geometric-objects.html

Pero no puedo comentar en el precio o el rendimiento en esta etapa

+0

Parece que en lugar de usar una biblioteca espacial, como GEOS, toda la lógica espacial está en 'sql/item_geofunc.cc' –

+0

@MikeT. Correcto, lo sé, porque fui uno de los beta testers. La funcionalidad espacial de MySQL está muy lejos de Posgis y no ha progresado realmente desde que Oracle asumió el control. El verdadero asesino para mí fue que no hay ningún grupo ST_Union (geom) .... por alguna funcionalidad de tipo de atributo. Solo una ST_Union (geom1, geom2). No hay soporte para la conversión de un SRID a otro tampoco. Y la lista continúa. –

0

PostGIS es mejor porque se está convirtiendo en un estándar en las aplicaciones SIG en estos días y PostGIS es gratis. Es muy superior a MySQL en el rendimiento

+0

¿Algún punto de referencia en algún lugar? – j0k

53

He trabajado con las tres bases de datos y he realizado migraciones entre ellas, así que espero poder agregar algo a una publicación anterior. Hace diez años me encomendaron la tarea de poner un gran conjunto de datos de 450 millones de objetos espaciales de GML en una base de datos espacial. Decidí probar MySQL y Postgis, en ese momento no había espacio en SQL Server y teníamos un ambiente de inicio pequeño, por lo que MySQL parecía una buena opción. Posteriormente participé en MySQL, asistí/hablé en un par de conferencias y estuve muy involucrado en la prueba beta de las funciones más compatibles con SIG en MySQL que finalmente se lanzó con la versión 5.5. Posteriormente participé en la migración de nuestros datos espaciales a Postgis y nuestros datos corporativos (con elementos espaciales) a SQL Server. Estos son mis hallazgos.

MySQL

1). Problemas de estabilidad En el transcurso de 5 años, tuvimos varios problemas de corrupción en la base de datos, que solo pudieron solucionarse al ejecutar myismachk en el archivo de índice, un proceso que puede durar más de 24 horas en una tabla de 450 millones de filas.

2). Hasta hace poco, solo las tablas MyISAM admitían el tipo de datos espaciales. Esto significa que si quieres soporte de transacciones no tienes suerte. El tipo de tabla InnoDB admite ahora tipos espaciales, pero no índices, que, dados los tamaños típicos de conjuntos de datos espaciales, no son muy útiles. Ver http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html Mi experiencia de ir a conferencias fue que el espacio fue una idea de último momento: hemos implementado la replicación, el particionamiento, etc., pero no funciona con el espacio. EDITAR: En el upcoming 5.7.5 release InnoDB finalmente admitirá índices en columnas espaciales, lo que significa que ACID, claves externas e índices espaciales finalmente estarán disponibles en el mismo motor.

3). La funcionalidad espacial es extremadamente limitada en comparación con Postgis y SQL Server espacial. Todavía no hay una función ST_Union que actúa sobre un campo de geometría entera, una de las consultas que corro con más frecuencia, es decir, no se puede escribir:

select attribute, ST_Union(geom) from some_table group by some_attribute 

que es muy útil en un contexto SIG. Select ST_Union(geom1, const_geom) from some_table, es decir, una de las geometrías es una geometría constante codificada que es un poco limitante en comparación.

4). No es compatible con rásteres. Ser capaz de hacer un análisis combinado de raster de vectores dentro de un db es una funcionalidad SIG muy útil.

5). No admite la conversión de un sistema de referencia espacial a otro.

6). Desde la adquisición por Oracle, espacial realmente ha sido puesto en espera.

En general, para ser justos con MySQL, admitió nuestro sitio web, WMS y el procesamiento espacial general durante varios años, y fue fácil de configurar. En el lado negativo, la corrupción de datos fue un problema, y ​​al verse obligado a usar tablas MyISAM está renunciando a muchos de los beneficios de un RDBMS.

Postgis

Teniendo en cuenta los problemas que tuvimos con MySQL, que en última instancia se convirtieron al Postgis. Los puntos clave de esta experiencia han sido.

1). Estabilidad extrema No hay corrupción de datos en 5 años y ahora tenemos alrededor de 25 cajas de Postgres/GIS en máquinas virtuales de centos, bajo diversos grados de carga.

2). Rápido ritmo de desarrollo: la trama, la topología y el soporte en 3D son ejemplos recientes de esto.

3). Comunidad muy activa. El canal de irg y la lista de correo de Postgis son excelentes recursos. El manual de referencia de Postgis también es excelente. http://postgis.net/docs/manual-2.0/

4). Se reproduce muy bien con otras aplicaciones, bajo el paraguas de OSGeo, como GeoServer y GDAL.

5). Los procedimientos almacenados se pueden escribir en muchos idiomas, además del plpgsql predeterminado, como Python o R.

5). Postgres es un RDBMS con todas las funciones, que cumple con los estándares, y que apunta a mantenerse cerca de los estándares de ANSI.

6). Soporte para funciones de ventana y consultas recursivas, no en MySQL, sino en SQL Server. Esto ha hecho que la escritura de consultas espaciales más complejas sea más clara.

SQL Server.

Solo he utilizado la funcionalidad espacial de SQL Server 2008, y muchas de las molestias de esa versión (falta de soporte para las conversiones de un CRS a otro, la necesidad de agregar sus propios parámetros a los índices espaciales) ahora resuelto

1). Como los objetos espaciales en SQL Server son básicamente objetos CLR, la sintaxis se siente hacia atrás. En lugar de ST_Area (geom) escribes geom.STArea() y esto se vuelve aún más obvio cuando encadenas funciones juntas. La caída del guión bajo en los nombres de función es simplemente una molestia menor.

2). He tenido varios polígonos inválidos que han sido aceptados por SQL Server, y la falta de una función ST_MakeValid puede hacer esto un poco doloroso.

3). Solo Windows En general, los productos de Microsoft (como los de ESRI) están diseñados para funcionar muy bien entre ellos, pero no siempre tienen el cumplimiento e interoperabilidad del estándar como objetivos principales. Si está ejecutando una tienda solo de Windows, esto no es un problema.

ACTUALIZACIÓN: habiendo jugado un poco con SQL Server 2012, puedo decir que se ha mejorado significativamente. Ahora hay una buena función de validación de geometría, existe un buen soporte para el tipo de datos Geography, incluyendo un objeto FULL GLOBE, que permite representar objetos que ocupan más de un hemisferio y soporte para Compound Curves and Circular Strings que es útil para representaciones de arcos precisas y compactas (y círculos) entre otras cosas. La transformación de coordenadas de un CRS a otro todavía debe hacerse en bibliotecas de terceros, aunque esto no es un impedimento para la mayoría de las aplicaciones.

No he usado SQL Server con suficientes datasets para comparar uno a uno con Postgis/MySQL, pero por lo que he visto las funciones se comportan correctamente, y aunque no es tan completo como Postgis, es un gran mejora en las ofertas de MySQL.

Perdón por una respuesta tan larga, espero que parte del dolor y la alegría que he sufrido a lo largo de los años pueda ser de ayuda para alguien.

+0

I Tengo una tabla que contiene el punto de latitud y longitud en el tipo de datos geográficos y una columna contiene la fecha y hora del punto. ¿Desea buscar registros con algún rango de fechas y menos de 1000m o cruza algún punto o no? ¿Qué rendimiento es mejor si tenemos 99 millones de registros en mi mesa? Por favor sugiérame ... Estoy buscando esto en los últimos 7 días y he probado en PostGIS y SQL Server y he creado un índice espacial. Parece que el servidor SQL es mejor que PostGIS, pero nunca he redactado en MYSQL, así que no sé cómo compararlo con MYSQL. Por favor dime, ¿qué es mejor? –

+0

@SandeepKumar. Probablemente sea mejor si hace una nueva pregunta que describa lo que ha intentado hasta ahora, cómo fue el rendimiento, qué índices tiene, etc. Hay demasiadas incógnitas para dar una buena respuesta. Postgres tiene un buen soporte para las consultas de rango de fechas. MySQL, en general, no es ideal para espacial, pero podría estar bien para consultas como la anterior. –