Моя цель - написать алгоритм кратчайшего пути для дорожной сети.
В настоящее время моя архитектура примерно такая: я храню все данные в базе данных PostgreSQL с поддержкой PostGIS. Я выполняю один метод SELECT * FROM
, который занимает менее 3 секунд для таблицы со 100 000 ребер (путей), и после этого я применяю алгоритм кратчайшего пути (на основе Java, Ruby или чего-либо еще) к график, который уже находится в памяти. Вторая операция может занять около 1,5 секунд на графе со 100 000 ребер.
Итак, требуется:
Это очень похоже на то, что делает pgRouting (насколько мне известно, он использует C Boost для сохранения графика в памяти), за исключением того, что pgRouting занимает в общей сложности около 2 секунд, чтобы вычислить кратчайший путь для того же набора данных (да, это быстро, но для меня это черный ящик, поэтому мне нужен собственный).
Но недавно я узнал о базах данных Graph и о Neo4j. На своем сайте они заявляют, что «возможность выполнять эти вычисления со скоростью менее секунды на графиках миллионов дорог и путевых точек позволяет во многих случаях отказаться от обычного подхода предварительного вычисления индексов с хранилищами K / V и иметь возможность поставить маршрутизацию на критический путь с возможностью адаптации к текущим условиям и создания высоко персонализированных и динамических пространственных сервисов ».
Итак, возникает вопрос: будет ли графическая база данных быстрее справляться с моей конкретной проблемой?
Проблема имеет следующие свойства: