Як ефективно масштабувати дані OpenStreetMap


9

Вже більше року я використовую внутрішній сервер PostGIS, наповнений даними OSM, який використовується як для генерації плитки на основі Mapnik, так і для геокодування на основі Номінатіму, оновленого копіями днів. Це працює досить добре.

Однак, оскільки використання зростає експоненціально, я хотів би досягти кращої надійності та продуктивності, додаючи додаткові сервери PostgreSQL. І я якось загублений.

Оскільки PostgreSQL, схоже, не справляється з реплікацією сам по собі, я б подумав про використання піде середнього програмного забезпечення, наприклад PgPool-II, для підтримки синхронізації серверів. Але я боюся, що для цього використання не буде нічого, крім необхідного: дуже високий коефіцієнт читання-запису, де всі записи виконуються в один і той же час кожного дня.

Мої запитання прості: що б ви зробили, щоб синхронізувати ці сервери? І що для цього робиться у OpenStreetMap Foundation, MapQuest, Mapbox або CloudMade?

Дякую.

Відповіді:


13

По-перше, Postgres 9 і пізніші версії мають вбудовану підтримку реплікації, і саме це ми (команда операцій із OpenStreetMap) розглядаємо, використовуючи тепер, коли ми (приблизно 90 хвилин тому) працюємо на Postgres 9.1 для основної бази даних.

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


Не знав про вбудовану реплікацію Postgres. Це, ймовірно, зробить роботу. Дякую!
П'єр

1
Також замовте REPMGR ( repmgr.org ), який використовує можливості потокової реплікації Postgres і розширює функціональність, щоб дозволити автоматично вести підлеглий до ведучого.
Shyam Sundar CS

4

Тут я бачу два варіанти:

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

1
Дякую. Перший варіант, безумовно, кращий. Друга частково зроблена, використовуючи CDN для доставки та локальний кеш Nginx / Memcached на передніх серверах.
П'єр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.