web-dev-qa-db-ja.com

OpenStreetMapデータを効率的にスケールアウトする方法

1年以上の間、私はOSMデータで満たされた社内PostGISサーバーを実行しています。これは、Mapnikベースのタイル生成とNominatimベースのジオコーディングの両方に使用され、日の複製で更新されます。これはかなりうまく機能します。

ただし、使用量が急激に増加しているため、PostgreSQLサーバーを追加することで信頼性とパフォーマンスを向上させたいと考えています。そして、私はちょっと迷っています。

PostgreSQLはそれ自体ではレプリケーションを処理していないように見えるので、サーバーの同期を維持するためにPgPool-IIのようなミドルウェアのパイドを使用することを考えます。しかし、この使用法には必要なだけだと思います。非常に高い読み取り/書き込み比率で、すべての書き込みが毎日同じ正確な時間に実行されます。

私の質問は簡単です:これらのサーバーの同期を保つために何をしますか?そして、OpenStreetMap Foundation、MapQuest、Mapbox、またはCloudMadeでこれに対して何が行われていますか?

ありがとう。

9
Pierre

まず、Postgres 9以降にはレプリケーションサポートが組み込まれています。これは、メインデータベース用にPostgres 9.1で実行している(約90分前の時点で)現在、私たち(OpenStreetMap運用チーム)が使用することを期待しています。

OSMの機能に関する質問に答えるために、これまでのところ、レプリケーションは一切行っていません。Webサイトの背後でマスターデータベースとして機能し、生データを保持する1つの大きなPostgresデータベースがあります。次に、レンダリングとジオコーディング用のセカンダリPostgres + Postgisデータベースがあり、どちらも更新用の惑星ダンプと差分を使用して入力されます。

13
TomH

私はここで2つのオプションを見ることができます:

  1. データベースプーリング-レプリケーション http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling 、同期していて負荷分散が可能なので、PGクラスターを作成します。マスター-スレーブアーキテクチャを使用することもできますが、接続プールと非同期を使用しない場合は、すべて、達成したいアーキテクチャとレプリケーション速度によって異なります。pgpoll-2の詳細については、こちらをご覧ください-小さなFAQ( http:/ /www.dalibo.org/_media/pgpool.pdf
  2. WebOptimisation-MapquestとOSFの場合、サーバーレベル+接続プールでWebキャッシングを使用していることがわかっています。つまり、Postgres/Postgisからは、一部のデータをキャッシュするほど多くのリクエストをリクエストしないということです。 3.Postgisの最適化-DBレベルでのクエリの説教、インデックス作成、データベースの正規化。私は「PostGisの動作」( http://manning.com/obe/ )に行き、postgisのデータ型についてさらに学び、サーバーをそれらに適応させます
4
Alex H