GIS:PostGIS / PostgreSQL与MySql与SQL Server?[关闭]


68

编辑:我已经将Postgres与PostGIS一起使用了几个月,我很满意。

我需要分析几百万个地理编码的记录,每个记录都有经度和纬度。这些记录包含至少三种不同类型的数据,我将尝试查看每个集合是否会相互影响。

对于所有这些数据,哪个数据库最适合作为基础数据存储?这是我的愿望:

  • 我熟悉DBMS。我在PostgreSQL方面最弱,但是我愿意学习是否其他所有功能都可以解决。
  • 它与GIS查询配合得很好。Google搜索表明PostgreSQL + PostGIS可能是最强大的?至少很多产品似乎都在使用它。MySql的Spatial Extensions似乎比较少?
  • 低成本。尽管SQL Server Express 2008 R2中DB的限制为10GB,但我不确定我是否要承受免费版本的这一限制和其他限制。
  • 与Microsoft .NET Framework不具有对抗性。多亏了Connector / Net 6.3.4,MySql才能很好地运行C#和.NET Framework 4程序。它完全支持.NET 4的实体框架。尽管我不反对为Devart的dotConnect for PostgreSQL Professional Edition支付180美元,但我找不到与之相当的非商业PostgreSQL版本。
  • 与R兼容。似乎所有这三个都可以使用ODBC与R通讯,因此可能不是问题。

我已经使用MySql进行了一些开发,但是可以根据需要进行更改。


1
PostGIS将是最成熟的选择。
OMG小马

2
到目前为止,PostGIS是最成熟的GIS解决方案。而且,如果您使用的是R,甚至可以使用PL / R在R中编写存储过程。MySQL空间扩展非常苗条,不值得尝试,SQL Server GIS的可能性相当新,似乎有些局限,但我有尚无经验。
Wolph 2010年

10
优秀而重要的问题。基于事实的意见很有价值。不应该关闭。
ErichBSchulz 2014年

好像有一个关闭SO线程的奖励。存在许多有效的问题,寻求参考文献支持的观点和经验。与其结束关于低质量答案的偏见期望的问题,不如在何时出现低质量答案,为什么不缓和它们。
戴夫

是。另外,目前接受的答案是8.5岁。从那以后思想发展了吗?现在新的答案会更好吗?
阿伦·坎布雷

Answers:


54

如果您有兴趣进行全面比较,建议您“交叉比较SQL Server 2008 Spatial,PostgreSQL / PostGIS 1.3-1.4,MySQL 5-6”和/或“比较SQL Server 2008 R2,Oracle 11G R2,PostgreSQL / PostGIS 1.5 Spatial功能”由Boston GIS提供。

考虑您的观点:

  • 我熟悉DBMS:在Windows上设置PostGIS数据库很容易,使用PgAdmin3管理也很简单
  • 它在GIS查询中效果很好: PostGIS绝对是这三个中最强大的,只有Oracle Spatial具有可比性,但如果考虑其成本,则不合格
  • 低成本:肯定为PostGIS +1
  • 与Microsoft .NET Framework不敌对:您至少应该能够通过ODBC连接(请参阅Postgres wiki
  • 与R兼容:这三个都不应该有问题

2
嘿-Oracle Spatial获得了100万美元的许可证,我上一次听说
OMG Ponies 2010年

谢谢。第二个comparo链接很有帮助。我只找到第一个,因为我的搜索词中有MySql。所以看起来对我来说是PostgreSQL!
阿伦·坎布雷

38
仅想说,差不多1.5年后,Postgres + PostGIS绝对是正确的答案。
阿伦·坎布雷

4
为什么使用ODBC?您可以使用免费且功能齐全的开源代码(MIT或类似MIT的许可证)Npgsql ADO.NET连接器...
Stefan Steiger 2013年

@StefanSteiger我最终使用了Npgsql!当时,一些高级功能尚未完全发布,因此无法使用Entity Framework,但仍然可以完成工作!
阿伦·坎布雷

61

我已经使用了所有这三个数据库并在它们之间进行了迁移,因此希望我仍然可以在旧文章中添加一些内容。十年前,我的任务是将稍大的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我参加会议的经验是,空间问题只是事后的想法-我们已经实现了复制,分区等,但不适用于空间。编辑:在即将发布的5.7.5版本中, 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)。不支持栅格。能够在db中执行组合的矢量栅格分析是非常有用的GIS功能。

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

6)。自从Oracle收购以来,空间问题实际上已经搁置了。

总体而言,为了公平起见,MySQL对我们的网站,WMS和常规空间处理提供了数年的支持,并且易于设置。不利的一面是,数据损坏是一个问题,由于被迫使用MyISAM表,您放弃了RDBMS的许多好处。

Postgis

考虑到MySQL的问题,我们最终转换为Postgis。这段经历的重点是。

1)。极高的稳定性。五年内没有数据损坏,并且在不同负载下,我们现在在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对象,因此语法让人感到后退。而不是ST_Area(geom)而是编写geom.STArea(),当将函数链接在一起时,这一点变得更加明显。函数名中下划线的删除只是一个小麻烦。

2)。我有许多无效的多边形已被SQL Server接受,并且缺少ST_MakeValid函数会使这变得有些痛苦。

3)。仅Windows。通常,Microsoft产品(如ESRI产品)被设计为可以很好地相互配合,但是并不总是以标准的合规性和互操作性为主要目标。如果您正在运行仅Windows商店,这不是问题。

更新:我曾在SQL Server 2012中玩过一点,可以说它已经得到了显着改进。现在有一个很好的几何图形验证功能,对Geography数据类型有很好的支持,包括FULL GLOBE对象,该对象可以表示占据多个半球的对象,并支持“复合曲线”和“圆弧线”,这对于精确和紧凑非常有用。弧(和圆)的表示等等。尽管在大多数应用程序中这并不是显示停止,但仍需要在第三方库中完成将坐标从一个CRS转换为另一个的功能。

我还没有使用SQL Server拥有足够大的数据集来与Postgis / MySQL进行一对一的比较,但是从我看到的功能来看,它的功能是正确的,虽然功能不如Postgis,但是它对MySQL提供的功能有很大的改进。

抱歉,这么长的答案,我希望我多年来遭受的某些痛苦和喜悦对某人有所帮助。


我有一张表,其中包含地理数据类型中的纬度和经度点,一列包含该点的日期时间。我们要查找某个日期范围小于1000m或与任何点相交的记录?如果表中有9千9百万条记录,哪个性能更好?请建议我..我从最近7天开始进行搜索,并已在PostGIS和SQL Server上进行了测试,并创建了空间索引。它看起来像SQL Server比PostGIS更好,但我从未对MYSQL措辞过,所以不知道如何与MYSQL比较。请告诉我哪个更好?
Sandeep Kumar

@SandeepKumar。如果您提出一个新问题,概述您到目前为止已经尝试过的内容,性能如何,您拥有的索引等等,可能会更好。未知数太多,无法给出一个很好的答案。Postgres对日期范围查询有很好的支持。通常,MySQL不适用于空间,但对于上述查询可能没有问题。
约翰·鲍威尔

18

绝对是PostGis。这就是为什么。

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

#2对于开源GIS软件和开源堆栈绝对正确,但是我不确定对于商业GIS应用程序是否正确。
2011年

0

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

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

但目前我无法评论成本或性能


看起来而不是使用空间库(例如GEOS),所有空间逻辑都在其中sql/item_geofunc.cc
Mike T

@MikeT。正确,我知道,因为我是Beta测试人员之一。MySQL的空间功能距离Posgis还有很长的路要走,自Oracle接手以来还没有真正的进步。对我而言,真正的杀手was是没有ST_Union(geom)....通过某些属性类型功能进行分组。只有一个ST_Union(geom1,geom2)。不支持从一个SRID转换为另一个。而这样的例子不胜枚举。
John Powell 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.