У меня есть график с каждым Edge
, имеющим некоторый weight
.
Я реализовал алгоритм dijkstra для поиска кратчайшего пути от Vertex
A до B.
Weights
для графика считываются из БД Key/Value. [ redis.io
].
Weights DB
составляет около 2 ГБ.weights
имеется 50 БД. [Или 50 разных файлов, каждый 2 ГБ, имеющих значения веса, которые я сохранил в Redis.io].function FindPath(Start, End, DB_name)
.Dijkstras считывает значения веса из памяти [Redio.io является хранилищем значений ключа в памяти]. Но моя оперативная память - всего 6 ГБ. Невозможно одновременно хранить в памяти 2 ГБ * 50 БД.
Запрос Пути может быть случайным и параллельным.
Каков наилучший способ хранения БД Weights?
Увеличивает ли опция RAM только для увеличения скорости выполнения программы?
РЕДАКТИРОВАТЬ
Количество краев: 4,652,505
Если речь идет о скорости, основной опцией является увеличение бара. Вы не можете достичь аналогичной производительности с помощью nosql DB (например, mongodb). Другой вариант - попытаться распараллелить алгоритм в многоядерной системе. Но это очень сложно, поскольку окончательное решение является глобальным.
[EDIT] Самый быстрый способ хранения весов - это смежный массив весов, проиндексированных по количеству краев. Один массив на БД. Если все массивы не могут поместиться в ваш плунжер, вы можете создать некоторые базовые механизмы кэширования, обменявшись DB из файла в массив (надеясь, что не все db будут доступны одновременно).