Mengapa fungsi routing pgr_ * mengambil selamanya berdasarkan data OSM dalam DB diaktifkan pgrouting


9

Saya memuat dataset OSM Jerman ke dalam DB pgrouting dengan menggunakan osm2po 4.7.7. Semuanya berfungsi dengan baik saya sudah mengatur osm2po melalui konfigurasi itu dan itu berfungsi seperti pesona melalui bagian Jawa itu.

Saya memiliki tabel * _2po_4pgr yang diimpor tanpa masalah. Bahkan tabel * 2po_v diimpor, meskipun saya tidak sepenuhnya memahami hubungan tabel ini.

Saya menjalankan fungsi pgr_createTopology yang berjalan cukup lama (12000secs) sambil menghitung semua tepi 6m. Saya pikir ini akan melakukan kesepakatan, tetapi masih lambat tak tertahankan.

Saya ingin tahu apakah saya lupa sesuatu. Saya sedang berpikir untuk menggunakan pgRouting bukan perpustakaan java tetapi saat ini kinerjanya hanya di luar perbandingan.


1
Sudahkah Anda membuat indeks, sudahkah Anda menyetel variabel memori postgis? createTopology hanya berjalan sekali untuk seluruh dataset sehingga kinerjanya tidak terlalu penting. Catatan samping. Saya memang memiliki seluruh Finlandia dari dataset digiroad (seperti 2G jaringan jalan) dan mengembalikan hasil dalam max 250 ms, biasanya 125ms tanpa optimasi. Jadi hari ini seharusnya lebih baik
simplexio

Ada indeks pada kolom sumber dan target yang dibuat secara otomatis oleh generator skrip osm2po. Lebih dibutuhkan? Saya mengubah variabel work_mem / maintenance_work_mem ke nilai GigaByte, dimulai kembali, masih tidak ada perubahan. Apakah ada template skrip start up yang saya butuhkan?
Johnny Cusack

1
Hmmm ... Apa yang dilakukan createTopology ()? Maksud saya, osm2po sudah membuat topologi berdasarkan OSM-Node-IDs. Jadi tidak perlu menjalankan sth. mirip lagi. Untuk pgRouting (shortest_path & shortest_path_astar) Anda hanya perlu membuat tabel 4pgr. Itu saja.
Carsten

Saya sekarang memiliki set data finland, postgis 2.0.3, pgrouting 2.0.0-dev. Dan saya harus mengatakan ini lambat. allways lebih dari 1 detik untuk hasil saat menggunakan pgr_astar (). Saya memeriksa apakah saya mendapatkan ini sedikit lebih cepat
simplexio

Jawaban:


5

Masalah dengan kinerja pgRouting tampaknya adalah bahwa pgr_astar dan pgr_dijkstra baru menggunakan seluruh grafik (yang menjamin solusi jika ada satu). Solusi sederhana untuk mendapatkan kinerja yang lebih baik adalah membatasi grafik yang digunakan untuk area yang lebih kecil. Ini memiliki masalah sendiri seperti kadang-kadang dapat membuat grafik yang tidak dapat diselesaikan

 (SELECT ST_Expand(ST_Extent(geom_way),0.1) as box  FROM hh_2po_4pgr as l1 WHERE l1.source =7 OR l1.target = 12) 

Membuat BBOX dari koleksi sumber dan target dan memperluasnya 0,1 derajat, lalu kueri yang sama digunakan untuk membatasi ukuran grafik dalam kueri pgr_

Dijkstra mulai 1.2s hingga ~ 65ms

SELECT  seq, id1 AS node, id2 AS edge, g.geom_way as the_geom
    FROM pgr_dijkstra(
            'SELECT id, source, target, cost FROM hh_2po_4pgr as r, 
            (SELECT ST_Expand(ST_Extent(geom_way),0.1) as box  FROM hh_2po_4pgr as l1    WHERE l1.source =7 OR l1.target = 12) as box
            WHERE r.geom_way && box.box',
            7, 12, false, false
    ) as r INNER JOIN hh_2po_4pgr as g ON r.id2 = g.id ;

A * dari 2s hingga ~ 50ms

SELECT seq, id1 AS node, id2 AS edge, cost
    FROM pgr_astar(
           'SELECT id, source, target, cost, x1,y1,x2,y2 FROM hh_2po_4pgr as r, 
             (SELECT ST_Expand(ST_Extent(geom_way),0.1) as box  FROM hh_2po_4pgr as l1    WHERE l1.source =7 OR l1.target = 12) as box
            WHERE r.geom_way && box.box',
            7, 12, false, false
    );

osm2po digunakan untuk mengimpor data (finland-latest) ke dalam tabel postgis. indeks inti ditambahkan ke kolom geom_way dan menjalankan analisis vakum penuh untuk database. memori bersama 1G. 512M workmem


Saya memiliki ide yang sama dengan kotak berlari, masih lebih dari 90 detik bahkan dengan vars memori diatur dll.
Johnny Cusack

saya punya garis 380k? Anda mungkin memiliki sesuatu seperti garis 3M + di tabel routing?
simplexio

1
Ini adalah salah satu masalah utama di Postgres untuk tidak men-cache seluruh grafik. Ini bekerja cukup cepat. Tetapi saya perlu menghubungkannya dengan database-tabel lain yang menciptakan dalam situasi saat ini (tes-) hambatan besar hanya dengan 5qps (permintaan per detik)
Johnny Cusack

1
Saya baru saja memuat subset baris 1M ke ramdisk untuk dibandingkan. pgr_dijkstra membutuhkan waktu 3 detik dalam menjalankan dingin. pgr_astra dengan contoh bbox yang disediakan oleh @simplexio dibutuhkan sekitar 900ms untuk menjalankan dingin. Jadi sepertinya saya harus meletakkan semuanya di ramdisk untuk kinerja yang tepat.
Johnny Cusack

1
Bagus! dengan indeks @ kttii aku berlari cepat sekarang!
Magno C

5

Saya akhirnya sampai pada kesimpulan bahwa yang terbaik adalah menempatkan seluruh grafik (termasuk indeks) pada tablespace terpisah yang secara permanen berada di memori menggunakan ramdisk.

Untuk mengatur ramdisk di Ubuntu 13.04 saya menggunakan instruksi berikut dan harus mengatakan itu berfungsi dengan baik (ini termasuk instruksi untuk memuat ulang data ke dalam memori setelah restart / reboot).

Minggu depan saya akan mempelajari SSD baru (baca 1GB / dtk) dan mencoba membandingkan kinerjanya.

Sejauh yang saya lihat itu satu-satunya solusi untuk menjaga grafik 1M + baris dapat diakses secara permanen, karena ada pembacaan acak terus menerus yang terjadi.


Bagaimana Anda membuat seluruh grafik (termasuk indeks)? Saya tidak melihat apa pun di dokumentasi pgrouting.
Dennis Bauszus

Saya menggunakan osm2po, kode java yang luar biasa! osm2po.de
Johnny Cusack

5

Gunakan panduan ini untuk mengatur indeks untuk basis data spasial. Inilah intinya:

 1. create indexes on ID, source and target columns.
 2. create index using GIST on geom column.
 3. vacuum
 4. cluster on geom column
 5. analyze

untuk tabel _4pgr dan _vertex saya, hanya kolom sumber dan target yang memiliki indeks setelah impor (osm2po-core-5.1.0).


Fantastis! dari ~ 45 detik hingga ~ 15 detik menggunakan OSM Amerika Selatan penuh dengan self-join.
Magno C

Maaf ... kesalahanku. dari ~ 45 detik hingga ~ 5 ms !!!!!!
Magno C
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.