Korzystam z pgroutinga w bazie danych Postgis utworzonej przez osm2pgrouting. Działa bardzo dobrze na ograniczonym zbiorze danych (3,5 tys. Sposobów, wszystkie najkrótsze ścieżki wyszukiwania A * <20 ms).
Ponieważ jednak zaimportowałem z europy większą ramkę ograniczającą (122 tys. Sposobów), wydajność znacznie spadła (najkrótsza ścieżka kosztuje około 900 ms).
Myślę, że przy użyciu A * większość tych krawędzi nigdy nie będzie odwiedzana, ponieważ są one na uboczu.
Co zrobiłem do tej pory, próbując poprawić prędkość:
- Umieść indeks na kolumnie geometrii (brak zauważalnego efektu)
- Zwiększono moją pamięć z 8 GB do 16 GB
- Zmień ustawienia pamięci postgresql (Shared_buffers, Efektywny_cache_size) z (128 MB, 128 MB) na (1 GB, 2 GB) (brak zauważalnego efektu)
Mam wrażenie, że większość pracy jest wykonywana w bibliotece C Boost, gdzie tworzony jest wykres, więc optymalizacja postgresql nie da mi dużo lepszych wyników. Ponieważ dokonuję drobnych zmian w zestawie wierszy, wybieram A * przy każdym wyszukiwaniu, trochę boję się, że biblioteka doładowań nie może buforować mojego wykresu i za każdym razem musi odbudować wszystkie 122k krawędzie (mimo że użyje tylko bardzo ograniczony podzbiór każdego zapytania). I nie mam pojęcia, ile wydaje się na robienie tego w porównaniu z faktycznym najkrótszą ścieżką.
Czy ktoś z was korzysta z pgroutinga w zestawie danych OSM 122k lub większym? Jakiej wydajności powinienem się spodziewać? Jakie ustawienia najbardziej wpływają na wydajność?