El problema del rendimiento de pgRouting parece ser que los nuevos pgr_astar y pgr_dijkstra utilizan todo el grafo (lo que garantiza la solución si la hay). Una solución simple para obtener un mejor rendimiento es limitar el gráfico utilizado a un área más pequeña. Tiene sus propios problemas, como que a veces puede crear gráficos que no pueden ser resueltos.
(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)
Crea BBOX sobre la colección de origen y destino y la expande 0,1 grados, luego se utiliza la misma consulta para limitar el tamaño del gráfico en la consulta pgr_
Dijkstra de 1,2s a ~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* de 2s a ~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 se utilizó para importar los datos (finland-latest) a la tabla postgis. índice gist añadido a la columna geom_way y análisis de vacío completo ejecutado para la base de datos. memoria compartida 1G . workmem 512M
1 votos
¿ha creado índices, ha ajustado las variables de memoria de postgis? createTopology sólo se ejecuta una vez para todo el conjunto de datos, por lo que su rendimiento no importa mucho. Nota al margen. Tuve toda la Finlandia de digiroad conjunto de datos (como 2G de la red de carreteras) y devuelve los resultados en un máximo de 250 ms, por lo general 125ms sin ningún tipo de optimizaciones. Así que debería ser mejor ahora
0 votos
Hay índices en la columna de origen y de destino creados automáticamente por el generador de scripts osm2po. ¿Se necesitan más? He cambiado el work_mem/maintenance_work_mem variables a un valor de GigaByte, reiniciado, aún no hay cambios. ¿Hay alguna plantilla de script de inicio que pueda necesitar?
1 votos
Hmmm... ¿Qué hace createTopology()? Quiero decir, osm2po ya crea la topología basada en OSM-Node-IDs. Así que no hay necesidad de ejecutar algo similar de nuevo. Para pgRouting (shortest_path & shortest_path_astar) sólo necesitas la tabla 4pgr creada. Eso es todo.
0 votos
Ahora tengo el conjunto de datos de Finlandia, postgis 2.0.3, pgrouting 2.0.0-dev. Y tengo que decir que esto es lento. siempre más de 1 segundo para el resultado cuando se utiliza pgr_astar(). Compruebo si consigo esto un poco más rápido