5 votos

Para hacerlo más rápido

Tengo la tabla de red, que tiene alrededor de 2 millones de registros (sólo 3 países de Europa). Cuando ejecuto Shorthest de la ruta es muy lento, tarda 3 min para tomar sólo los registros. He probado con dijkstra-sp-delta-dirigido, pero también es lento, 2-2.5 min. Este sp es el uso de cuadro delimitador y la esencia del índice, así que debe ser más rápido, pero no lo es. En el futuro, debo añadir algún otro país, así que la tabla va a ser muy grande.

¿Qué podría hacer yo para hacer esto de enrutamiento más rápido? Que yo sepa Postgre no tiene la opción de guardar la tabla temporal en la memoria RAM, sólo funciona en una sola sesión.

Tengo 4 GB de RAM, yo trabajo con OSM y Postgre porque es gratis, yo realmente no sé ¿hay alguna solución para este problema? No estoy en posición para comprar algo caro, he demanda para el trabajo con fuentes abiertas. Por supuesto que todo el mundo espera rápida y barata solución que funciona como Google :)

Actualización:

Por la ruta más rápida (evitar el peaje , evitar carreteras) mi consulta es:

SELECT * FROM shortest_path(
   'SELECT gid AS id, 
           source::int4 AS source, 
           target::int4 AS target, 
           time + cost::float8 AS cost, 
           time + reverse_cost::float8 AS reverse_cost 
    from network where toll is null and road_class!=1 ', 
    257027, 276521, true, true) 

Para el shothest ruta (evitar el peaje , evitar carreteras) mi consulta es:

SELECT * FROM shortest_path(
   'SELECT gid AS id, 
           source::int4 AS source,
           target::int4 AS target, 
           length + cost::float8 AS cost, 
           length + reverse_cost::float8 AS reverse_cost 
    from network where toll is null and road_class!=1 ', 
    257027, 276521, true, true) 

6voto

Patrick Puntos 116

¿Cuál es su cuadro delimitador valor de búfer? Se necesita estar en las mismas unidades que los datos de su red. Si su unidad es el grado, entonces debe ser un pequeño número decimal.

También hizo agregar índices de origen, de destino y gid y ejecutar VACUUM FULL?

1voto

UberAlex Puntos 1854

3 min. podría ser realistas para Postgres/pgRouting, depende del tamaño del país, la red de carreteras que haya probado. Usted podría tratar de osm2po. Lo he probado en OSM conjunto de datos y es realmente rápido, incluso en grandes redes de carreteras. Puedes probarlo y ver si se ajusta a sus necesidades.

0voto

Anon Puntos 31

si algún lector de este hilo quiere crear matrices de distancia, he modificado de ruta más corta() para usar el boost::dijkstra con muchos destinos.

Ver github.com/pgRouting/pgrouting/wiki/One_to_many-Dijkstra---To-review y github.com/pgRouting/pgrouting/issues/66 por la falta de instrucciones de instalación. Por favor, comentarios...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X