В настоящее время у меня есть график, который имеет около 10 миллионов узлов и 35 миллионов ребер . На данный момент полный график загружается в память при запуске программы. Это занимает пару минут (в конце концов, это Java) и требует около половины гигабайта оперативной памяти. На данный момент он работает на машине с двухъядерным процессором и 4 гигабайтами оперативной памяти.
При поиске на графике с использованием поиска в ширину использование памяти возрастает до пика в один гигабайт, и в среднем это занимает десять секунд.
Я хотел бы развернуть программу на нескольких компьютерах. Функциональность, кроме поиска по графику, занимает очень мало ресурсов. Моя целевая система очень миниатюрна и имеет всего 512 мегабайт оперативной памяти.
Любые предложения о том, как реализовать метод (возможно, с использованием базы данных) для поиска в этом графе, не занимая слишком много памяти? Программа простаивает большую часть времени, так как обращается к аппаратному устройству, поэтому поиск пути может занять максимум 5 минут для упомянутого графика ...
Спасибо за любые мысли, брошенные в моем направлении.
UPDATE:
Только что найдено neo4j . Кто-нибудь знает, подойдет ли он для такого рода огромных графов?