Уже более года я использую собственный сервер PostGIS, заполненный данными OSM, которые используются как для генерации тайлов на основе Mapnik, так и для геокодирования на основе Nominatim, обновляемых дневными репликами. Это работает очень хорошо.
Однако, поскольку использование растет экспоненциально, я хотел бы добиться большей надежности и производительности, добавив дополнительные серверы PostgreSQL. И я заблудился.
Поскольку PostgreSQL, похоже, не обрабатывает репликацию сам по себе, я бы подумал об использовании промежуточного программного обеспечения, такого как PgPool-II, для синхронизации серверов. Но я боюсь, что для такого использования это было бы просто необходимым: очень высокое соотношение чтения и записи, когда все записи выполняются в одно и то же время каждый день.
Мои вопросы просты: что бы вы сделали, чтобы эти серверы синхронизировались? И что для этого делается в OpenStreetMap Foundation, MapQuest, Mapbox или CloudMade?
Спасибо.
Во-первых, Postgres 9 и более поздние версии имеют встроенную поддержку репликации, и это то, что мы (операционная группа OpenStreetMap) ожидаем использовать сейчас, когда мы (примерно 90 минут назад) работаем на Postgres 9.1 для основной базы данных.
Чтобы ответить на ваш вопрос о том, что делает OSM, на сегодняшний день мы не делаем никакой репликации - есть одна большая база данных Postgres, которая выступает в качестве главной базы данных за веб-сайтом и хранит необработанные данные. Затем существуют вторичные базы данных Postgres + Postgis для рендеринга и геокодирования, которые заполняются с помощью дампов планет и различий для обновления.
Здесь я вижу два варианта: