如何有效扩展 OpenStreetMap 数据

如何有效扩展 OpenStreetMap 数据

一年多以来,我一直在运行一个内部 PostGIS 服务器,里面装满了 OSM 数据,用于基于 Mapnik 的图块生成和基于 Nominatim 的地理编码,并使用每日重复进行更新。效果非常好。

然而,随着使用量呈指数级增长,我希望通过添加额外的 PostgreSQL 服务器来实现更好的可靠性和性能。但我有点迷茫。

由于 PostgreSQL 本身似乎无法处理复制,因此我会考虑使用 PgPool-II 之类的中间件来保持服务器同步。但我担心这对于这种用途来说是必要的:读写比非常高,所有写入操作每天都在同一时间完成。

我的问题很简单:你会怎么做才能让这些服务器保持同步?OpenStreetMap Foundation、MapQuest、Mapbox 或 CloudMade 是如何做到这一点的?

谢谢。

答案1

首先,Postgres 9 及更高版本确实具有内置复制支持,而这正是我们(OpenStreetMap 运营团队)现在期望使用的,因为我们(大约 90 分钟前)在 Postgres 9.1 上运行主数据库。

回答你关于 OSM 做什么的问题,到目前为止,我们没有做任何类型的复制 - 有一个大型 Postgres 数据库作为网站背后的主数据库并保存原始数据。然后有用于渲染和地理编码的辅助 Postgres+Postgis 数据库,这两个数据库都使用 planet dumps 和 diffs 进行填充以进行更新。

答案2

我在这里看到两个选项:

  1. 数据库池 - 复制http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling,我会选择 PG 集群,因为它是同步的,并且允许负载平衡。您也可以使用主从架构,但没有连接池和异步,这完全取决于您想要实现的架构和复制速度。有关 pgpoll-2 的更多信息,请访问此处 - 小型常见问题解答 (http://www.dalibo.org/_media/pgpool.pdf
  2. WebOptimisation - 据我所知,Mapquest 和 OSF 使用服务器级别的 Web 缓存 + 连接池。这意味着它不会从 Postgres /Postgis 请求那么多请求,因为我缓存了一些数据。3.Postgis 优化 - 在 DB 级别宣扬查询、索引和数据库规范化。我会选择“PostGis 在行动”(http://manning.com/obe/) 了解有关 postgis 数据类型的更多信息,并使你的服务器适应它们

相关内容