Hay bibliotecas disponibles para calcular las rutas más cortas en tales gráficos. ¿Cómo lo hacen? Más específicamente, ¿cómo cargan la parte requerida del gráfico para ejecutar el algoritmo de Dijkstra?
Puede usar una base de datos, un formato de archivo personalizado para leer desde el disco y una configuración en memoria.
Pero, según mi experiencia, el uso de una base de datos es aproximadamente de 5 a 10 veces más lento y requiere mucha más memoria que escribir su propio formato de archivo basado en un formato de lista enlazada 'simple'.
Lo bueno es que hay varios marcos de software que utilizan OSM que son de código abierto para que pueda ver directamente el código, por ejemplo, consulte aquí . En el motor de enrutamiento de código abierto GraphHopper , es muy fácil cambiar de una configuración de asignación de memoria (basada en disco) a la configuración en memoria, ambas utilizando el mismo formato. La configuración "mmap" incluso permite el uso en dispositivos móviles con memoria restringida y este último funciona mucho más rápido si tiene la RAM necesaria, por ejemplo, en un servidor. Por ejemplo, para un gráfico mundial (> 100 millones de nodos), entonces necesita alrededor de 8-10 gb de RAM, además de mucha más RAM si desea acelerar todo aún más, por ejemplo, con Jerarquías de Contracción: aproximadamente 5-8 gb más para cada vehículo que desee.
El formato es muy simple y básicamente almacena solo los datos que necesita con algunos trucos para hacerlo compacto. Lea más sobre esto aquí . Descargo de responsabilidad: soy el autor de GraphHopper.
En cuanto a las otras respuestas:
El algoritmo de Dijkstras, aunque aplicable, se considera no óptimo para este problema.
El Dijkstra 'normal' puede tener un rendimiento muy razonable (<1s para consultas en todo el país como su ejemplo de 3 millones de nodos) y es óptimo en el 'sentido de la teoría', pero necesita un poco de ajuste para ser rápido en los escenarios de producción. Y técnicas como las Hieraquias de Contracción usan una modificación bidireccional de la misma y funcionan muy bien.
Las redes de carreteras son jerárquicas y planas.
Las redes de carreteras son jerárquicas solo para automóviles y no planas (puentes, túneles, ...)