GIS:PostGIS / PostgreSQL vs. MySql vs. SQL Server?
编辑:我已经使用PostGIS与PostGIS几个月了,我很满意。
我需要分析几百万条地理编码logging,每条logging都有经纬度。 这些logging包括至less三种不同types的数据,我将试图看看每个集合是否影响另一个。
什么数据库最适合所有这些数据的底层数据存储? 这是我的愿望:
- 我熟悉DBMS。 我是PostgreSQL最弱的,但我愿意了解是否所有的东西都检查出来。
- 它与GIS查询很好。 谷歌searchbuild议PostgreSQL + PostGIS可能是最强的? 至less有很多产品似乎使用它。 MySql的空间扩展看起来相对较less?
- 低成本。 尽pipe在SQL Server Express 2008 R2中有10GB的数据库限制,但我不确定我想要忍受这个和其他免费版本的限制。
- 不与Microsoft .NET Framework对抗。 感谢Connector / Net 6.3.4,MySql很好地运行了C#和.NET Framework 4程序。 它完全支持.NET 4的entity framework。 我找不到任何非商业性的PostgreSQL等价物,尽pipe我并不反对为Devart的dotConnect for PostgreSQL专业版支付180美元。
- 与R兼容。看起来这三个都可以用R和R交谈,所以可能不是问题。
我已经使用MySql做了一些开发,但是如果需要的话我可以改变。
如果你有兴趣进行彻底的比较,我推荐“比较SQL Server 2008 Spatial,PostgreSQL / PostGIS 1.3-1.4,MySQL 5-6”和/或“比较SQL Server 2008 R2,Oracle 11G R2,PostgreSQL / PostGIS 1.5空间function“由波士顿GIS。
考虑到你的观点:
- 我熟悉DBMS:在Windows上设置PostGIS数据库非常简单,使用PgAdmin3pipe理也很简单
- 它与GIS查询相得益彰: PostGIS绝对是三者中最强大的,只有Oracle Spatial才具有可比性,但如果考虑到它的成本则会被取消资格
- 低成本:对于PostGIS肯定是+1
- 不与Microsoft .NET Framework对抗:您至less应该能够通过ODBC进行连接( 请参阅Postgres wiki )
- 与R兼容:三者中的任何一个都不应该是个问题
我已经与所有三个数据库合作,并完成他们之间的迁移,所以希望我仍然可以添加一些旧的职位。 十年前,我的任务是将一个从GML到4.5亿个空间对象的数据集放入一个空间数据库。 我决定尝试一下MySQL和Postgis,那时候在SQL Server中没有空间,我们有一个小的启动环境,所以MySQL似乎很适合。 后来我参与了MySQL,我参加了几次会议,并且参与了5.5版本最终发布的MySQL中更多的与GIS兼容的function的betatesting。 我后来参与了将我们的空间数据迁移到Postgis以及我们的公司数据(包括空间元素)到SQL Server。 这些是我的发现。
MySQL的
1)。 稳定性问题。 在5年的时间里,我们遇到了一些数据库损坏的问题,只能通过在索引文件上运行myismachk来解决,这个过程比在4.5亿行表上花费超过24小时的时间要长。
2)。 直到最近,只有MyISAM表支持空间数据types。 这意味着如果你想要交易支持,你是不走运的。 InnoDB表types现在支持空间types,但不支持空间types索引,这些空间types给定了空间数据集的典型大小,并不是非常有用。 请参阅http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html我去参加会议的经验是,空间是一个事后的事情; – 我们已经实现了复制,分区等,但它不适用于空间。 编辑:在即将到来的5.7.5版本中, InnoDB最终将支持空间列上的索引,这意味着ACID,外键和空间索引将最终在同一个引擎中可用。
3)。 与Postgis和SQL Server空间相比,空间function非常有限。 仍然没有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)。 不支持栅格。 能够在数据库中进行vector栅格分析是非常有用的GISfunction。
5)。 不支持从一个空间参考系转换到另一个空间参考系。
6)。 自从被甲骨文收购之后,空间确实被搁置了。
总的来说,为了公平对待MySQL,它支持我们的网站,WMS和一般空间处理几年,并且容易build立。 不利的一面是,数据损坏是一个问题,由于被迫使用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是一个非常符合标准,function齐全的RDBMS,旨在保持与ANSI标准的接近。
6)。 支持窗口函数和recursion查询 – 不是在MySQL中,而是在SQL Server中。 这使得编写更复杂的空间查询更加清晰。
SQL Server。
我只使用SQL Server 2008的空间function,并且该版本的许多烦恼 – 缺乏对从一个CRS到另一个CRS的转换的支持,现在已经解决了将您自己的参数添加到空间索引的需求。
1)。 由于SQL Server中的空间对象基本上是CLR对象,所以语法感觉倒退。 你不用写ST_Area(geom),而是写geom.STArea(),当你把函数链接在一起的时候,这会变得更加明显。 函数名称中的下划线的删除只是一个小小的烦恼。
2)。 我有一些无效的多边形已被SQL Server接受,缺lessST_MakeValid函数可能会使这有点痛苦。
3)。 仅限Windows。 一般来说,微软产品(如ESRI产品)的devise相互协调,但并不总是将标准的兼容性和互操作性作为首要目标。 如果您正在运行一个只有Windows的商店,这不是一个问题。
更新 :与SQL Server 2012玩了一下,我可以说,它已经大大改善。 现在有一个好的几何validation函数,对Geography数据types有很好的支持,包括一个FULL GLOBE对象,它允许表示占据多个半球的对象,并且支持复合曲线和圆形串 ,这对精确和紧凑除了别的以外,弧(和圆)的表示。 将坐标从一个CRS转换到另一个CRS仍然需要在第三方库中完成,尽pipe这在大多数应用程序中不是阻碍。
我没有使用SQL Server和足够大的数据集来与Postgis / MySQL进行比较,但是从我所看到的function行为正确,虽然不像Postgis那样function齐全,但它是对MySQL产品的巨大改进。
对不起,这么长时间的回答,我希望这些年来我所遭受的一些痛苦和快乐可能对某个人有所帮助。
PostGis绝对。 这是为什么。
- Postgres在性能上远远优于MySQL。 服务器具有更高的容错能力,具有开箱即用的负载均衡,caching和优化工具。
- PostGIS正在成为GIS应用程序的标准。
- 免费。
只需要注意一下MySQL最终添加了正确的GIS逻辑。
但现阶段我无法评论成本或performance
PostGIS是最好的,因为它现在正在成为GIS应用程序的标准,PostGIS是免费的。 它在性能上远远优于MySQL