Как эффективно масштабировать данные OpenStreetMap

Уже более года я работаю на собственном сервере PostGIS, заполненном данными OSM, используемыми как для генерации тайлов на основе Mapnik, так и для геокодирования на основе Nominatim, обновляемых с помощью ежедневных копий. Это работает довольно хорошо.

Однако, поскольку использование растет в геометрической прогрессии, я хотел бы добиться большей надежности и производительности, добавив дополнительные серверы PostgreSQL. И я отчасти потерян.

Поскольку PostgreSQL, по-видимому, сам по себе не справляется с репликацией, я бы подумал об использовании набора промежуточного программного обеспечения, такого как PgPool-II, для синхронизации серверов. Но я боюсь, что это было бы просто необходимым для этого использования: очень высокое отношение чтения-записи, когда все записи выполняются в одно и то же точное время каждый день.

Мои вопросы просты: что бы вы сделали, чтобы синхронизировать эти серверы? И что для этого делается в OpenStreetMap Foundation, MapQuest, Mapbox или CloudMade?

Благодарю.

2 ответа

Решение

Во-первых, Postgres 9 и более поздние версии имеют встроенную поддержку репликации, и это то, что мы (рабочая группа OpenStreetMap) ожидаем использовать сейчас, когда мы (около 90 минут назад) работаем на Postgres 9.1 для основной базы данных.

Чтобы ответить на ваш вопрос о том, что делает OSM, на сегодняшний день мы не делаем никакой репликации - есть одна большая база данных Postgres, выступающая в качестве основной базы данных позади веб-сайта и содержащая необработанные данные. Затем существуют вторичные базы данных Postgres+Postgis для рендеринга и геокодирования, которые заполняются с использованием дампов планет и различий для обновления.

Я вижу два варианта здесь:

  1. Объединение баз данных - репликация http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling, я бы использовал кластер PG, поскольку он является синхронным и разрешает распределение нагрузки. Вы также можете использовать архитектуру master - slave, но без пулов соединений и асинхронности, все зависит от архитектуры и скорости репликации, которую вы хотите достичь. Больше информации о pgpoll-2 здесь - небольшой FAQ ( http://www.dalibo.org/_media/pgpool.pdf)
  2. WebOptimisation - для Mapquest и OSF, насколько я знаю, они используют веб-кеширование на уровне сервера + пул соединений. Это означает, что он не будет запрашивать у Postgres / Postgis столько запросов, сколько я кеширую. 3.Постгис оптимизации - проповедь запросов на уровне БД, индексация и нормализация базы данных. Я хотел бы перейти на "PostGis в действии" ( http://manning.com/obe/), чтобы узнать больше о типах данных postgis и адаптировать ваш сервер к ним
Другие вопросы по тегам