Estou usando o pgrouting em um banco de dados postgis criado por meio do osm2pgrouting. Ele executa muito bem em um conjunto de dados limitado (3,5 mil maneiras, todo o caminho mais curto A * pesquisa <20 ms).
No entanto, desde que importei uma caixa delimitadora maior (122k maneiras) da europe.osm, o desempenho caiu muito (um caminho mais curto custa cerca de 900ms).
Eu acho que usando A * a maioria dessas bordas nunca será visitada, pois estão fora do caminho.
O que fiz até agora na tentativa de melhorar a velocidade:
- Coloque um índice na coluna de geometria (sem efeito perceptível)
- Aumentei minha memória de 8GB para 16GB
- Altere as configurações de memória do postgresql (shared_buffers, effective_cache_size) de (128MB, 128MB) para (1GB, 2GB) (sem efeito perceptível)
Tenho a sensação de que a maior parte do trabalho está sendo feita na biblioteca C Boost, onde o gráfico está sendo feito, para otimizar o postgresql não me dará resultados muito melhores. Como faço pequenas alterações no conjunto de linhas que seleciono para A * em todas as pesquisas, tenho um pouco de medo de que a biblioteca de impulso não consiga armazenar em cache meu gráfico e precise reconstruir todas as arestas de 122k todas as vezes (mesmo que use apenas uma subconjunto limitado a cada consulta). E não tenho ideia de quanto é gasto fazendo isso em comparação com a pesquisa de caminho mais curta real.
Algum de vocês usa pgrouting em um conjunto de dados OSM 122k ou superior? Que desempenho devo esperar? Quais configurações afetam mais o desempenho?