为什么 Open Street Maps (OSM) 使用 PostgreSQL 数据库?

Max*_*Max 2 postgresql openstreetmap

在过去的几个月里,我一直在使用 GitHub 上的 openstreetmap-tile-server(链接在这里)从 Docker 容器渲染 OSM磁贴。切片服务器使用 PostgreSQL 数据库来存储其数据。通过对创建我自己的 OSM tile 和我自己的 tile 服务器进行更多研究,很多教程都提到使用 PostgreSQL 数据库。

为什么是这样?为什么不改用像 MySQL 这样的 SQL 数据库呢?对于数据集(例如 openstreetmap 数据),使用 PostgreSQL 而不是不同的 SQL 数据库可以获得/获得什么?


编辑:编辑的问题,表明我正在将 Postgres 与其他 SQL 数据库进行比较。

Har*_*efe 5

本来MySQL实际上是用于主要的内部OSM数据库,存储实际的OSM数据,并通过OSM API进行查询和修改。然而,对于图块渲染和其他目的,从不使用内部原始格式,而是将作为压缩 XML 或更紧凑的二进制 PBF 格式导出的 OSM 数据导入到更适合进一步处理的数据库模式中。

通常,这是通过“imposm”或“osm2pgsql”工具完成的,PostgreSQL/PostGIS 组合作为首选的 RDBMS,因为它提供了最强大的 GIS 功能集,至少在免费和开源世界中是如此。

主 OSM 数据库是一个例外,因为对其的任何查询总是只检索矩形区域的数据,因此实际上不需要 GIS 扩展,在这种情况下将坐标存储为简单的数字数据就足够了。最终决定也将其切换到 PostgreSQL,以减少在 openstreetmap.org 站点设置中维护的不同组件的数量。

理论上,您也可以使用其他支持 GIS 的 RDBMS,例如 SQLite 的 SpatiaLite 变体或 MariaDB/MySQL,但与 PostgreSQL/PostGIS 设置相比,它们有其缺点:

例如,只要只有一个线程访问数据,SpatiaLite 就很好,并发访问时它根本不能很好地扩展。

而 MariaDB 和 MySQL 只是或多或少地真正实现了 OpenGIS SQL 规范的最低限度,甚至在过去几年才真正实现。至少在功能方面都比 PostGIS 落后十多年。

免责声明:即使我,虽然在 MariaDB Corp 工作,并且之前曾在 MySQL AB 工作过,总共超过十年,但一直建议在 GIS 应用程序中使用 PostGIS 而不是 MariaDB 或 MySQL,除非有人因为其他原因绑定到 MariaDB 或 MySQL已经。