Bagaimana skala data OpenStreetMap secara efisien

9

Selama lebih dari satu tahun sekarang, saya menjalankan server PostGIS in-house yang diisi dengan data OSM, digunakan untuk pembuatan ubin berbasis Mapnik dan geocoding berbasis Nominatim, diperbarui dengan ulangan harian. Ini bekerja dengan cukup baik.

Namun, karena penggunaan semakin meningkat secara eksponensial, saya ingin mencapai keandalan dan kinerja yang lebih baik dengan menambahkan server PostgreSQL tambahan. Dan saya agak tersesat.

Karena PostgreSQL tampaknya tidak menangani replikasi dengan sendirinya, saya akan berpikir tentang menggunakan piede middleware seperti PgPool-II untuk menjaga server tetap sinkron. Tetapi saya khawatir itu tidak akan menjadi apa-apa selain untuk penggunaan ini: rasio baca-tulis yang sangat tinggi, di mana semua penulisan dilakukan pada waktu yang persis sama setiap hari.

Pertanyaan saya sederhana: Apa yang akan Anda lakukan untuk menjaga server ini tetap sinkron? Dan, apa yang dilakukan untuk ini di OpenStreetMap Foundation, MapQuest, Mapbox atau CloudMade?

Terima kasih.

Pierre
sumber

Jawaban:

13

Pertama, Postgres 9 dan yang lebih baru memiliki dukungan replikasi bawaan dan itulah yang kami (tim operasi OpenStreetMap) harapkan untuk melihat menggunakan sekarang karena kami (sekitar 90 menit yang lalu) menjalankan Postgres 9.1 untuk basis data utama.

Untuk menjawab pertanyaan Anda tentang apa yang OSM lakukan, yah, sampai saat ini kami tidak melakukan replikasi apa pun - ada satu database Postgres besar yang bertindak sebagai database master di belakang situs web dan menyimpan data mentah. Kemudian ada database Postgres + Postgis sekunder untuk rendering dan untuk geocoding, yang keduanya dihuni menggunakan dump planet dan berbeda untuk memperbarui.

TomH
sumber
Tidak tahu tentang replikasi bawaan Postgres. Ini sangat mungkin akan melakukan pekerjaan. Terima kasih!
Pierre
1
Juga checkout REPMGR ( repmgr.org ) yang menggunakan kemampuan replikasi streaming Postgres dan memperluas fungsionalitas untuk memungkinkan untuk mundur budak ke master secara otomatis.
Shyam Sundar CS
4

Saya dapat melihat dua opsi di sini:

  1. Penggabungan basis data - replikasi http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling , saya akan mengelompokkan PG karena sinkron dan memungkinkan penyeimbangan muatan. Anda juga dapat menggunakan arsitektur master-slave tetapi tanpa pooling dan asinkron, semuanya tergantung pada arsitektur dan kecepatan replikasi yang ingin Anda capai. Informasi lebih lanjut tentang pgpoll-2 di sini - FAQ kecil ( http: //www.dalibo .org / _media / pgpool.pdf )
  2. WebOptimisation - untuk Mapquest dan OSF sejauh yang saya tahu mereka menggunakan caching web di level server + pooling koneksi. Itu berarti bahwa itu tidak akan meminta dari Postgres / Postgis begitu banyak permintaan karena saya menyimpan beberapa data. 3. Optimalisasi Postgis - mengkhotbahkan kueri di tingkat DB, pengindeksan dan normalisasi basis data. Saya akan mencari "PostGis dalam aksi" ( http://manning.com/obe/ ) untuk mempelajari lebih lanjut tentang tipe data postgis dan menyesuaikan server Anda dengan mereka
Alex H
sumber
1
Terima kasih. Opsi pertama pasti lebih disukai. Yang kedua sebagian dilakukan, menggunakan CDN untuk pengiriman dan cache Nginx / Memcached lokal di server depan.
Pierre