Saya menggunakan pgrouting pada database postgis yang dibuat melalui osm2pgrouting. Ia bekerja sangat baik pada dataset terbatas (3.5k cara, semua jalur terpendek A * pencarian <20 ms).
Namun karena saya telah mengimpor kotak pembatas yang lebih besar (cara 122k) dari europe.osm kinerjanya turun banyak (biaya jalur terpendek sekitar 900 ms).
Saya akan berpikir bahwa menggunakan A * sebagian besar tepi tidak akan pernah dikunjungi karena mereka keluar dari jalan.
Apa yang telah saya lakukan sejauh ini dalam upaya meningkatkan kecepatan:
- Letakkan indeks pada kolom geometri (tidak ada efek yang terlihat)
- Meningkatkan memori saya dari 8GB menjadi 16GB
- Ubah pengaturan memori postgresql (shared_buffers, efektif_cache_size) dari (128MB, 128MB) menjadi (1GB, 2GB) (tidak ada efek yang terlihat)
Saya merasa bahwa sebagian besar pekerjaan sedang dilakukan di perpustakaan C Boost di mana grafik sedang dibuat sehingga mengoptimalkan postgresql tidak akan memberi saya hasil yang lebih baik. Saat saya melakukan perubahan kecil pada set baris, saya memilih A * untuk setiap pencarian. Saya agak takut bahwa boost library tidak dapat men-cache grafik saya dan harus membangun kembali semua tepi 122k setiap kali (walaupun itu hanya akan menggunakan yang sangat subset terbatas setiap kueri). Dan saya tidak tahu berapa banyak yang dihabiskan untuk melakukan itu dibandingkan dengan pencarian jalur terpendek yang sebenarnya.
Apakah ada di antara Anda yang menggunakan pgrouting pada 122k atau lebih banyak set data OSM? Kinerja apa yang harus saya harapkan? Pengaturan apa yang paling memengaruhi kinerja?