如何高效地扩展OpenStreetMap数据

在一年多的时间里,我运行一个内部的PostGIS服务器,里面充满了OSM数据,用于基于Mapnik的tile生成和基于Nominatim的地理编码,并且使用日复制更新。 这工作得很好。

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

由于PostgreSQL似乎不能自行处理复制,所以我会考虑使用像PgPool-II这样的中间件来保持服务器的同步。 但是恐怕这种用法是没有什么必要的:非常高的读写比,所有的写操作都是在每天相同的时间完成的。

我的问题很简单:你将如何保持这些服务器同步? 而且,在OpenStreetMap Foundation,MapQuest,Mapbox或CloudMade上做了什么呢?

谢谢。

首先,Postgres 9和更高版本的内置复制支持,这就是我们(OpenStreetMap操作团队)现在正在使用PostgreSQL 9.1(主要是90分钟前)在主数据库上运行的。

要回答你的问题,关于什么OSM做的,到目前为止,我们不做任何forms的复制 – 有一个大的Postgres数据库作为网站后面​​的主数据库,并保存原始数据。 然后是用于渲染和地理编码的二级Postgres + Postgis数据库,这两个数据库都使用星球转储和差异进行填充以进行更新。

我可以在这里看到两个选项:

  1. 数据库池 – 复制http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling ,我会PG群集,因为它是同步的,并允许负载平衡。 你也可以使用主 – 从架构,但没有连接池和asynchronous,这一切都取决于你想要实现的体系结构和复制速度。更多关于pgpoll-2这里的信息-small FAQ( http://www.dalibo .org / _media / pgpool.pdf )
  2. WebOptimisation – 对于Mapquest和OSF,据我所知,他们在服务器级+连接池使用Webcaching。 这意味着它不会从Postgres / Postgis请求那么多的请求,因为我caching了一些数据。 3.Postgis优化 – 在数据库层面传播查询,索引和数据库规范化。 我会去“PostGis在行动”( http://manning.com/obe/ )了解更多关于postgis数据types和调整您的服务器给他们