Existem bibliotecas disponíveis para calcular os caminhos mais curtos nesses gráficos. Como eles fazem isso? Mais especificamente, como eles carregam a parte necessária do gráfico para executar o algoritmo de Dijkstra?
Você pode usar um banco de dados, um formato de arquivo personalizado para ser lido do disco e uma configuração na memória.
Mas, pela minha experiência em usar um banco de dados, é aproximadamente 5 a 10 vezes mais lento e muito mais memória intenso do que gravar seu próprio formato de arquivo com base em um formato de lista vinculada "simples".
O bom é que existem várias estruturas de software usando OSM, que são de código aberto, para que você possa olhar diretamente para o código, por exemplo, veja aqui . No mecanismo de roteamento de código aberto GraphHopper , é muito fácil alternar de uma configuração mapeada na memória (baseada em disco) para a configuração na memória - ambas usando o mesmo formato. A configuração "mmap" ainda permite o uso em dispositivos móveis com restrição de memória e o último executa muito mais rápido se você tiver a RAM necessária, por exemplo, em um servidor. Por exemplo, para um gráfico mundial (> 100 milhões de nós), você precisará de cerca de 8 a 10 GB de RAM, além de muito mais RAM, se quiser acelerar ainda mais, por exemplo, com as Hierarquias de Contração - cerca de 5-8 GB a mais para todos os veículos que desejar.
O formato é muito simplista e basicamente armazena apenas os dados necessários com alguns truques para torná-los compactos. Leia mais sobre isso aqui . Disclaimer: Eu sou o autor de GraphHopper.
Em relação às outras respostas:
O algoritmo de Dijkstras, enquanto aplicável, é considerado não ideal para este problema
O Dijkstra 'normal' pode ter um desempenho bastante razoável (<1s para consultas em todo o país, como no exemplo dos nós de 3 milhões) e é ideal no 'sentido da teoria', mas precisa de um pouco de ajuste para acelerar os cenários de produção. E técnicas como as Hierachies de Contração usam uma modificação bidirecional e têm um desempenho muito bom.
redes rodoviárias são hierárquicas e planas.
as redes rodoviárias são hierárquicas apenas para carros e não planares (pontes, túneis, ...)