71

编辑:几个月来我一直在使用 Postgres 和 PostGIS,我很满意。

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

哪个数据库最适合所有这些数据的底层数据存储?这是我的愿望:

  • 我熟悉 DBMS。我对 PostgreSQL 最薄弱,但如果其他一切都检查出来,我愿意学习。
  • 它适用于 GIS 查询。谷歌搜索表明 PostgreSQL + PostGIS 可能是最强的?至少很多产品似乎都在使用它。MySql 的空间扩展似乎比较少?
  • 低成本。尽管 SQL Server Express 2008 R2 中有 10GB 的数据库限制,但我不确定我是否愿意接受免费版本的这个限制和其他限制。
  • 与 Microsoft .NET Framework 不冲突。感谢 Connector/Net 6.3.4,MySql 可以很好地运行 C# 和 .NET Framework 4 程序。它完全支持 .NET 4 的实体框架。尽管我不反对为 Devart 的 dotConnect for PostgreSQL 专业版支付 180 美元,但我找不到任何非商业的 PostgreSQL 等价物。
  • 与 R 兼容。似乎所有这 3 个都可以使用 ODBC 与 R 对话,因此可能不是问题。

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

4

5 回答 5

68

我已经使用了所有三个数据库并在它们之间进行了迁移,所以希望我仍然可以在旧帖子中添加一些内容。十年前,我的任务是把一个庞大的——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)。不支持栅格。能够在数据库中进行组合矢量栅格分析是非常有用的 GIS 功能。

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

6)。自从被甲骨文收购后,空间真的被搁置了。

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

邮政地理信息系统

考虑到我们在使用 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 服务器。

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

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

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

3)。仅限窗户。通常,Microsoft 产品(如 ESRI 产品)旨在很好地相互配合,但并不总是将标准的合规性和互操作性作为主要目标。如果您经营的是一家只有窗户的商店,这不是问题。

更新:在 SQL Server 2012 上玩了一下,我可以说它已经有了很大的改进。现在有一个很好的几何验证功能,对 Geography 数据类型有很好的支持,包括一个 FULL GLOBE 对象,它允许表示占据多个半球的对象,并支持复合曲线和圆形字符串,这对精确和紧凑很有用除其他外,弧(和圆)的表示。将坐标从一个 CRS 转换到另一个 CRS 仍然需要在 3rd 方库中完成,尽管这在大多数应用程序中并不是一个阻碍。

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

很抱歉这么长的回答,我希望我多年来所遭受的一些痛苦和快乐可能对某人有所帮助。

于 2014-03-22T10:20:14.733 回答
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特征”,波士顿 GIS。

考虑到你的观点:

  • 我熟悉 DBMS:在 Windows 上设置 PostGIS 数据库很容易,使用 PgAdmin3 管理也很简单
  • 它在 GIS 查询方面表现出色: PostGIS 绝对是这三者中最强的,只有 Oracle Spatial 具有可比性,但如果考虑其成本,则不合格
  • 低成本:肯定为 PostGIS +1
  • 与 Microsoft .NET Framework 不冲突:您至少应该能够通过 ODBC 进行连接(请参阅 Postgres wiki
  • 与 R 兼容:这三个中的任何一个都不应该是问题
于 2010-09-18T22:42:36.093 回答
19

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

  1. Postgres 在性能上远远优于 MySQL。服务器具有更高的容错性,具有用于负载平衡、缓存和优化的开箱即用工具。
  2. PostGIS 正在成为 GIS 应用程序的标准。
  3. 免费。
于 2010-09-18T21:53:15.743 回答
0

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

于 2012-09-22T07:59:30.370 回答
0

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

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

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

于 2012-05-23T02:40:08.797 回答