GIS:PostGIS / PostgreSQL与MySql与SQL Server的对比?

时间:2010-09-18 21:44:54

标签: mysql postgresql gis geocoding postgis

编辑:我已经使用Postgres和PostGIS几个月了,我很满意。

我需要分析几百万个地理编码记录,每个记录都有纬度和经度。这些记录包括至少三种不同类型的数据,我将试图看看每一组是否影响另一组。

哪种数据库最适合所有这些数据的基础数据存储?这是我的愿望:

  • 我熟悉DBMS。我对PostgreSQL最弱,但我愿意学习其他所有内容。
  • 它可以很好地处理GIS查询。谷歌搜索表明PostgreSQL + PostGIS可能是最强大的?至少很多产品似乎都在使用它。 MySql的Spatial Extensions似乎相对较小?
  • 低成本。尽管SQL Server Express 2008 R2中的数据库限制为10GB,但我不确定是否要接受免费版本的此限制和其他限制。
  • 与Microsoft .NET Framework无对抗。由于Connector / Net 6.3.4,MySql可以很好地运行C#和.NET Framework 4程序。它完全支持.NET 4的实体框架。我找不到任何非商业性的PostgreSQL等价物,虽然我不反对为Devart的dotConnect for PostgreSQL专业版支付180美元。
  • 与R兼容。看来所有这3个都可以使用ODBC与R通信,因此可能不是问题。

我已经使用MySql进行了一些开发,但如果有必要我可以更改。

5 个答案:

答案 0 :(得分:58)

我已经使用了所有三个数据库并完成了它们之间的迁移,所以希望我仍然可以在旧帖子中添加一些东西。十年前,我的任务是将一个巨大的--4.5亿个空间物体 - 从GML的数据集放到空间数据库中。我决定试用MySQL和Postgis,当时SQL Server中没有空间,我们的启动氛围很小,所以MySQL似乎很合适。我随后参与了MySQL,我参加了几次会议,并参与了MySQL中更多符合GIS标准的功能的beta测试,最终在5.5版本中发布。我随后参与了将我们的空间数据迁移到Postgis以及将我们的公司数据(带有空间元素)迁移到SQL Server。这些是我的发现。

的MySQL

1)。稳定性问题。在5年的时间里,我们遇到了几个数据库损坏问题,这些问题只能通过在索引文件上运行myismachk来解决,这个过程在4.5亿行表上可以超过24小时。

2)。直到最近,只有MyISAM表支持空间数据类型。这意味着如果你想要交易支持,那你就不走运了。 InnoDB表类型现在支持空间类型,但不支持它们的索引,它们给出了典型的空间数据集大小,并不是非常有用。请参阅http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html我参加会议的经验是,空间是一个事后的想法 - 我们已经实现了复制,分区等,但它并不适用于空间。 编辑:在upcoming 5.7.5 release InnoDB最终将支持空间列上的索引,这意味着ACID,外键和空间索引最终将在同一引擎中可用。

3)。与Postgis和SQL Server空间相比,空间功能非常有限。仍然没有ST_Union函数作用于整个几何字段,这是我经常运行的查询之一,即您无法写入:

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

在GIS上下文中非常有用。 Select ST_Union(geom1, const_geom) from some_table,即其中一个几何图形是硬编码的常量几何图形,相比之下有点限制。

4)。不支持栅格。能够在数据库中进行组合矢量栅格分析是非常有用的GIS功能。

5)。不支持从一个空间参照系转换到另一个空间参考系。

6)。自从Oracle收购以来,空间已被搁置。

总的来说,为了公平对待它,它支持我们的网站,WMS和一般空间处理多年,并且易于设置。在缺点方面,数据损坏是一个问题,并且被迫使用MyISAM表,您将放弃RDBMS的许多好处。

POSTGIS

鉴于我们对MySQL的问题,我们最终转换为Postgis。这次经历的关键点是。

1)。极端稳定。 5年内没有数据损坏,我们现在在不同负载下的centos虚拟机上有大约25个Postgres / GIS盒。

2)。快速发展 - 光栅,拓扑,3D支持是最近的例子。

3)。非常活跃的社区。 Postgis irc频道和邮件列表是很好的资源。 Postgis参考手册也很棒。 http://postgis.net/docs/manual-2.0/

4)。在OSGeo保护伞下,如GeoServer和GDAL,可以很好地与其他应用程序一起使用。

5)。除了默认的plpgsql之外,存储过程可以用多种语言编写,例如Python或R.

5)。 Postgres是一个非常符合标准,功能齐全的RDBMS,旨在接近ANSI标准。

6)。支持窗口函数和递归查询 - 不是在MySQL中,而是在SQL Server中。这使得编写更复杂的空间查询更加清晰。

SQL Server。

我只使用了SQL Server 2008的空间功能,而且该版本的许多烦恼 - 缺乏对从一个CRS到另一个CRS的转换的支持,需要将自己的参数添加到空间索引 - 现在已经解决了

1)。由于SQL Server中的空间对象基本上是CLR对象,因此语法会感觉倒退。您可以编写geom.STArea()而不是ST_Area(geom),这在将函数链接在一起时变得更加明显。在功能名称中删除下划线只是一个小麻烦。

2)。我有一些SQL Server接受的无效多边形,缺少ST_MakeValid函数会让这有点痛苦。

3)。仅限Windows。一般而言,Microsoft产品(如ESRI产品)旨在彼此协同工作,但并不总是将标准的合规性和互操作性作为主要目标。如果您正在运行仅限Windows的商店,这不是问题。

更新:在SQL Server 2012上玩了一下,我可以说它已经有了很大的改进。现在有一个很好的几何验证功能,对Geography数据类型有很好的支持,包括一个FULL GLOBE对象,它允许表示占据多个半球的对象并支持Compound Curves and Circular Strings,这对于准确和紧凑有用弧形(和圆形)等的表示。将坐标从一个CRS转换到另一个CRS仍然需要在第三方库中完成,尽管在大多数应用程序中这不是显示阻塞。

我还没有使用SQL Server和足够大的数据集来一对一地与Postgis / MySQL进行比较,但是从我看到的函数表现正确,虽然不像Postgis那样功能齐全,但它是一个MySQL产品的巨大改进。

很抱歉这么长的答案,我希望我多年来所经历的一些痛苦和喜悦可能对某人有所帮助。

答案 1 :(得分:49)

如果您有兴趣进行全面比较,我建议您使用Boston GIS的"Cross Compare SQL Server 2008 Spatial, PostgreSQL/PostGIS 1.3-1.4, MySQL 5-6"和/或"Compare SQL Server 2008 R2, Oracle 11G R2, PostgreSQL/PostGIS 1.5 Spatial Features"

考虑你的观点:

  • 我熟悉DBMS:在Windows上设置PostGIS数据库很简单,使用PgAdmin3管理也很简单
  • 它与GIS查询相得益彰: PostGIS绝对是三者中最强的,只有Oracle Spatial具有可比性,但如果考虑其成本则被取消资格
  • 低成本 +1 for PostGIS肯定
  • 与Microsoft .NET Framework不对抗:您至少应该能够通过ODBC(see Postgres wiki)进行连接
  • 兼容R:不应该是三个
  • 中的任何一个的问题

答案 2 :(得分:17)

绝对是PostGis。这就是原因。

  1. Postgres在性能方面远远优于MySQL。服务器具有更强的容错能力,具有开箱即用的负载平衡,缓存和优化工具。
  2. PostGIS正在成为GIS应用程序的标准。
  3. 它是免费的。

答案 3 :(得分:0)

请注意,MySQL最终添加了适当的GIS逻辑。

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

但我现阶段无法评论成本或表现

答案 4 :(得分:0)

PostGIS是最好的,因为它现在已成为GIS应用程序的标准,而PostGIS是免费的。它的性能远远优于MySQL